哪个NoSQL DB最适合OLTP金融系统?

时间:2011-06-02 02:39:09

标签: mongodb riak oltp database nosql

我们正在设计一个OLTP金融系统。它应该能够支持每秒10,000次交易并具有报告功能。

所以我们想到了使用:

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

我们正在考虑将MongoDB和Riak用于NoSQL工作。我们已经读过Riak比MongoDB更加平滑。我们想听听您的意见。

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

9 个答案:

答案 0 :(得分:17)

我无法想象使用NOSQl数据库与金融有关的任何情况。您根本没有所需的数据完整性或内部控制。道琼斯使用SQL Server来执行其事务,如果他们能够正确设计高性能,高事务的Relational数据库,那么您也可以。你将不得不投资一些知道自己在做什么的人。

答案 1 :(得分:7)

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

答案 2 :(得分:6)

基于全球存储的NoSQL数据库 - 来自InterSystems的缓存和来自FIS的GT.M - 在金融服务中广泛使用并且已经存在多年。特别是缓存用于核心数据库和OLTP。

答案 3 :(得分:4)

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

Riak顺利扩展到极致。扩展就像向集群添加节点一样简单,这本身就是一个非常简单的操作。只需添加节点即可实现接近线性的可扩展性。就缩放而言,我们与Riak的经验令人惊叹。

另一方面,它在很多方面都缺乏。一些例子:

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

答案 4 :(得分:1)

我与Starcounter合作(所以我有偏见),但我想我可以肯定地说,对于处理金融交易的系统,你必须担心交易的一致性。不幸的是,这就是用于Facebook和Twitter的引擎不得不放弃允许其横向扩展策略来提供性能。这不是因为像MongoDb或Cassandra这样的引擎设计不佳;相反,它自然地来自CAP定理(http://en.wikipedia.org/wiki/CAP_theorem)。简而言之,您在数据库中所做的更改将覆盖其他更改(如果它们及时发生)。好的状态更新和新推文,但如果您处理金钱或其他数量,将是灾难性的。当并行完成许多读写操作时,金额将简单地结束。因此,对于您需要的吞吐量,具有ACID支持的以内存为中心的NoSQL数据库可能是最佳选择。

答案 5 :(得分:1)

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

答案 6 :(得分:1)

使用NoSQL和自定义实现

可以实现OLTP

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

让您更接近解决方案, Apache Phoenix,apache trafodion或Splice machine。

答案 7 :(得分:0)

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

答案 8 :(得分:-4)

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