gpt4 book ai didi

sql - PostgreSQL 许多 jsonb 列与许多行

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

从许多列与许多行(或表)的其他答案来看,列似乎对规范化数据的性能更高。序列化数据呢?

我将存储许多进行中的 Web 表单,即尚未验证的只是用户目前拥有的内容的转储,以便他们可以在另一个 session 中继续。表单将被序列化为 json 并存储在 jsonb 列中。目前有十种形式,但将来会添加(更多)更多。

是否让一列包含用户 ID 和一列用于每个表单更好:

CREATE TABLE "forms" (
"user_id" uuid NOT NULL,
"form_a" jsonb,
"form_b" jsonb,
"form_c" jsonb,
...
)

或包含用户 uuid、表单 id 和表单 json 列的多行:

CREATE TABLE "forms" (
"user_id" uuid NOT NULL,
"form_id" uuid NOT NULL,
"form_json" jsonb NOT NULL
)

我确信只查询一行会更快,但是更新包含许多 jsonb 列的一行中的列呢?或将新的 jsonb 列添加到具有数百万行的表中?它在什么时候倾向于支持多行?

谢谢!

最佳答案

如果仅在维护窗口(升级)期间引入新表单,您可能会使用第一种方法。

如果在正常运行时可以引入新的表单,那将导致问题:

  • ALTER TABLE阻塞并被所有并发数据修改语句阻塞,这可能是个问题。

  • 您需要是表所有者或 super 用户才能运行 ALTER TABLE ,但出于安全原因,如果您的应用程序用户可以是表所有者以外的其他人会更好。

UPDATE 的数据量增加不是考虑因素,因为 the documentation说:

During an UPDATE operation, values of unchanged fields are normally preserved as-is; so an UPDATE of a row with out-of-line values incurs no TOAST costs if none of the out-of-line values change.

我认为第二种设计更简洁,如果您有正确的索引,稍微复杂的查询不会明显更昂贵。

关于sql - PostgreSQL 许多 jsonb 列与许多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41841004/

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