将事务存储到NoSQL数据库中

时间:2015-09-23 12:23:53

标签: sql database transactions nosql

我们正在计划下一个项目并考虑将事务存储到NoSQL数据库中。基本上它是一个应用程序,用户可以收集一些点(如回报),然后用点数支付。

主要思想是将事务本身存储到noSQL数据库中,而mysql服务器只存储当前余额。

所以我的问题是这是一个处理它的好方法,还是我应该使用mysql数据库?

我考虑使用noSQL的原因是,我们假设在很短的时间内会有很多查询。

1 个答案:

答案 0 :(得分:1)

使用多语言持久性会增加操作负担,因此如果可以使用一个数据存储来解决任务,那么最好不要引入其他实体。

在您的情况下,您似乎希望拥有可审核的交易记录,一致的当前余额,并且您不想放弃交易保证。确实,几乎所有现代NoSQL解决方案都不支持开箱即用的ACID事务,但大多数都支持允许您在应用程序级别实现事务的原语。

如果数据存储支持每个键的线性化和比较和设置(文档级原子性),那么它足以实现客户端事务,您可以选择多个选项:

  1. 如果您需要Serializable隔离级别,那么您可以使用Google用于Percolator系统或Cockroach Labs CockroachDB的相同算法。我已经在博客上发表了关于它并创建了step-by-step visualization,我希望它能帮助您理解算法背后的主要思想。

  2. 如果您希望获得较高的争用但是您可以获得Read Committed隔离级别,那么请查看Peter Bailis的RAMP transactions

  3. 第三种方法是使用补偿交易,也称为传奇模式。它在80年代晚期的Sagas论文中有所描述,但随着分布式系统的发展变得越来越实际。请参阅Applying the Saga Pattern对话获取灵感。

相关问题