事件溯源和追溯事件

3
我需要在我的事件流中加入追溯事件,但我不确定最好的实现方式。
我们需要保持原始事件流不变,以便进行审计和所有其他标准优点。事件流也是时间性的,使我们能够查看任何历史时刻的值。例如:x的值在6月1日下午5点为10.00。偶尔我们会发现,在6月5日,x的值实际上是在6月1日下午5点时为12.00。在这种情况下,我们将10.00称为“as-at”值,“12.00”称为“as-of”值,并在事件流中跟踪这两个值。
重建“as-at”状态很简单,只需从5月1日下午5点之前的最新快照查询,并查询到6月1日所有的事件。
我犹豫的地方在于重建“as-of”状态。如果对模型有一个“as-of”纠正,那么默认情况下应该使用它,而不是“as-at”,但我无法确定是否有“as-of”纠正,除非阅读自特定时点起至今的整个事件流(这可能很大),而大多数更改都与未来更改相关,而不是问题所在的时点。
这里应该采取不同的方法吗?
谢谢, Chris
1个回答

8
我认为你所指的是bitemporal数据模型。也就是说,你不仅可以回答“谁赢得了2000年美国总统选举”,还可以回答“我们在2000年选举日晚上认为谁赢得了美国总统选举”。
总的来说,你的事件流并不一定建立在高效地回答所有查询和双时态查询上。它只是你所学到的事实的历史记录。如果你今天了解去年的一个事实,它仍然属于你的事件流的末尾,但标有相关日期。
查询这些数据的最佳方式取决于你想回答的问题类型。有几篇很好的论文介绍如何构建时间和双时态数据库模式,这些模式将由从你的事件流中提取信息的投影仪填充。

1
是的,双时间数据模型是问题的核心;我想要避免构建 SQL 双时间模型。(之前已经做过了。)我目前正在考虑为 as-of 状态创建 SQL 投影,因为那将是主要查询,并直接从事件流中读取 as-at。我担心的另一个问题是关于追溯事件格式的部分或完全反转。根据 Greg Young 上周的课程,我将选择完全反转以便在事件流中更加清晰。(这也将简化对 as-of 投影的更新。)谢谢 Chris。 - CCondron
3
如果银行错误地将20美元添加到您的账户中而不是15美元,有两种方法可以撤销这笔交易。1)部分撤销是记录一次-5美元的更正。2)完全撤销是同时记录一笔-20美元的撤销和一笔15美元的更正交易。大多数银行/金融系统都专门使用完全撤销以保留审计日志。(在部分撤销中,正确的交易只是被暗示着,而完全撤销则包括正确的交易。) - CCondron
这很有道理。所以您将从事件流实时构建一个简单的读取模型,但然后从众所周知的快照点查询事件流以进行类似于“as-at”查询? - Sebastian Good
仍然需要全面逆转事件+修正事件应该有一个双日期:今天我说去年我本应该做xxx。 - Xavi Montero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接