Кэширование стратегий с Memcached? - PullRequest
7 голосов
/ 31 марта 2009

Я новичок в использовании распределенных решений для кэширования, таких как Memcached, на большом веб-сайте, у меня есть пара вопросов, и может кто-нибудь, кто имеет опыт работы с этими комментариями, пожалуйста.

  1. Очевидно, что объем данных, которые я могу поместить в кеш, зависит от оперативной памяти сервера. Предполагается, что у меня достаточно большая ферма серверов и оперативная память, есть ли максимальное количество объектов, которые я могу поместить в memcached, прежде чем я начну видеть снижение производительности? Причина, по которой я спрашиваю, состоит в том, что я полагаю, что если поместить буквально миллионы объектов в memcached, не займет ли это больше времени для индексации и поиска объектов? Здесь можно провести черту.

  2. Должен ли я кэшировать меньшее, но большее количество объектов в memcached или большее, но меньшее количество объектов? Меньшие объекты требуют большего количества обращений к БД, чтобы получить их, но они более гибкие и их легче программировать.

Большое спасибо,

Ray.

Ответы [ 2 ]

4 голосов
/ 04 апреля 2009

Memcached использует внутренний хеш для поиска O (1) - он предназначен для выполнения как можно меньшей сложной работы.

Что касается того, что кешировать, большое или маленькое, то это действительно то, что вам нужно хранить, что сэкономит ваши усилия (учитывая, что это большой тупой кеш, вы должны поддерживать его синхронизацию, если вы меняете одну часть, которая также упоминается в другом месте). На оригинальном сайте, для которого был написан Livejournal.com, самым крупным блоком, который имел смысл, была одна полная запись в журнале - как готовый HTML-код, который мог использовать любой, кому было разрешено просматривать этот конкретный пост.

Я использовал его для некоторых очень маленьких записей - буквально одно число против идентификатора участника, но я генерирую несколько тысяч таких записей массово с помощью одного запроса к базе данных, а не по одной за раз, как требуется .

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

3 голосов
/ 31 марта 2009

Предполагается, что у меня достаточно большая ферма серверов и оперативная память. Максимальное количество объектов, которые я могу поместить в memcached, прежде чем я увижу снижение производительности?

В идеале, ваш кэш должен быть всегда заполнен на 100%. memcached использует алгоритм хеширования для поиска ключей, поэтому, насколько я знаю, не должно быть снижения производительности для хранения большего количества ключей.

Должен ли я кэшировать меньше, но больше объектов в memcached или больше, но меньше объектов?

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

...