gpt4 book ai didi

PostgreSQL JSONB - JSON 数组与 JSON 对象性能

转载 作者:行者123 更新时间:2023-11-29 13:25:10 25 4
gpt4 key购买 nike

每个对象(实例)对每个用户都有自己的隐私设置。这些设置通过对象表行中的 privacy JSONB 字段 定义。我很好奇哪种方式对性能更好?还是更好的方法?

解释:

  • ID为2的用户可以读写该对象
  • ID为8的用户只能读取该对象
  • SQL 查询:获取 ID 为 2 的用户可以读取的记录(假设任务表)

案例一——使用数组(注意:第一个key是User ID)

privacy: {
"2": ["read","write"],
"8": ["read"]
}
SELECT * FROM "tasks" WHERE (privacy -> '2' ? 'read')

案例二 - 使用对象(在术语上不确定,对我来说它更像是散列)

privacy: {
"2": {"read":true, "write":true},
"8": {"read":true, "write":false}
}
SELECT * FROM "tasks" WHERE (privacy -> '2' -> 'read' = true)

欢迎提出任何建议。

最佳答案

据我所知,如果你只询问选择查询,你可以在 privacy 列上创建一个 gin 索引(参见 8.14.4. jsonb Indexing ),所以基本上以下查询在性能方面应该是相同的:

-- create index
CREATE INDEX privacy_idx ON tasks USING gin (privacy);

SELECT * FROM tasks WHERE privacy -> '2' ? 'read'
SELECT * FROM tasks WHERE privacy @> {"read": true}

可能,在大小方面只有一个区别,因为内部 jsonb 数组只包含 WJB_ELEM 每个元素和 jsonb 对象 - WJB_KEY + WJB_VALUE 每个元素。

关于PostgreSQL JSONB - JSON 数组与 JSON 对象性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35157838/

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