Memcached scaling: клавиша «группировка» - PullRequest
1 голос
/ 13 августа 2011

Так как для оптимальной производительности рекомендуется группировать связанные ключи, которые часто извлекаются вместе (используя multiGet) на одном сервере, у меня есть пара вопросов относительно неявной механики, используемой клиентскими функциями, созданными для этого.

Я видел два разных подхода к служению, как я полагаю, одной цели с использованием libmemcache (в частности, php-memcached). Первый и наиболее очевидный подход - использовать getByKey / setByKey для сопоставления ключей с серверами, а второй - использовать опцию OPT_PREFIX_KEY (есть простой пример, размещенный в документации php под конструкцией memcached :: _), который в соответствии с документацией msgstr "используется для создания" домена "для ваших ключей элементов". Предостережение в отношении второго подхода заключается в том, что он может быть установлен только для каждого отдельного экземпляра, что может быть, а может и не быть хорошим.

Так что, если я полностью не ошибаюсь, и эти два подхода на самом деле не служат одной и той же цели; это какая-то явная выгода для того, чтобы идти с подходом по сравнению с другим?

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

Спасибо!

1 Ответ

0 голосов
/ 18 мая 2012

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

Возвращаясь к вашему вопросу:

  • OPT_PREFIX_KEY практически не имеет ничего общего с группировкой значений по ключу, он просто ставит префикс всех ключей, используемых этим конкретным клиентом, поэтому «1» становится «foo1» и являетсяраспределяется путем последовательного хеширования с использованием этого нового значения, без какой-либо группировки по «foo».
  • getByKey / setByKey делает самое близкое к тому, что вы хотите, так как он может передавать различные ключи в libketama (используется для выбора сервера) исервер memcached.Если вы укажете один и тот же первый ключ и разные вторые ключи - они окажутся на том же сервере memcached, но не будут перезаписывать друг друга.

Преждевременная оптимизация является корнем всехзло

...