Open Policy Agent - 提高分组理解的性能
Open Policy Agent - Improve performance of a grouping comprehension
我有以下格式的 ID 和角色映射
{
"ra": [
{
"id": 168,
"code": "AFAP"
},
{
"id": 180,
"code": "ABC"
},
{
"id": 180,
"code": "ABCMND"
}
]
}
我需要如下所示的输出
{
"roleactions": {
"168": [
"AFAP"
],
"180": [
"ABC",
"ABCMND",
"DCRMP"
]
}
}
所以我写了下面的代码
roleactions = r_map {
r := data.ra
r_map := {id: list |
some i
id := r[i].id
list := [obj |
some j
r[j].id == id
obj := r[j].code
]
}
}
但是当我运行这个的时候差不多需要5-6秒
在 5682526.465 微秒内找到 1 个结果。
有人可以指导如何编写此策略映射以提高性能吗?
OPA 可以在线性时间内评估这样的理解:https://www.openpolicyagent.org/docs/latest/policy-performance/#comprehension-indexing。这种情况下的问题是,在孤立地考虑理解时,局部变量 r
是不安全的。
如果你像下面这样重构理解,运行时间应该是线性的:
roleactions := r_map {
r_map := {id: list |
some i
id := data.ra[i].id
list := [obj |
some j
data.ra[j].id == id
obj := data.ra[j].code
]
}
}
我有以下格式的 ID 和角色映射
{
"ra": [
{
"id": 168,
"code": "AFAP"
},
{
"id": 180,
"code": "ABC"
},
{
"id": 180,
"code": "ABCMND"
}
]
}
我需要如下所示的输出
{
"roleactions": {
"168": [
"AFAP"
],
"180": [
"ABC",
"ABCMND",
"DCRMP"
]
}
}
所以我写了下面的代码
roleactions = r_map {
r := data.ra
r_map := {id: list |
some i
id := r[i].id
list := [obj |
some j
r[j].id == id
obj := r[j].code
]
}
}
但是当我运行这个的时候差不多需要5-6秒
在 5682526.465 微秒内找到 1 个结果。
有人可以指导如何编写此策略映射以提高性能吗?
OPA 可以在线性时间内评估这样的理解:https://www.openpolicyagent.org/docs/latest/policy-performance/#comprehension-indexing。这种情况下的问题是,在孤立地考虑理解时,局部变量 r
是不安全的。
如果你像下面这样重构理解,运行时间应该是线性的:
roleactions := r_map {
r_map := {id: list |
some i
id := data.ra[i].id
list := [obj |
some j
data.ra[j].id == id
obj := data.ra[j].code
]
}
}