5

我们有一个可以处理无模式财务数据的应用程序。更准确地说,shemaless 数据是关于订单的信息,其中的字段由商家自定义。一致性和持久性很重要。

由于我们的数据报告的动态性是非常困难的。每条记录可能略有不同,也可能完全不同。如果我们继续使用关系数据库,看来我们唯一的选择是将“文档”序列化为 blob。报告必须单独完成,可能通过将数据复制到由用户定义的报告定义的公共结构中(每个“报告”都有一个自定义表)。

另一种选择是面向文档的 NoSQL 数据库,例如 MongoDB。在做了一些研究之后,似乎大多数人不会相信 NoSQL 数据库的财务数据,因为它依赖于BASE而不是ACID

我似乎发现自己处于两个完全不同的用例中间。我的数据非常适合面向文档的数据库 (MongoDB),但我需要 ACID 数据库的可靠性。同时,复杂的用户定义报告也是必要的。

所以我似乎有三个选择:

  1. 使用两个 MySQL 数据库:一个用于存储数据(blob),另一个用于用户定义报告(大量表)。
  2. 使用 MongoDB,它支持大型数据库,但具有全局写锁,并且“最终一致”。
  3. 使用 MySQL 存储数据(blob),然后将其复制到 MongoDB 进行报告。鉴于唯一的索引可能是 MercerID,它的效果如何?

那么这三个中的哪一个是我最好的选择(最大的灵活性和耐用性)?是否有其他选项我没有考虑过,因为我知道我无法更改数据的动态程度?有人在生产中使用 MongoDB 进行报告吗?

(对于我们的 RDMS,我们使用 MySQL。考虑切换到 MariaDB。选择的编程语言是 PHP。考虑使用 Sphinx 进行全文搜索,例如搜索某人的姓名。)

4

2 回答 2

3

只是几点:

只有从辅助节点读取,MongoDB 才会最终保持一致。否则,它是一致的。

如果您需要多对象 ACID 事务,那么 MongoDB 将无法工作。如果您需要原子性、一致性和持久性,那么如果您启用日志并明智地使用 write-concern,您就可以获得 MongoDB。

于 2011-11-23T20:15:57.553 回答
0

我刚刚看到一些关于 Oracle 新 NoSQL 产品的正面评价,它似乎比其他 NoSQL 产品更关注可靠性。显然它可以作为社区版(开源许可证,但不知道是哪个)和企业版(惊喜......)

http://www.infoworld.com/d/data-explosion/first-look-oracle-nosql-database-179107

它不是面向文档的解决方案,而是键/值对解决方案

请注意,我没有处理过这个,但我想你可能想研究一下:

http://www.oracle.com/us/products/database/nosql/overview/index.html

于 2011-11-23T19:21:41.160 回答