【发布时间】:2021-05-23 15:32:23
【问题描述】:
总的来说,我正在尝试找到一种系统设计来快速查找其元数据与传入事件中捆绑的数据相匹配的存储对象。然而,哪些字段是必需的,它们本身就是存储对象的一部分,而不是我可以硬编码到查找查询中的字段。
我的系统有一个存储在 MongoDB 中的 policies 集合,其中的文档如下所示:
{
id: 123,
name: "Jason's Policy",
requirements: {
"var1": "aaa",
"var2": "bbb"
// could have any number more, and each policy can have different field/values under requirements
}
}
我的系统收到如下所示的事件:
// Event 1 - matches all requirements under above policy
{
id: 777,
"var1": "aaa",
"var2": "bbb"
}
// Event 2 - does not match all requirements from above policy since var1 is undefined
{
id: 888,
"var2": "bbb",
"var3": "zzz"
}
当我收到事件时,如何有效地查找所有要求完全满足事件中收到的值的策略?
例如,在上面的示例数据中,事件 1 应该返回策略(因为 var1 和 var2 符合策略要求),但事件 2 应该不返回策略(因为 var1 不匹配/丢失)。
我可以想到在应用程序服务器本身上执行此操作的蛮力方法(想想嵌套的 for 循环),但效率将是关键,因为我们每秒接收数百个事件。
我对可以满足一般问题的文档架构更改建议持开放态度(根据我们文档中定义的标准查找文档)。我也对解决该问题的任何总体设计建议持开放态度(也许有更好的方法来构建我们的系统以触发响应事件的政策行动)。
谢谢!
【问题讨论】:
-
因此,要使事件与策略匹配,其所有键(
id除外)和值都必须与策略匹配,对吗? -
您好,有一个
events文档,您想获取所有符合所有需求策略的policies文档。我说的对吗? -
是的!所有策略键和值都必须匹配。事件可能有额外的数据(我可以忽略),但我需要返回事件数据与所有“poicy.requirements”字段匹配的策略列表。
标签: mongodb performance database-design database-schema