我有一个不能丢失数据的应用程序,所以Postgresql是我选择的数据库(ACID)
然而,MongoDB的速度和查询优势非常有吸引力,但基于我到目前为止所读到的内容,MongoDB可以报告一个可能没有进入磁盘的成功写入,所以我无法将其作为我的关键任务db(我还需要交易)
我见过对使用mysql和MongoDB的人的引用,一个用于事务,另一个用于查询。请注意,我不是在谈论将一些数据保存在一个数据库中而其余数据保存在另一个数据库中。我想使用Postgresql作为数据输入的网关,使用MongoDB进行读取。
是否有任何资源以这种方式为Postgresql + MongoDB使用提供架构/指南?我记得在Postgresql会议议程中看到这个主题,但我找不到链接。
答案 0 :(得分:8)
我认为使用MongoDB作为缓存不会有太大的速度。它的优势在于复制和水平可扩展性。在一台计算机上,你会让Mongo和Postgres争夺内存,IO带宽和处理器时间。
由于您无法承担松散交易的费用,因此您只能使用Postgres。它具有高效的缓存,复杂的查询规划器,准备好的查询和广泛的索引支持,因为只读查询将非常快 - 在单台计算机上真正可与MongoDB相媲美。
Postgres甚至可以使用异步水平扩展,或者从9.1版开始同步复制。
答案 1 :(得分:2)
实现此目的的一种方法是设置主从复制,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
答案 2 :(得分:1)
我记得在Postgresql会议议程中看到这个话题,但我找不到了 链接。
也许,你在说这个:https://www.postgresqlconference.org/content/hybrid-applications-using-mongodb-and-postgres
答案 3 :(得分:0)
根据事务对您的重要性,一种选择是使用MongoDb驱动程序的安全模式并删除Postgresql。
答案 4 :(得分:0)
你怎么能期望Postgres的事务一致性,但是信任MongoDB的读取?在这种情况下,您如何支持回滚?你怎么知道他们什么时候不同步?
我认为你最好使用memcache并实现更高级别的对象缓存。或者,您可以考虑使用复制从属进行读取。如果您的性能需求超出专用读取从站可提供的性能,请考虑在从属系统上对表进行非规范化。
确保实际需要这些。对于具有PK查找的瘦表,大多数现代数据库引擎(如Postgres或InnoDB)通常会跟上NoSQL解决方案。不要陷入ROFLSCALE陷阱 http://www.youtube.com/watch?v=b2F-DItXtZs
答案 5 :(得分:0)
我认为你可以运行一个mongo副本集..让我们说3 Slave and 1 Master ..然后在你的应用程序中你应该在Postgresql上运行所有写事务然后在Mongo ReplicaSet上运行..之后你可以查询读操作Mongo副本套装.. 但同步将是一个问题,你应该努力..
答案 6 :(得分:-1)
答案 7 :(得分:-1)
在mongodb中,我们可以指定writeConcern属性以指定它应写入日志/实例,然后发送确认/确认,我认为即使mongodb也具有事务概念。不确定为什么我们需要postgres。