我们有一个可以处理无模式财务数据的应用程序。更准确地说,shemaless 数据是关于订单的信息,其中的字段由商家自定义。一致性和持久性很重要。
由于我们的数据报告的动态性是非常困难的。每条记录可能略有不同,也可能完全不同。如果我们继续使用关系数据库,看来我们唯一的选择是将“文档”序列化为 blob。报告必须单独完成,可能通过将数据复制到由用户定义的报告定义的公共结构中(每个“报告”都有一个自定义表)。
另一种选择是面向文档的 NoSQL 数据库,例如 MongoDB。在做了一些研究之后,似乎大多数人不会相信 NoSQL 数据库的财务数据,因为它依赖于BASE而不是ACID。
我似乎发现自己处于两个完全不同的用例中间。我的数据非常适合面向文档的数据库 (MongoDB),但我需要 ACID 数据库的可靠性。同时,复杂的用户定义报告也是必要的。
所以我似乎有三个选择:
- 使用两个 MySQL 数据库:一个用于存储数据(blob),另一个用于用户定义报告(大量表)。
- 使用 MongoDB,它支持大型数据库,但具有全局写锁,并且“最终一致”。
- 使用 MySQL 存储数据(blob),然后将其复制到 MongoDB 进行报告。鉴于唯一的索引可能是 MercerID,它的效果如何?
那么这三个中的哪一个是我最好的选择(最大的灵活性和耐用性)?是否有其他选项我没有考虑过,因为我知道我无法更改数据的动态程度?有人在生产中使用 MongoDB 进行报告吗?
(对于我们的 RDMS,我们使用 MySQL。考虑切换到 MariaDB。选择的编程语言是 PHP。考虑使用 Sphinx 进行全文搜索,例如搜索某人的姓名。)