【问题标题】:Event Sourcing and Retroactive Events事件溯源和追溯事件
【发布时间】:2012-05-15 10:47:08
【问题描述】:

我需要将追溯事件合并到我的事件流中,但我不确定实现它的最佳方式。

我们需要保持原始事件流不变,以便审计和所有其他标准优势。事件流本质上也是暂时的,使我们能够查看历史上任何一点的值。即 x 的值在 6 月 1 日下午 5 点为 10.00。有时我们会在 6 月 5 日发现 x 的值实际上是 6 月 1 日下午 5 点的 12.00。在这种情况下,我们将 10.00 称为“as-at”值,将“12.00”称为 as-of 值,并在事件流中跟踪这两者。

为 as-at 值重建状态是直接查询 6 月 1 日下午 5 点之前的最新快照以及 6 月 1 日之前的所有事件。

我犹豫的地方是重建现状。如果对模型进行了 as-of 更正,那么默认情况下应该使用它而不是 as-at,但是我看不到任何方法来确定是否存在 is as-of在不读取从时间点到现在的整个事件流的情况下进行更正(这可能很大),并且大多数更改都无关紧要,因为它们将与未来的更改相关,而不是相关的时间点。

我应该在这里看看不同的方法吗?

谢谢, 克里斯

【问题讨论】:

    标签: cqrs event-sourcing


    【解决方案1】:

    我认为您指的是bitemporal 数据模型。也就是说,您不仅可以回答“谁赢得了 2000 年美国总统大选”,还可以回答“我们认为谁赢得了 2000 年选举日晚上的美国总统大选”。

    一般来说,您的事件流不一定是为了有效地回答您的所有查询和双时态查询而构建的。它只是你所学事实的历史。如果您今天了解到去年的事实,它仍然属于您的事件流的结束,但标有相关日期。

    查询此数据的最佳方式取决于您要回答的问题类型。有几个nice papers 介绍了如何构建时态和双时态数据库模式,这些模式将由从事件流馈送的投影仪填充。

    【讨论】:

    • 是的,双时态数据模型是问题的核心;我希望避免构建一个 sql 双时态模型。 (以前做过。)我目前正在考虑为 as-of 状态创建一个 SQL 投影,因为这将是主要的查询,并直接从事件流中读取 as-at。我担心的另一个问题是部分或完全逆转追溯事件的格式。根据上周 Greg Youngs 的课程,为了清楚地了解事件流,我将进行完全逆转。 (这也将简化对 as-of 投影的更新。)谢谢 Chris
    • 如果银行错误地向您的账户添加了 20 美元而不是 15 美元,有两种方法可以撤销交易。 1) 部分反转将记录 -5 美元的修正。 2) 完全反转将记录 -20 美元的反转和 15 美元的更正交易。大多数银行/金融系统专门使用完全冲销来保存审计日志。 (在部分冲销中,仅隐含正确的交易,而完全冲销包括正确的交易。)
    • 这是有道理的。因此,您将从实时事件流构建一个简单的读取模型,然后从众所周知的快照点查询事件流以执行 as-at 查询?
    • 还是全反转事件+修正事件应该有双日期:今天说去年应该做xxx。
    猜你喜欢
    • 2020-05-27
    • 2019-01-31
    • 2021-07-25
    • 1970-01-01
    • 2017-04-06
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    相关资源
    最近更新 更多