Postgres中JSON和JSONB的区别

73

JSON和JSONB数据类型在PosgresSQL中有什么区别?

  1. 应该在什么情况下使用特定的类型?
  2. 相对于其他类型,有什么好处或缺点?

1
另一个概述:https://dev59.com/1mkv5IYBdhLWcg3wfA0P#10560761 - Erwin Brandstetter
3
PostgreSQL文档定义的数据类型json和jsonb几乎相同;唯一的区别是,json数据存储为JSON输入文本的精确副本,而jsonb以分解的二进制形式存储数据;也就是说,它不是作为ASCII / UTF-8字符串,而是作为二进制代码。 - Kashif
这个问题已经在其他地方得到了解答,但是这篇文章的标题更容易找到我的解决方案! - Burcin
2个回答

101

JSON基本上是一个存储JSON数据的二进制大对象,以原始格式保存甚至不重要的东西,如空格、对象中键的顺序或者对象中重复的键。它提供了一些基本的JSON操作,例如提取与对象中某个键关联的值,尽管由于每次都需要解析JSON大对象,因此它在这方面的速度较慢。它还会验证每个值以检查其是否为有效的JSON格式。JSONB则使用自定义格式存储JSON数据,该格式针对某些操作进行了优化,例如提取与对象中某个键关联的值(即不会重新解析JSON,也不会线性搜索)。此外,JSONB支持更多操作,例如对象的连接或在对象中设置深层次的值。

通常情况下,我只有在知道自己不会进行任何JSON操作或仅偶尔进行操作时才会使用JSON。对于所有其他情况,我都会使用JSONB。请注意,在前一种情况下,text也是一个完全有效的选项,特别是如果您对数据源的信任不需要JSON所提供的验证功能。


51
这是解释: https://www.citusdata.com/blog/2016/07/14/choosing-nosql-hstore-json-jsonb/ 在大多数情况下,当寻找一个无模式(schema-less)的NoSQL数据类型时,JSONB很可能是您想要的。Hstore和JSON也有它们的用处,但较少见。更广泛地说,JSONB并不总是适合每个数据模型。如果您可以进行规范化,则会带来好处,但如果您的模式具有大量可选列(例如事件数据),或者基于租户ID的模式不同,则JSONB可能非常适合。一般而言,您需要:
- JSONB - 在大多数情况下 - JSON - 如果您只是处理日志,不经常需要查询,并将其用作审计跟踪 - hstore - 可以很好地处理基于文本的键值查找,但通常情况下,JSONB仍然可以很好地处理这些情况。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接