【问题标题】:Which NoSQL DB is best fitted for OLTP financial systems?哪种 NoSQL DB 最适合 OLTP 金融系统?
【发布时间】:2011-06-02 02:39:09
【问题描述】:

我们正在设计一个 OLTP 财务系统。它应该能够支持每秒 10.000 笔交易并具有报告功能。

所以我们想到了使用:

  • 一个 NoSQL DB 作为我们的主存储
  • 一个 MySQL 数据库(实际上是 Percona 服务器)从 NoSQL 数据库生成一些 ETL 以存储报告数据

我们正在考虑将 MongoDB 和 Riak 用于 NoSQL 作业。我们读到 Riak 比 MongoDB 更平滑地扩展。我们想听听您的意见。

  • 您将使用哪个 NoSQL DB OLTP 财务系统?
  • 最近怎么样 您扩展 MongoDB/Riak 的经验?

【问题讨论】:

    标签: mongodb riak oltp database nosql


    【解决方案1】:

    在任何与金融有关的事情上我都不会使用 NOSQl 数据库。您根本没有所需的数据完整性或内部控制。 Dow Jones 使用 SQL Server 来执行其事务,如果他们能够正确设计一个高性能、高事务的关系数据库,那么您也可以。但是,您将不得不投资于一些知道自己在做什么的人。

    【讨论】:

    • +1 任何寻求使用“最终一致”的财务数据库的人都没有资格实施财务软件,句号。
    • 并非所有 NoSQL 数据库最终都是一致的,并且许多数据库具有必要的完整性和内部控制。最后,并非所有与财务有关的事情都需要绝对的诚信和控制。
    • @elad,如果您这么认为,您显然从未与审计员合作过。我曾在一家审计机构工作,甚至考虑为金融应用程序使用 noSQL 数据库是愚蠢的。
    • 这是定义“财务”的问题。如果我构建自己开发的算法交易应用程序,我就不会关心审计员。这并不意味着它“不经济”......
    • 这个答案和“最终一致”的评论是关于什么的 - 就像相信当你从属于某个法国银行的 ATM 取款时,操作是在单个 db 交易中执行的美国银行服务器。如果您有原子修改并比较和设置,您可以构建您喜欢的任何锁定机制。
    【解决方案2】:

    人们必须以不同的方式思考问题。事务一致性的概念源于 CRUD(创建、读取、更新、删除)中的 UD(更新)。 noSQL DB 是面向 CRAP(创建、复制、追加、处理)的,通过增加时间戳数据来工作。使用正确的域模型,没有理由不能实现可审计性和引用完整性的等价物。

    【讨论】:

    • 当你说废话时,我笑了;现在我觉得自己像个白痴。很好的解释,谢谢!。
    【解决方案3】:

    基于全球存储的 NoSQL 数据库 - 来自 InterSystems 的 Cache 和来自 FIS 的 GT.M - 广泛用于金融服务并且已经使用了很多年。缓存尤其用于核心数据库和 OLTP。

    【讨论】:

      【解决方案4】:

      我可以回答关于我扩展 Riak 的经验。

      Riak 平滑扩展至极致。扩展就像向集群添加节点一样简单,这本身就是一个非常简单的操作。您可以通过简单地添加节点来实现近乎线性的可扩展性。就扩展性而言,我们使用 Riak 的经验令人惊叹。

      另一方面是它在许多方面都缺乏。一些例子:

      • 您不能在生产集群上执行count(*)list keys 之类的操作。如果您想从 Riak 到 MySQL 进行 ETL,这将需要解决 - 或者您如何知道 (E)xtract 什么? (一种可能的解决方法是维护一个具有已知键序列的存储桶,该键序列映射到包含您插入其他存储桶的键的值。
      • Riak 的免费版本没有让您知道发生了什么的管理控制台,企业版中包含的管理控制台并没有太大的改进。
      • 您需要企业版以通过 WAN 复制数据(例如,用于 DR/高可用性)。如果您不介意付费也没关系,但请记住,芭蕉的定价非常高。

      【讨论】:

      • 感谢 Elad 与 Riak 分享您的经验。我在想,不可能使用 mapReduce 来做“计数”和“列表键”之类的事情? +1
      【解决方案5】:

      我与 Starcounter 合作(所以我有偏见),但我认为我可以肯定地说,对于处理金融交易的系统,您必须担心交易的一致性。不幸的是,这就是 Facebook 和 Twitter 所使用的引擎不得不放弃的东西,允许他们的横向扩展策略提供性能。这并不是因为 MongoDb 或 Cassandra 等引擎设计不佳;相反,它自然地遵循 CAP 定理 (http://en.wikipedia.org/wiki/CAP_theorem)。简而言之,如果您在数据库中所做的更改及时发生,它们将覆盖其他更改。状态更新和新推文还可以,但如果您处理金钱或其他数量,那将是灾难性的。当并行进行许多读取和写入时,这些数量最终会出错。因此,对于您需要的吞吐量,支持 ACID 的以内存为中心的 NoSQL 数据库可能是可行的方法。

      【讨论】:

      • 有哪些“带有 ACID 的以内存为中心的 NoSQL 数据库”的例子?
      • @GiscardBiamby - 我相信 VoltDB (voltdb.com) 将是使用 ACID 的以内存为中心的 NewSQL 数据库的一个很好的例子。
      【解决方案6】:

      如果您使用来自 DDD 的事件溯源和概念来实现您的应用程序,您可以使用一些 NoSQL 数据库(Cassandra、EventStore)作为金融服务的存储。我推荐你阅读这本迷你书http://www.oreilly.com/programming/free/reactive-microservices-architecture.html

      【讨论】:

        【解决方案7】:

        可以使用 NoSQL 和自定义实现来实现 OLTP,

        有两件事, 1. 你将如何实现 RDBMS 提供的 ACID 属性。 2.提供自定义的阻塞或非阻塞并发和事务处理机制。

        为了让您更接近解决方案, Apache Phoenix、apache trafodion 或 Splice 机器。

        【讨论】:

          【解决方案8】:

          Trafodion 对 HBase 有完整的 ACID 支持,你应该看看。

          【讨论】:

            【解决方案9】:

            Cassandra 可用于 OLTP 和 OLAP。良好的复制和最终的数据一致性使您可以选择。需要正确设计系统。毕竟它是免费的,但不是免费的,请尝试一下

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2017-05-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-03-30
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多