PosgresSQL中JSON和JSONB数据类型有什么区别?
答案 0 :(得分:17)
json
基本上是一个blob,它以原始格式存储JSON数据,甚至可以保留诸如空格,对象中键的顺序,甚至是对象中的重复键之类的无关紧要的事物。它确实提供了执行一些基本JSON操作的能力,例如提取与对象中的某个键相关联的值,尽管它很慢,因为它每次都必须解析JSON blob。它还验证每个值以检查它是否是有效的JSON。另一方面,jsonb
以自定义格式存储JSON数据,该格式针对某些操作进行了优化,例如提取与对象中某些键相关联的值(即,它不会重新分析JSON,也不会线性搜索)。此外,jsonb
支持更多操作,就像对象的串联或在对象内部设置值一样。
一般情况下,只有当我知道我不会执行任何JSON操作或偶尔执行任何操作时,才会使用json
。对于所有其他情况,我使用jsonb
。请注意,对于前一种情况,text
它也是一个非常有效的选项,特别是如果您对json
的验证不感兴趣(例如,因为您信任数据源)。
答案 1 :(得分:8)
这是解释: https://www.citusdata.com/blog/2016/07/14/choosing-nosql-hstore-json-jsonb/
在大多数情况下,JSONB可能是您在寻找NoSQL时所需要的, 无架构,数据类型。 Hstore和JSON也可以有自己的位置 但它不太常见。更广泛地说,JSONB并不总是适合每一个 数据模型。在哪里可以正常化,有益处,但如果你这样做 具有包含大量可选列的模式(例如 使用事件数据)或架构根据租户ID然后JSONB而不同 可以很合适。一般来说,你想要:
JSONB - In most cases JSON - If you’re just processing logs, don’t often need to query, and use as more of an audit trail hstore - Can work fine for text based key-value looks, but in general JSONB can still work great here