【问题标题】:Schemaless financial data, and NoSQL?无模式财务数据和 NoSQL?
【发布时间】:2012-01-05 01:38:24
【问题描述】:

我们有一个可以处理无模式财务数据的应用程序。更准确地说,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 进行全文搜索,例如搜索某人的姓名。)

【问题讨论】:

  • 您是否排除了关系数据库中的实体-属性-值样式方法? en.wikipedia.org/wiki/…
  • 我很确定我们已经这样做了。我们平均每条记录有 20 行(有时几百行)。考虑到联接的数量,报告甚至更加困难。每个字段的数据范围可以从数字到文本块或包含多个键的对象。此表上的 SUM 非常费力。编辑也变得更加复杂。如果我们必须在外部进行报告,那么在这种情况下,序列化可能会更有效。

标签: mysql mongodb financial mariadb schemaless


【解决方案1】:

只有几点:

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

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

【讨论】:

  • 所以可以说 ACID 很重要。我可以使用 MySQL 将 shemaless 数据存储到一个 blob 中,然后将其复制到 MongoDB 进行报告吗?鉴于唯一的索引是 MerchantID,MongoDB 在报告方面的表现如何?我可以通过在副本集中拥有更多来提高性能吗?分片?我主要关心的是不会丢失数据。
  • 您需要多文档交易吗?还是您只需要不丢失数据?如果是后者,您可以通过启用日志和写入关注从 MongoDB 中获取。你不需要 ACID 就可以了。
  • 不确定您说的是哪种报告。这真的取决于。您是指对数据的基本查询吗?
  • 抱歉回复晚了。真的很忙。我不需要联接,但我需要对集​​合中的某些字段进行求和/过滤。一些案例也分组(分组依据)。
【解决方案2】:

我刚刚看到一些关于 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

【讨论】:

  • 这听起来很有趣。可能会很完美,但不幸的是我们需要一个面向文档的数据存储。我们的某些字段可能包含多条信息(例如:数量、金额),并且必须单独报告每条信息。这就是 MongoDB 看起来如此诱人的原因,因为您可以搜索/过滤子元素。如果 MongoDB 可以用于复杂的报告,也许我们可以将它用作辅助数据存储。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-06
  • 1970-01-01
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
  • 2012-12-04
相关资源
最近更新 更多