Что быстрее: Memcached или MySQL в таблице памяти типа HEAP? - PullRequest
9 голосов
/ 10 июня 2009

Если у меня есть довольно статичный набор данных, к которому я хочу иметь доступ как можно быстрее. Должен ли я кэшировать данные в Memcached или хранить их в таблице HEAP или что-то внутри MySQL? Будет ли один масштаб лучше, чем другой?

Есть ли какой-нибудь другой вариант, который еще быстрее?

Ответы [ 3 ]

20 голосов
/ 10 июня 2009

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

Однако memcached - это всего лишь простое хранилище ключей / значений. Если вам нужно сделать что-то более сложное с вашими данными (даже что-то вроде SELECT * WHERE x> 5), таблица HEAP будет гораздо более мощной.

Роберт Мунтяну поднимает хорошую мысль. Ваша иерархия кеша должна быть:

  1. Globals (локально для запроса / процесса)
  2. APC (локально для сервера)
  3. memcache (глобальный)

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

2 голосов
/ 10 июня 2009

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

Я не проводил тестирование производительности между Memcached / MySQL HEAP, но я предполагаю, что Memcached будет быстрее, потому что у него нет издержек на полный механизм реляционных БД. Memcached почти наверняка будет лучше масштабироваться, потому что вы можете распределить его по серверам и получить между ними запрос циклического перебора.

Если вам необходимо выполнить какую-либо фильтрацию данных перед их извлечением, вам следует использовать MySQL. Повышение производительности при передаче нежелательных данных, вероятно, перевесит преимущества более быстрого поиска.

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

1 голос
/ 10 июня 2009

Если это не так много, храните его в своем собственном процессе. Это самый быстрый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...