我们正在设计一个OLTP金融系统。它应该能够支持每秒10,000次交易并具有报告功能。
所以我们想到了使用:
我们正在考虑将MongoDB和Riak用于NoSQL工作。我们已经读过Riak比MongoDB更加平滑。我们想听听您的意见。
答案 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)提取什么?
(一种可能的解决方法是维护一个具有已知键序列的存储桶,该存储键映射到包含您插入其他存储桶的键的值)。答案 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。良好的复制和最终的数据一致性使您可以自己选择。需要正确设计系统。毕竟它是免费的,但不是免费的开发人员,试一试