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