【发布时间】:2020-09-08 14:10:12
【问题描述】:
关于提问here:
假设我们有 ProductCreated 和 ProductRenamed 事件,它们都包含产品的标题。现在我们要查询 EventStoreDB 以获取具有给定标题的 ProductCreated 和 ProductRenamed 类型的所有事件。我希望所有这些事件都检查是否有任何事件系统中已创建或重命名为给定标题的产品,以便我可以抛出域中重复标题的异常
我正在使用 MongoDB 从所有已发布的事件中创建 UI 报告,并且那里一切正常。但是为了检查一些不变量,例如检查唯一值,我必须查询事件存储中的某些事件及其标准和通过迭代它们,确定是否存在未重命名的具有相同标题的产品或具有相同标题的重命名产品。
对于此类查询,事件存储提供的唯一方法是使用适当的 java 脚本代码创建一次性投影,该脚本代码过滤并将所需事件发送到新流。然后我所要做的就是从中获取事件由投影填充的新生成的流
不奇怪的是,投影非常适合订阅和生成新流,但它们对于进行实时查询似乎很奇怪。在我使用 HTTP api 创建投影后,我立即检查新生成的流查询结果,但似乎工作人员没有机会详细说明结果,我得到 404 响应。但是在等待了几秒钟后,新的流弹出并充满了结果。
这种方法有太多问题:
首先,如果事件存储中充满了跨多个流的数百万个事件,它将无法立即处理和过滤所有事件到结果流。它不会立即创建流,更不用说population.so 我必须等待一段时间并检查结果,希望投影完成
其次,我必须多次获取并发出多个 GET HTTP 命令,这似乎很慢。新的 JVM 客户端还没有准备好。
第三,我必须在处理完结果后删除结果流,否则会留下数百万个孤立查询结果流的事件存储
我希望我可以将 java 脚本传递给一些 api 并像查询 MongoDB 一样逐页获取结果,而不必担心投影、新流和时间问题。
我在管理 UI 中看到了一个查询部分,但我不知道它是做什么用的,不幸的是,文档并没有多大帮助
我期望事件存储做一些不可能的事情吗? 我是否必须创建有界上下文内部读取模型来进行此类检查?
我正在使用我的事件来对聚合进行脱水,并愿意将相同的事件用于此类简单查询,而无需获取其他技术
【问题讨论】:
标签: eventstoredb