微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Open Policy Agent - 提高分组理解的性能

如何解决Open Policy Agent - 提高分组理解的性能

我有以下格式的 id 和角色映射

{
    "ra": [
      {
        "id": 168,"code": "AFAP"
      },{
        "id": 180,"code": "ABC"
      },"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 秒

Performance

在 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
        ]
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。