【发布时间】:2012-01-05 01:38:24
【问题描述】:
我们有一个可以处理无模式财务数据的应用程序。更准确地说,shemaless 数据是关于订单的信息,其中的字段由商家自定义。一致性和持久性很重要。
由于我们的数据报告非常动态,因此非常困难。每条记录可能略有不同,也可能完全不同。如果我们继续使用关系数据库,看来我们唯一的选择是将“文档”序列化为 blob。报告必须单独完成,可能通过将数据复制到由用户定义的报告定义的公共结构中(每个“报告”都有一个自定义表格)。
另一种选择是面向文档的 NoSQL 数据库,例如 MongoDB。在进行了一些研究之后,似乎大多数人不会信任 NoSQL 数据库的财务数据,因为它依赖于 BASE 而不是 ACID。
我似乎发现自己处于两个完全不同的用例中间。我的数据非常适合面向文档的数据库 (MongoDB),但我需要 ACID 数据库的可靠性。同时,复杂的用户定义报告也是必不可少的。
所以我似乎有三个选择:
- 使用两个 MySQL 数据库:一个用于存储数据 (blob),另一个用于用户定义报告(大量表)。
- 使用 MongoDB,它支持大型数据库,但具有全局写锁,并且“最终一致”。
- 使用 MySQL 存储数据 (blob),然后将其复制到 MongoDB 以进行报告。鉴于唯一的索引可能是 MercerID,它的效果如何?
那么,这三个中的哪一个是我最好的选择(灵活性和耐用性最高)?是否有其他选项我没有考虑过,因为我知道我无法更改数据的动态程度?有人在生产中使用 MongoDB 进行报告吗?
(对于我们的 RDMS,我们使用 MySQL。考虑切换到 MariaDB。选择的编程语言是 PHP。考虑使用 Sphinx 进行全文搜索,例如搜索某人的姓名。)
【问题讨论】:
-
您是否排除了关系数据库中的实体-属性-值样式方法? en.wikipedia.org/wiki/…
-
我很确定我们已经这样做了。我们平均每条记录有 20 行(有时几百行)。考虑到联接的数量,报告甚至更加困难。每个字段的数据范围可以从数字到文本块或包含多个键的对象。此表上的 SUM 非常费力。编辑也变得更加复杂。如果我们必须在外部进行报告,那么在这种情况下,序列化可能会更有效。
标签: mysql mongodb financial mariadb schemaless