Подтвердить что ты не робот

Мембранные лучшие практики - небольшие объекты и много ключей или больших объектов и несколько клавиш?

Я использую memcached для хранения целочисленного результата сложного вычисления. У меня есть сотни целых объектов, которые я мог бы кэшировать! Должен ли я кэшировать их под одним ключом в более сложном объекте или использовать сотни разных ключей для объектов? (объекты, которые я кешировать, не должны быть признаны недействительными более одного раза в день)

4b9b3361

Ответ 1

Я бы сказал много маленьких ключей. Таким образом, вы можете получить точный результат, который вы хотите получить в одном вызове с минимальными затратами на сериализацию.

Если вы храните его в другом объекте (например, в массиве), вам нужно будет извлечь массив из кеша и затем извлечь элемент, который вы действительно хотите получить снова из этого массива, плюс у вас есть накладные расходы на сериализацию/десериализацию всего комплекса объект снова. В зависимости от вашего выбора языка это может означать, что вручную записывать функцию сериализации/десериализации с нуля.

Ответ 2

Я написал несколько большой анализ в http://dammit.lt/2008/12/25/memcached-for-small-objects/ - в нем описывается, как оптимизировать memcached для хранения небольших объектов - он может пролить некоторый свет на проблема.

Ответ 3

Это зависит от вашего приложения. В то время как memcached работает очень быстро, для выполнения запроса требуется некоторая передача запроса и время поиска в памяти. Эти цифры увеличиваются в зависимости от того, находится ли сервер на локальном компьютере (локальном хосте), в локальной сети или на широкой территории. Размер кеша обычно не влияет на скорость поиска.

Итак, если ваше приложение использует МНОГИЕ объекты на единицу обработки (для каждого запроса, метода или того, что у вас есть), тогда обычно лучше определить свой кеш таким образом, который снижает общее количество обращений в кеш, в то же время стараясь не дублировать данные кеша. Как и все остальное, это баланс.

то есть. Если у вас есть веб-запрос, который вытаскивает список сообщений в блоге, было бы более полезно кэшировать весь список объектов как один ключ memcached, а не (и это, по-видимому, несколько плохой пример), кэшируя массив ключей кеша для этот список, который относится к отдельным memcached объектам.

Ответ 4

Чем меньше обработка кэшированных значений, тем лучше. Так почему бы просто не сбросить их в кеш отдельно?

Ответ 5

Я бы сказал, что вы должны хранить значения индивидуально и использовать какой-то вспомогательный класс для извлечения значений с помощью multiget и создания сложного объекта данных для вас.

Ответ 6

Это зависит от того, что это за числа. Если бы вы могли, например, группировать их в диапазонах, то вы могли бы оптимизировать хранилище. Если бы вы могли хэшировать их, на карту или хеш-таблицу и хранить эту карту, сериализованную в memcached, было бы полезно.

Во всяком случае, вы можете сэкономить много маленьких клавиш, просто убедитесь, что вы настраиваете плиты на куски с небольшим размером, поэтому вы не будете тратить пространство памяти.