Как я могу использовать MongoDB в качестве кеша для Postgresql? - PullRequest
9 голосов
/ 12 октября 2011

У меня есть приложение, которое не может позволить себе потерять данные, поэтому Postgresql - это мой выбор для базы данных (ACID)

Однако преимущества MongoDB по скорости и запросам очень привлекательны, но на основечитайте до сих пор, MongoDB может сообщать об успешной записи, которая, возможно, не поступила на диск, поэтому я не могу сделать ее моей критически важной БД (мне также понадобятся транзакции)

Я видел ссылки на людейиспользуя mysql и MongoDB вместе, один для транзакций, а другой для запросов.Пожалуйста, не говорите, что я не говорю о хранении некоторых данных в одной БД, а остальных - в другой.Я хочу использовать Postgresql в качестве шлюза для ввода данных и MongoDB для чтения.

Существуют ли какие-либо ресурсы, которые предлагают архитектуру / руководство по использованию Postgresql + MongoDB таким образом?Я помню, как видел эту тему в повестке дня конференции Postgresql, но не смог найти ссылку.

Ответы [ 8 ]

8 голосов
/ 02 ноября 2011

Я не думаю, что вы получите большую скорость, используя MongoDB просто как кеш. Сильные стороны - репликация и горизонтальная масштабируемость. На одном компьютере вы бы заставили Mongo и Postgres конкурировать за память, пропускную способность ввода-вывода и время процессора.

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

Postgres теперь может даже масштабироваться горизонтально, используя асинхронную или, начиная с версии 9.1, синхронную репликацию.

2 голосов
/ 02 ноября 2011

Один из способов добиться этого - настроить репликацию master-slave с базой данных PostgreSQL в качестве master и базой данных MongoDB в качестве slave.Затем вы будете выполнять все чтения из MongoDB и все записи в PostgreSQL.

В этом посте обсуждается такая настройка с использованием инструмента под названием Bucardo: http://blog.endpoint.com/2011/06/mongodb-replication-from-postgres-using.html

Вы также можете сделать этос Tungsten Replicator, хотя, похоже, он предназначен для использования с MySQL: http://code.google.com/p/tungsten-replicator/wiki/TRCHeterogeneousReplication

1 голос
/ 27 октября 2011

Я помню, как видел эту тему в повестке дня конференции Postgresql, но не смог найти ссылку.

Возможно, вы говорите об этом: https://www.postgresqlconference.org/content/hybrid-applications-using-mongodb-and-postgres

0 голосов
/ 20 июня 2019

В mongodb мы можем указать свойство writeConcern, чтобы указать, что оно должно записывать в журнал / экземпляры, а затем отправлять подтверждение / подтверждение, и я думаю, что даже mongodb имеет концепцию транзакций. Не уверен, зачем нам нужны postgres.

0 голосов
/ 03 ноября 2011

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

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

Визуальное руководство по системам NoSQL

lucky

0 голосов
/ 03 ноября 2011

Я думаю, вы можете запустить набор реплик mongo. Допустим, скажем 3 Slave и 1 Master .. Затем в вашем приложении вы должны запустить все транзакции записи в Postgresql, а затем в Mongo ReplicaSet. Вы можете запросить операции чтения на множестве реплики Mongo. Но синхронизация будет проблемой, вы должны работать над этим ..

0 голосов
/ 03 ноября 2011

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

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

Убедитесь, что все это действительно необходимо.Для тонких таблиц с поиском по PK большинство современных механизмов баз данных, таких как Postgres или InnoDB, в целом будут идти в ногу с решениями NoSQL.Не попадитесь в ловушку ROFLSCALE http://www.youtube.com/watch?v=b2F-DItXtZs

0 голосов
/ 01 ноября 2011

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

http://www.mongodb.org/display/DOCS/getLastError+Command

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