json - PostgreSQL引入JSONB的解释

PostgreSQL 刚刚介绍 JSONB在 9.4 版本中,它已经成为趋势 on hacker news .它与以前在 PostgreSQL 中存在的 Hstore 和 JSON 有什么不同?

它有什么优点和局限性,什么时候应该考虑使用它?

最佳答案

首先,hstore是一个 contrib 模块,它只允许你存储 key => value 对,其中 key 和 value 只能是 texts(但是值也可以是 sql NULLs) .

jsonjsonb 都允许您存储有效的 JSON (在其 spec 中定义)。

F.ex.这些是有效的 JSON 表示:nulltrue[1,false,"string",{"foo":"bar"}] , {"foo":"bar","baz":[null]} - hstore 与 JSON 的能力相比只是一个小子集(但如果你只需要这个子集就可以了)。

jsonjsonb 的唯一区别是它们的存储:

  • json 以纯文本格式存储,而
  • jsonb 以某种二进制表示形式存储

这样做有 3 个主要后果:

  • jsonb 通常需要比 json 更多的磁盘空间来存储(有时不会)
  • jsonbjson
  • 花费更多时间从其输入表示中构建
  • json 操作比 jsonb 花费 显着 更多时间(每次在 json 类型值)

jsonb 将在稳定版本中可用时,将有两个主要用例,您可以轻松地在它们之间进行选择:

  1. 如果您只在应用程序中使用 JSON 表示,PostgreSQL 仅用于存储和检索此表示,您应该使用 json
  2. 如果你在PostgreSQL中对JSON值做了很多操作,或者对一些JSON字段使用索引,你应该使用jsonb

https://stackoverflow.com/questions/22654170/

相关文章:

angularjs - 如何在 AngularJs 中对字典使用 ng-repeat?

json - 未捕获的语法错误意外 token U JSON

javascript - 什么是 $$hashKey 添加到我的 JSON.stringify 结果

java - Gson:直接将String转换为JsonObject(无POJO)

python - 从文件中读取 JSON

java - 如何遍历 JSONObject?

javascript - 如何将 json POST 数据作为对象传递给 Web API 方法?

json - 如何在 JSON 中转义双引号

java - 仅在序列化期间使用@JsonIgnore,而不是反序列化

javascript - 检查 JSON 对象中是否存在键