2011-04-22 50 views

回答

2

堆栈溢出是问题的最佳场所,因为每个人都可以从答案中受益。

快照通常应该采取“带外” - 即超出处理的主线。换句话说,当一系列事件发生时,你不想在这一点上拍摄快照。相反,你会想让另一个线程或进程异步获取快照。我建议使用另一个线程而不是完全独立的进程,因为您不必担心确保程序集(域,消息等)与主处理线程相同。

“如何”拍摄快照的代码由最终用户决定。我很可能会在接下来的一周内提供一些额外的指导,了解拍摄快照的确切步骤。

一个额外的考虑是,你真的需要快照吗?你有多少流量超过1000个事件?如果没有,那么你几乎肯定不需要快照的复杂性。

+0

很明显,在主处理之外拍摄快照并且在不需要时不包括它的复杂性(正如您的优秀文档中所述)。但我有关于整个API的问题:有一种方法GetStreamsToSnapshot,但我如何访问配置的IPersistStreams?我怎样才能从它的返回值IEnumerable 获取聚合的类型,用于加载具有EventStoreRepository的聚合以获取其快照?你会在哪里提供指导,你的博客? – andy 2011-04-23 19:00:07

+0

用于保存快照的API需要我将在明天处理的少量工作。要加载快照,OptimisticEventStore有一个单独的方法:GetSnapshot会返回快照(如果找到)。从那里,只需调用GetFrom()并传入快照即可。快照可以保存在内存中,因此不需要每次都加载。事实上,在超低延迟的系统中,您将需要内存中的大部分内容,因此您只能写入事件存储。 – 2011-04-26 00:56:37

+0

最近的提交暴露了IStoreEvents接口上的GetStreamsToSnapshot,它的主要实现,OptimisticEventStore:https://github.com/joliver/EventStore/commit/2ac284ad99f1408e5665dfcf654e575c19932794 – 2011-04-27 03:02:47