MongoDB с redis

Может ли кто-нибудь привести примеры использования случаев, когда вам будет полезно использовать Redis и MongoDB в сочетании друг с другом?

Ответ 1

Redis и MongoDB могут использоваться вместе с хорошими результатами. Компания, известная под управлением MongoDB и Redis (наряду с MySQL и Sphinx), является Craiglist. См. эту презентацию от Джереми Заводного.

MongoDB интересен для постоянных, ориентированных на документы, данных, индексированных по-разному. Redis более интересен для летучих данных или чувствительных к задержкам полупостоянных данных.

Вот несколько примеров конкретного использования Redis поверх MongoDB.

  • Pre-2.2 MongoDB еще не имеет механизма истечения срока действия. Capped коллекции не могут быть использованы для реализации реального TTL. Redis имеет механизм истечения на основе TTL, что делает его удобным для хранения летучих данных. Например, пользовательские сессии обычно хранятся в Redis, тогда как пользовательские данные будут храниться и индексироваться в MongoDB. Обратите внимание, что MongoDB 2.2 внедрил механизм с низкой точностью для истечения срока действия на уровне сбора (например, для очистки данных).

  • Redis предоставляет удобный тип набора данных и связанные с ним операции (объединение, пересечение, разность на нескольких наборах и т.д.). На этой функции довольно просто реализовать базовый факсированный механизм поиска или тегирования, что является интересным дополнением к традиционным возможностям индексирования MongoDB.

  • Redis поддерживает эффективную блокировку поп-операций в списках. Это может быть использовано для реализации распределенной системы массового обслуживания ad-hoc. Он более гибкий, чем MongoDB tailable cursors IMO, поскольку бэкэнд-приложение может прослушивать несколько очередей с тайм-аутом, передавать элементы в другую очередь атомарно и т.д. Если приложение требует некоторой очереди, имеет смысл хранить очередь в Redis, и сохраняйте постоянные функциональные данные в MongoDB.

  • Redis также предлагает механизм pub/sub. В распределенном приложении может оказаться полезной система распространения событий. Это снова отличный пример использования Redis, в то время как постоянные данные хранятся в MongoDB.

Поскольку дизайн модели данных с MongoDB намного проще, чем с Redis (Redis более низкоуровневый), интересно воспользоваться гибкостью MongoDB для основных постоянных данных и дополнительными функциями, предоставляемыми Redis (низкая латентность, истечение срока действия, очереди, паб/суб, атомные блоки и т.д.). Это действительно хорошая комбинация.

Обратите внимание: вы никогда не должны запускать сервер Redis и MongoDB на том же компьютере. Память MongoDB предназначена для замены, Redis - нет. Если MongoDB запускает некоторую переменную активность, производительность Redis будет катастрофической. Они должны быть изолированы на разных узлах.

Ответ 2

Очевидно, есть гораздо больше различий, чем это, но для чрезвычайно высокого обзора:

В случае использования:

  • Redis часто используется в качестве слоя кэширования или общей доски для распределенных вычислений.
  • MongoDB часто используется в качестве замены для традиционных баз данных SQL.

Технически:

  • Redis - это встроенная память db с постоянством диска (весь db должен быть помещен в ОЗУ).
  • MongoDB - это резервная копия на диске, для которой требуется только достаточное количество ОЗУ для индексов.

Существует некоторое перекрытие, но очень часто используется оба. Вот почему:

  • MongoDB может хранить больше данных дешевле.
  • Redis работает быстрее для всего набора данных.
  • Культура MongoDB "хранит все, позже выясняет шаблоны доступа"
  • Культура Redis "тщательно рассмотрит, как вы будете обращаться к данным, а затем сохраните"
  • Оба имеют инструменты с открытым исходным кодом, которые зависят от них, многие из которых используются вместе.

Redis может использоваться как замена традиционного хранилища данных, но чаще всего используется с другим обычным "длинным" хранилищем данных, таким как Mongo, Postgresql, MySQL и т.д.