.NET的EventStore事件存储数据库

banq 13-09-18
                   

EventStore/EventStore · GitHub是一款面向.NET的Event Store数据库,这是面向CQRS + Event Sourcing架构下用来记录Domain Events的数据库,相关概念见:https://github.com/eventstore/eventstore/wiki/Event-Sourcing-Basics

Event Store 作为一个 functional database,可以进行事件的回放重播,当我们“重播”一个事件流,我们返回的是一系列的事件。一个事件本质上是一个序列化方法调用,通过重新调用这些方法返回当前状态,可以使用如下代码表达:

when([SomePatternMatch], function(state, event) { return new state; });

事件流导致这些函数调用被串联成链,每个函数有一个状态结果,上一个函数处理的状态传导到下一个函数. 换句话说,当前状态是一个先前事实的left fold. 我们可以更远地说这是一个snapshot,快照其实就是left fold备份记忆. 当从这个角度看,Event Store 其实是 functional database.函数数据库。

[该贴被admin于2013-10-11 16:47修改过]

                   

1
BrightSpring
2013-10-09 23:32

函数式编程下,回放肯定不难的,感觉函数式,DDD,并行分布式都会一起普及

[该贴被BrightSpring于2013-10-09 23:32修改过]
[该贴被BrightSpring于2013-10-09 23:36修改过]

daxnet
2013-10-10 17:11

貌似现在DDD的思想还是很难被国内接受并实践

tangxuehua
2013-10-10 18:25

当事件非常多时,一次完整重放的代价是很大的,因为事件的量是非常庞大的。domain in-memory如果挂掉了,然后重启的时候,如果能够自己恢复一部分数据,然后再只要从eventstore取出一部分事件,然后通过重放来恢复整个domain in-memory,这样效率高,服务器恢复时间也短。

而且就算重放的速度很快,几百G,上T的东西要恢复到内存,那也至少得按小时算吧,那难道机器就要等这几个小时才能继续为用户服务?所以,系统的可靠性肯定是要通过replication来解决的。一台挂了,还有另一台顶上来。然后另一台顶上来后,挂了的这台我们才可以慢慢重启,慢慢通过event sourcing恢复数据好了。

我觉得eventstore更大的用处不是用来恢复整个domain,而是在遇到线上问题时,能够根据线上的事件,取出相关的事件,然后在测试环境重放,以找出问题所在,这个价值我觉得更大,呵呵。
[该贴被tangxuehua于2013-10-10 18:29修改过]

aixs
2013-10-23 09:03

2013-10-10 18:25 "@tangxuehua"的内容
我觉得eventstore更大的用处不是用来恢复整个domain,而是在遇到线上问题时,能够根据线上的事件,取出相关的事件,然后在测试环境重放,以找出问题所在,这个价值我觉得更大,呵呵。 ...

我个人并不认同es用来找问题的价值更大。es只是对系统运行的一些客观记录,换句话说就算能找出系统运行到哪一步出现了错误,也不能去擅自修改es中的记录。排错主要采取的是日志等方式

2Go 1 2 下一页