2012-10-23 2 views
1

Я пытаюсь понять, как работает внутренний кэш монго, и если он устраняет использование memcache. Размер нашей базы данных составляет около 200 ГБ, а индекс - в памяти, но после индекса на сервере осталось мало свободной памяти.Использование memcache infront сервера mongodb

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

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

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

+1

Это зависит от вашего размера рабочего набора, если оставшаяся над ним панель хорошо подходит для рабочего набора, тогда дополнительный слой может быть ненужной сложностью. – Sammaye

ответ

1

Прежде всего, хранилище кэш-памяти отличается от базы данных. Таким образом, MongoDB и SQL отличаются по назначению и использованию по сравнению с Memcache.

Memcache действительно хорош в снижении рабочих размеров набора для запросов. Например: представьте себе огромный агрегированный запрос с подзапросами и операторы CASE, а что нет в SQL (подумайте о самом сложном запросе, который вы можете), выполнение этого запроса в реальном времени все время может привести к тому, что компьютер (ы) «трэш» (не чтобы упомянуть проблемы на стороне клиента).

Однако, как всем известно, вам нужно только суммировать этот запрос с другой сборкой/таблицей, чтобы она была мгновенно быстрее. Реальная скорость memcache исходит из того факта, что это хранилище значений ключа памяти. Именно здесь MongoDB может работать с ошибкой, поскольку он не хранится в памяти, он отображается в памяти, но не сохраняется.

MongoDB не имеет собственного кэширования, при условии, что запрос «горячий», а в LRU (здесь находится ваш рабочий набор) вы не должны заметить большую часть разницы во времени ответа. Хороший способ гарантировать, что запрос «горячий» - это запустить его. У некоторых людей есть сценарий их самых больших запросов, которые они запускают, чтобы разогреть кеш.

Как я уже сказал Memcache является кэшем слой вот почему:

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

Заставляет меня умереть немного внутри. Многие из них размывают линию между БД и уровнем кэша.

Смежные вопросы