PostgreSQL 刚刚介绍 JSONB在 9.4 版本中,它已经成为趋势 on hacker news .它与以前在 PostgreSQL 中存在的 Hstore 和 JSON 有什么不同?
它有什么优点和局限性,什么时候应该考虑使用它?
首先,hstore
是一个 contrib 模块,它只允许你存储 key => value 对,其中 key 和 value 只能是 text
s(但是值也可以是 sql NULL
s) .
json
和 jsonb
都允许您存储有效的 JSON 值(在其 spec 中定义)。
F.ex.这些是有效的 JSON 表示:null
、true
、[1,false,"string",{"foo":"bar"}]
, {"foo":"bar","baz":[null]}
- hstore
与 JSON 的能力相比只是一个小子集(但如果你只需要这个子集就可以了)。
json
和 jsonb
的唯一区别是它们的存储:
json
以纯文本格式存储,而
jsonb
以某种二进制表示形式存储
这样做有 3 个主要后果:
jsonb
通常需要比 json
更多的磁盘空间来存储(有时不会)
jsonb
比 json
花费更多时间从其输入表示中构建
json
操作比 jsonb
花费 显着 更多时间(每次在 json
类型值)
当 jsonb
将在稳定版本中可用时,将有两个主要用例,您可以轻松地在它们之间进行选择:
- 如果您只在应用程序中使用 JSON 表示,PostgreSQL 仅用于存储和检索此表示,您应该使用
json
。
- 如果你在PostgreSQL中对JSON值做了很多操作,或者对一些JSON字段使用索引,你应该使用
jsonb
。
我是一名优秀的程序员,十分优秀!