CRUD是增删改查的简称,其中增删改都属于一种变动操作,而新增和删改分别属于两种不同类型的变动,如果以记账来类比,新增等同于多了一笔金额,而删改等同于减少了一笔金额。
CRUD是增删改查的简称,其中增删改都属于一种变动操作,而新增和删改分别属于两种不同类型的变动,如果以记账来类比,新增等同于多了一笔金额,而删改等同于减少了一笔金额。
下面以文档的增删改查从记账角度看看如何理解。
文档 | 记账 |
---|---|
新增文档 | +100 |
修改文档 | -50 |
删除文档 | -50 |
文档的当前状态就是这些变动动作的累计,新增文档以后修改了这篇文档,最后又删除了这个文档,那么这个文档当前状态是没有了。而记账如果假设期初余额为零,存入了一笔100元,后来取出50,当再取出50时,这个账户当前余额就是0了。
事件溯源EventSourcing与CRUD的区别就在于:
ES中记录的是这三个变动,将这三个变动作为事件记录保存下来;而CRUD则是将这三个动作通过服务的增删改查方法调用SQL的insert/update/delete语句实现。
CRUD实现方式:
文档 | 记账 | SQL实现 |
---|---|---|
新增文档 | +100 | insert/update |
修改文档 | -50 | update |
删除文档 | -50 | delete/update |
事件溯源EventSourcing实现方式:
文档 | 记账 | SQL实现 |
---|---|---|
新增文档 | +100 | Event1 |
修改文档 | -50 | Event2 |
删除文档 | -50 | Event3 |
ES实际记录的是包含Event1 Event2 Event3的集合,当需要获得当前状态时,通过播放这些事件获得,比如账户当前余额是:100 -50 -50=0,文档当前状态通过遍历事件集合:apply(event1) –> apply(event2) —>apply(event3) 计算以后的结果。
区块链实际是将ES的这些事件集合复制到每个机器上,同时将这些事件严格通过事件编号链接起来,事件之间就无法随意插入其他事件,保证事件链在分散式环境中的完整。
区块链就是把Event1 <— Event2 <— Event3事件通过编号串联起来,每台机器上不但有一个完整的事件集合,而且这些事件通过编号串联起来如同一个链条,当有新的事件进来,首先找出事件链中最后的事件编号,然后靠算力算出新的事件编号:
Event1编号Hash <— Event2编号Hash —>Event3编号Hash
区块链其实是一种分布式的事件溯源ES。
总之,基于事件驱动的事件溯源ES是一种与传统CRUD完全不同的编程范式,更是一种新的区块链编程范式。通过这种事件驱动编程方式不但可以解决传统分布式事务的难题,而且可以提升了系统的扩展性和弹性。传统的CRUD方式虽然简单易用,但是非常依赖关系数据库技术,相信随着区块链技术的发展,传统CRUD编程将慢慢会淘汰,变成培训课堂上的练习入门技术。,CRUD是增删改查的简称,其中增删改都属于一种变动操作,而新增和删改分别属于两种不同类型的变动,如果以记账来类比,新增等同于多了一笔金额,而删改等同于减少了一笔金额。
下面以文档的增删改查从记账角度看看如何理解。
文档 | 记账 |
---|---|
新增文档 | +100 |
修改文档 | -50 |
删除文档 | -50 |
文档的当前状态就是这些变动动作的累计,新增文档以后修改了这篇文档,最后又删除了这个文档,那么这个文档当前状态是没有了。而记账如果假设期初余额为零,存入了一笔100元,后来取出50,当再取出50时,这个账户当前余额就是0了。
事件溯源EventSourcing与CRUD的区别就在于:
ES中记录的是这三个变动,将这三个变动作为事件记录保存下来;而CRUD则是将这三个动作通过服务的增删改查方法调用SQL的insert/update/delete语句实现。
CRUD实现方式:
文档 | 记账 | SQL实现 |
---|---|---|
新增文档 | +100 | insert/update |
修改文档 | -50 | update |
删除文档 | -50 | delete/update |
事件溯源EventSourcing实现方式:
文档 | 记账 | SQL实现 |
---|---|---|
新增文档 | +100 | Event1 |
修改文档 | -50 | Event2 |
删除文档 | -50 | Event3 |
ES实际记录的是包含Event1 Event2 Event3的集合,当需要获得当前状态时,通过播放这些事件获得,比如账户当前余额是:100 -50 -50=0,文档当前状态通过遍历事件集合:apply(event1) –> apply(event2) —>apply(event3) 计算以后的结果。
区块链实际是将ES的这些事件集合复制到每个机器上,同时将这些事件严格通过事件编号链接起来,事件之间就无法随意插入其他事件,保证事件链在分散式环境中的完整。
区块链就是把Event1 <— Event2 <— Event3事件通过编号串联起来,每台机器上不但有一个完整的事件集合,而且这些事件通过编号串联起来如同一个链条,当有新的事件进来,首先找出事件链中最后的事件编号,然后靠算力算出新的事件编号:
Event1编号Hash <— Event2编号Hash —>Event3编号Hash
区块链其实是一种分布式的事件溯源ES。
总之,基于事件驱动的事件溯源ES是一种与传统CRUD完全不同的编程范式,更是一种新的区块链编程范式。通过这种事件驱动编程方式不但可以解决传统分布式事务的难题,而且可以提升了系统的扩展性和弹性。传统的CRUD方式虽然简单易用,但是非常依赖关系数据库技术,相信随着区块链技术的发展,传统CRUD编程将慢慢会淘汰,变成培训课堂上的练习入门技术。