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

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

7.08.2008 21:31:59
1 ОТВЕТ
РЕШЕНИЕ

Этот вопрос раньше был в официальном 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 / free backend. Другие предложения включают базу данных, MogileFS и т. Д.

4
26.09.2011 12:58:24