Ограничение на объем кэшируемого фрагмента
-
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 и т.д.