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

med*_*zid 20 postgresql json

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

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

D-s*_*ide 25

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

json并没有太大的不同text.除了验证JSON之外,它没有太大作用.

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

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

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


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

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

json两种方式都是相对安全的选择.text理论上,由于缺少验证,使用可以在可忽略的范围内提高性能,但是您只能通过基准测试得到具体的数字.但它不能防止非JSON值,并且客户端中的意外错误可能会被忽视.负责任地测试!

  • 如果有人感兴趣的话,这是我发现的另一个有用的信息来源:http://stackoverflow.com/questions/22654170/explanation-of-jsonb-introduced-by-postgresql (3认同)
  • @WestCoastProjects 是的。不过,我会将这个怪癖归入与重复键支持相同的类别。[RFC 7159](https://www.rfc-editor.org/rfc/rfc7159.html#section-4) 提出了一个有效的观点,即依赖 JSON 对象中的字段顺序可以提高互操作性。`jsonb` 正是展示了这一点 (2认同)