【问题标题】:Postgres: is appending to a large jsonb array expensive?Postgres:附加到大型 jsonb 数组是否昂贵?
【发布时间】:2020-06-15 13:42:45
【问题描述】:

假设我有一张表t,列有t_id (uuid)xs (jsonb, a json array)

我的问题是,SQL update t set xs = xs || '["x1", "x2"]' :: jsonb where t_id = 'some-uuid' 贵吗?

价格昂贵可能有两个原因:

a) || 运算符解析左操作数,所以如果左操作数很大,解析成本会很高

b) 我听说如果你更新任何列,PG 会更新整行,因为xs 列很大,这涉及读取原始值(左操作数),将其与新值连接,然后写入结果到磁盘到新位置(在磁盘上)

我说的对吗?

【问题讨论】:

    标签: postgresql jsonb


    【解决方案1】:

    您的第二点是正确的:PostgreSQL 读取整行,修改值并将全新的行版本写入表。保留旧的行版本以服务并发读取。

    修改大的jsonb 不会非常昂贵,但整个事情都必须被存储到 RAM 中。

    您最好规范化表结构并将接收定期修改的 JSON 属性存储在单独的表中。这将使操作更便宜。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      • 2020-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多