Memcached предел порции - PullRequest
       7

Memcached предел порции

6 голосов
/ 08 августа 2008

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

1 Ответ

4 голосов
/ 08 августа 2008

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

Какие ограничения в memcached я бы мог использовать? (Wayback Machine)

Цитировать:

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

FAQ теперь был пересмотрен, и теперь есть два отдельных вопроса, охватывающих это:

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

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

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

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

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

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

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

плита 1 - 400 байт плита 2 - 480 байт плита 3 - 576 байт ... и т. Д.

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

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

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

...