我有充分的理由将MongoDB用于我的应用程序的一部分。但人们通常将其描述为不适合“交易”应用程序,例如交易必须精确/一致的银行等。
在Rails中拆分模型是否有意义并且其中一些使用MySql和其他mongo?或者这通常会导致更多的问题而不是它的价值吗?
我不是在构建银行应用程序或其他任何东西,但我认为可能对我的用户的表或事务表(记录收入)在MySql中执行该部分是有意义的。
答案 0 :(得分:24)
这就是我们用CouchDB和PostgreSQL做的事情。
我们所有的用户和群组都在postgresql数据库中 其他任何东西(在我们的例子中,一些带有统计数据的记录)都在couchdb数据库中。
在我们的例子中,它允许我们为每个客户端提供一个couchdb数据库(应用程序将自己连接到一个或另一个,具体取决于用户的主机)。
并且只有一个postgresql数据库中包含所有用户。
所以是的,我认为在同一个应用程序中使用SQL和NOSQL数据库是个好主意。
答案 1 :(得分:5)
没有理由不能在MongoDB中保留用户表。您是否决定在MongoDB中保留事务表是另一个问题。如果需要多对象事务,则必须使用支持事务的关系数据库。如果您不需要这种交易方式,那么使用MongoDB仍然是一个好主意。
请记住,如果您使用MongoDB,我们建议您使用复制进行故障转移。
要记住的一件事是,如果由于一致性保证而使用关系数据库,则仍需要确保配置硬件以利用这些功能。请参阅此处的注意事项:
http://dev.mysql.com/doc/refman/4.1/en/innodb-configuration.html
如果您没有采取这些预防措施,那么MongoDB的持久性与关系数据库的持久性之间没有太大差异。
答案 2 :(得分:4)
还要考虑耐久性:http://blog.mongodb.org/post/381927266/what-about-durability,例如当你失去动力(电力)时。
答案 3 :(得分:3)
虽然我不排除它,但我会对分裂方法保持警惕。
如果你需要MySQL + InnoDB并且听起来像你这样做,我只会介绍MongoDB,最好是更加孤立的部分,这些部分可以从MongoDB带来的好处中获得重要的东西,并且与核心MySQL表的关系最小。
我目前正在努力解决同样的问题,一个带有20个MySQL桌面的Rails应用程序。使用Mongodb可以解决一些数据库设计问题(特别是嵌套的子对象和可索引的数组列),但是很难证明额外的开销:
我正在为我们的日志表推出MongoDB,我将从那里开始。
答案 4 :(得分:2)
我说你在这里已经回答了你自己的问题。
我有充分的理由使用mongodb 对于我的应用程序的一部分。
假设你也有充分的理由在MySQL中保留其他部分,我会说答案是肯定的。你的问题暗示(至少对我而言)你对各种选择及其优点和缺点有一个良好的,充分研究的理解,因此得出了一个合理的结论,即分裂你的模型是可行的。
假设这两个部分没有以某种方式联系起来(两个声音之间的关系就像以后的疼痛一样),我建议你去寻找并使用每个工具来达到最佳状态。
有可能解决迈克尔用这种方法提出的一些担忧。由于您专注于使用Rails,因此可以将ActiveRecord用于基于MySQL的模型,并将MongoMapper用于基于MongoDb的模型。这样,您就不必处理两种完全不同的查询方法,因为MongoMapper提供了非常ActiveRecordish方法。当然,您可以根据需要轻松地进入Mongo特定的查询。
关于跨DB关系的关注在我看来是有效的,如果这是你最终会有很多的东西,我肯定会建议检查情况,以确保这是你很高兴与之生活在一起的东西。我想你可能会在以后的特殊情况下节省很多痛苦。
总的来说,我建议只要你的两个部分彼此相对脱节,分裂个性持久层就能很好地适合你。