Ограничение на объем кэшируемого фрагмента

StackOverflow https://stackoverflow.com/questions/5349

  •  08-06-2019
  •  | 
  •  

Вопрос

Почему существует жестко заданный лимит фрагмента (.5 мегабайт после сжатия) в сохраненный в памяти?Кто-нибудь перекомпилировал их, чтобы улучшить это?Я знаю, что мне не следовало бы рассылать такие большие куски повсюду, но эти сверхтяжелые куски время от времени случаются со мной и сеют хаос.

Это было полезно?

Решение

Этот вопрос раньше был в официальный FAQ

Какие ограничения в memcached я мог бы использовать?(Машина Обратного хода)

Процитировать:

Простые ограничения, которые вы, вероятно, увидите с memcache, - это ключ и ограничения на размер элемента.Количество ключей ограничено 250 символами.Сохраненные данные размер не может превышать 1 мегабайт, поскольку это самый большой типичный размер slab. "

В настоящее время часто задаваемые вопросы были пересмотрены, и теперь на этот счет есть два отдельных вопроса:

Какова максимальная длина ключа?(250 байт)

Максимальный размер ключа составляет 250 символов.Обратите внимание, что это значение будет меньше, если вы используете клиентские "префиксы" или аналогичные функции, поскольку префикс прикреплен к лицевой стороне оригинальной клавиши.Более короткие клавиши как правило, лучше, поскольку они экономят память и используют меньшую пропускную способность.

Почему размер элементов ограничен 1 мегабайтом?

Ах, это популярный вопрос!

Краткий ответ:Из-за того, как работает алгоритм распределителя памяти.

Длинный ответ:Механизм хранения данных Memcached (который будет подключаться / настраиваться в будущем ...) использует модульный подход к управлению памятью .Память разбита на фрагменты разного размера, начиная с минимального числа и возрастая на факториал до максимально возможного значения.

Допустим, минимальное значение равно 400 байтам, а максимальное значение равно 1 мегабайту, а факториал равен 1,20:

сляб 1 - 400 байт , сляб 2 - 480 байт , сляб 3 - 576 байт ...и т.д.

Чем больше плита, тем больше зазор между ней и предыдущей плитой .Таким образом, чем больше максимальное значение, тем менее эффективным является хранение в памяти.Memcached также должен предварительно выделить некоторую память для каждого существующего сляба, поэтому установка меньшего факториала с большим максимальное значение потребует еще больших накладных расходов.

Есть и другие причины, по которым вы не хотели бы этого делать...Если мы говорим о веб-странице, и вы пытаетесь сохранить / загрузить значения такой большой, вы, вероятно, делаете что-то не так.При таком размере загрузка и распаковка структуры данных в память займет заметное количество времени, и ваш сайт, скорее всего, будет работать не очень хорошо.

Если вы действительно хотите хранить элементы размером более 1 МБ, вы можете перекомпилировать memcached с отредактированным slabs.c:POWER_BLOCK цените или используйте неэффективный серверный модуль malloc / free.Другие предложения включают базу данных, MogileFS и т.д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top