选择json或jsonb或文本的数据类型

时间:2016-08-19 14:50:20

标签: json postgresql

我想存储一个大的json哈希(或内容,按你想要的方式调用)和#34; big"我的意思是超过1000个键值对,我不想在json字段上进行任何搜索,我只是想从数据库中检索它并将其传递给javascript来解析它并构造一个可视化结果。

在Postgresql上有一个json类型和jsonb类型(也许我可以使用text字段来存储json)。我只想为此目的做出正确的选择,所以我希望有经验的人提供一些建议。

1 个答案:

答案 0 :(得分:21)

假设您正在谈论实际的,严格的JSON(没有诸如不带引号的密钥之类的怪癖)......

jsontext没有什么不同。除了验证JSON 之外没什么用。

与这两者相比,

jsonb是一个不同的野兽:它是一个成熟的数据结构,具有自己的内部格式,在搜索中有更多的操作可用。例如,json没有适用的=(相等运算符)。 jsonb有。 (text也有,即使它在语义上不同。)

索引更加明智,但它必须在读写期间来回转换。

鉴于此,jsonb在这里看起来不是一个合理的选择。

......所以只剩下一个决定:

您是否要确保数据库中只包含有效的JSON值?在数据库级别?或者您是否相信该数据库的每个客户端(通常是服务器应用程序)只提供有效数据?

json无论哪种方式都是相对安全的选择。使用text理论上可以在没有验证的情况下以微不足道的差距提高性能,但是您只能获得具体的通过基准测试的数字。但它不能防止非JSON值,并且客户端中的意外错误可能会被忽视。负责任地测试!