

NOSQL存储的基于事件的事务实现
source link: https://www.jdon.com/42437
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

NOSQL存储的基于事件的事务实现
NoSQL认为两段事务2PC容易导致每个参与者锁定一段时间,不能实现数据分区(CAP定理),但是关系数据库能够实现我们需要的原子级别事务更新。这在许多应用中是必须的。
那么在这种需要高一致性原子事务情况下一定要使用关系数据库呢?甚至有人提出关系数据库为主,NoSQL为辅助的所谓通用方案。这篇文章就提出了基于事件的NOSQL事务解决方案。
NOSQL中忽视原子事务的一个自然解决方案是:如果在分区更新失败情况下,就让数据不一致呗,如果将吞吐量因素高于一切,甚至高于数据本身的话,这是一种可接受方案。
如果非得需要事务情况下,怎么办呢,文章认为其实在4年前的Adam Heroku一篇博客已经给出答案:http://adam.heroku.com/past/2007/12/17/a_world_without_sql/
银行账户之间转帐的老式做法是使用数据库事务,这种做法比较刚性(公牛),正确做法是将转帐事件存储起来(banq注:EDA事件驱动架构,把事件当数据,Hold住事件本身,而不是事件的结果数据),如果你是一个面向函数范式的思维者,这本身没有什么奇怪的。
对于NoSQL,解决方式是使用两种不同的数据空间,一个用来写数据,一个用来读书节,还有一个Job异步地从第一个数据空间拉数据,将其传送复制到第二个空间,两个空间有不同的数据模型,读写分离架构CQRS。如下图:
写数据空间这边主要保存的是写操作事件,比如ProfileUpdateEvent,如下图:
异步的传送Job再将这些写事件获得,运行这些写事件(事件触发函数),向读数据空间里写入更新的数据。如下图:
非常重要的是,要保证读领域的更新操作是幂等的(见蒯因与引用透明),还有事件必须充分有效地保存到DB中,事件本身必须是自我独立的。
[该贴被banq于2011-08-31 13:23修改过]
Recommend
-
14
索引的概念 数据库中的索引与书籍中的目录类似 在一本书中,无须阅读整本书,利用目录就可以快速查找所需信息 书中的目录是一个词语列表,其中注明了包含各个词的页码 数据库索引 在数据...
-
7
noisepage paper分享:基于column-storage实现的事务存储引擎路云飞分布式/数据库/检索...
-
9
文章时效性提示这是一篇发布于 352 天前的文章,部分信息可能已发生改变,请注意甄别。 基于Raft协议的NoSQL数据库的设计和实现1. 论文简介近些年来,随着大数据业务和巨型Web网站的增多,如何存储和管...
-
5
文章时效性提示这是一篇发布于 331 天前的文章,部分信息可能已发生改变,请注意甄别。 基于Raft协议的NoSQL数据库的设计和实现-API1. 设计展示DistKV自己设计并实现了自己的好用的命令行语言,Demo如...
-
2
文章时效性提示这是一篇发布于 346 天前的文章,部分信息可能已发生改变,请注意甄别。 基于Raft协议的NoSQL数据库的设计和实现-Raft1. Raft的历史所有共识算法都是由一个基本的问题出发的,就是拜占...
-
6
文章时效性提示这是一篇发布于 342 天前的文章,部分信息可能已发生改变,请注意甄别。 基于Raft协议的NoSQL数据库的设计和实现-MetaServer前面我们提到,Meta Server 主要有这几个功能: 管理监控...
-
6
文章时效性提示这是一篇发布于 342 天前的文章,部分信息可能已发生改变,请注意甄别。 基于Raft协议的NoSQL数据库的设计和实现-DRPC在分布式领域,必不可少的就是关于远程通信,我们通常把这部分组件抽离出来,...
-
4
文章时效性提示这是一篇发布于 348 天前的文章,部分信息可能已发生改变,请注意甄别。 基于Raft协议的NoSQL数据库的设计和实现-ArchitectureDistKV有着独特的架构,这使得它在一致性方面的能力尤其出色。如图一...
-
5
文章时效性提示这是一篇发布于 354 天前的文章,部分信息可能已发生改变,请注意甄别。 基于Raft协议的NoSQL数据库的设计和实现-History1. 分布式存储系统传统的集中式存储,主要采用存储区域网络(Sto...
-
5
什么是状态机 状态机作为一种程序开发范例,在实际的应用开发中有很多的应用场景,其中.NET 中的async/await 的核心底层实现就是基于状态机机制。状态机分为两种:有限状态机和无限状态机,本文介绍的就是有限状态机,有限状态机在任何时...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK