gpt4 book ai didi

resolvejs - 大型数据集的性能问题

转载 作者:行者123 更新时间:2023-12-04 15:49:25 26 4
gpt4 key购买 nike

有没有办法通过 aggregateId 过滤与读取模型关联的投影中的事件?

在进行的测试中,我们总是收到所有 已注册的事件。是否可以在前一阶段应用过滤器?

我们有 100,000 个 aggregateId,每个 id 关联了 15,000 个 events。无法按 aggregateId 进行过滤,我们的预测必须遍历所有 事件

最佳答案

所以您有 100,000 个聚合,每个聚合有 15,000 个事件。

您可以使用 ReadModel or ViewModel :

读取模型:

读取模型可以看作是您应用程序的读取数据库。因此,如果您想存储有关每个聚合的一些数据,您应该为每个聚合在某个表中插入/更新行或条目,请参阅 Hacker News example read model code .

重要的是要了解解析读取模型是按需构建的 - 在第一个查询上。如果您有很多事件,可能需要一些时间。

另一件需要考虑的事情 - 新创建的 resolve 应用程序配置为使用内存数据库读取模型,因此在每次应用程序启动时,您都会重新构建它。

如果您有很多事件,并且不想在每次启动应用程序时都等待读取模型构建,则必须为您的读取模型配置一个真实的数据库存储。

配置适配器没有详细记录,we'll fix this .以下是您需要在 mongoDB 的相关配置文件中写入的内容:

readModelAdapters: [
{
name: 'default',
module: 'resolve-readmodel-mongo',
options: {
url: 'mongodb://127.0.0.1:27017/MyDatabaseName',
}
}
]

既然你有一个数据库引擎,你也可以将它用于事件存储:

storageAdapter: {
module: 'resolve-storage-mongo',
options: {
url: 'mongodb://127.0.0.1:27017/MyDatabaseName',
collectionName: 'Events'
}
}

View 模型ViewModel 是在查询期间动态构建的。它不需要存储,但它会读取给定 aggregateId 的所有事件。

reSolve View 模型正在使用快照。因此,如果您有 15.000 个事件用于给定聚合,那么在第一次请求时,所有这些事件都将首次应用于计算 vies 状态。在此之后,该状态将被保存,所有后续请求将读取快照和所有后续事件。默认情况下,每 100 个事件完成一次快照。因此,在第二个查询中,reSolve 会读取该 View 模型的快照,并对其应用不超过 100 个事件。

再次记住,如果你希望快照存储持久化,你应该配置一个快照适配器:

snapshotAdapter: {
module: 'resolve-snapshot-lite',
options: {
pathToFile: 'path/to/file',
bucketSize: 100
}
}

ViewModel 还有一个好处 - 如果您在客户端使用 resolve-redux 中间件,它将在那里保持最新, react 性地应用应用程序通过 websockets 接收的事件。

关于resolvejs - 大型数据集的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54530794/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com