首页 > 解决方案 > 过滤掉重复项,仅在发生更改时生成事件

问题描述

当订单的任何属性发生变化时,我们有一个系统会向我们发送事件。他们有一个完整的订单结构,比如 500 个属性,我们只存储其中的一个子集,比如 50 个属性 + 对我们内部订单数据模型的一些转换。现在,只要源系统上订单的这 500 个属性中的任何一个发生更改,就会向我们触发一个事件(请注意,它们每次都共享完整的订单状态)。大多数时候,我们模型中的 50 个属性没有任何变化,所以对我们来说很多都是重复的事件。目前,我们将从源接收到的所有事件存储在数据库中。

现在的要求是,当我们系统中的订单数据发生变化时,我们必须向其他消费者生成事件。因此,我们必须从源中消除重复项,并且仅在模型上的某些属性发生更改时共享事件。

可能的解决方案: 对于我们从源接收的每个事件,如果“任何”属性发生变化,我们可以将其与我们的内部数据进行比较。我们可以有一个像 REDIS 这样的内存数据库。但是数据库上会有很多 IO。也不确定比较 2 个 json 对象是否完全相同的最佳方法是什么。其他解决方案是,我们可以仅存储一些重要的“元数据”并仅比较该元数据,而不是存储所有属性。对性能有好处,但如果我们必须为任何属性更改生成事件,则不会完全完美。

想知道你将如何设计这个场景。

谢谢。

标签: eventsredisarchitectureduplicatesevent-driven-design

解决方案


推荐阅读