json vs jsonb,及常用
JSON 与 JSONB 也是一对冤家。现在很多开源系统和开源软件都支持 JSON 与 JSONB,比如:Postgresql 和 MongoDB 等。
这也导致了面试中被问到 JSON 与 JSONB 的区别时,很多人不知所措!
今天,我们就一起来看看它们之间到底有哪些区别?
在 stackoverflow 上有一个解释,为了方便阅读,我贴在了下面。
首先,hstore
是一个扩展模块,它允许你保存key=>values
键值对,且键值都只能是text
s类型(但是,值也允许sql的NULL)
json与jsonb 允许你保存一个有效的json值(定义).
例如,以下都是有效的json表示方式: null
, true
, [1, false, "string", {"foo":"bar"}]
, {"foo":"bar", "baz":[null]}
.
相比json, hstore只是它的一个很小的子集(但是,如果你只需要这个子集,也OK的)
json与jsonb的区别主要是它们的存储方式:
json
是保存为文本格式的jsonb
是保存为二进制格式的
这主要有三方面的影响:
jsonb
通常比json
占用更多的磁盘空间(有些情况不是)jsonb
比json
的写入更耗时间json
的操作比jsonb
的操作明显更耗时间(在操作一个json
类型值时需要每次都去解析)
当
jsonb
将在未来稳定版发行可用时,这有两个主要使用情况,你很容易在他们之间选择的:
- 如果你的应用只用json表示,PostgreSQL只用于保存与获取时,你应该使用
json
. - 如果你需要在PostgreSQL中做比较多的json值的操作,或者在一些json字段上使用索引时,你应该使用
jsonb
官方文档上说:
有两个JSON数据类型:json和jsonb。它们接受几乎 相同的值组作为输入。它们实际的主要差别是效率。
json 数据类型存储输入文本的精确拷贝,处理函数必须在每个执行上重新解析;
而jsonb数据以分解的二进制格式存储,这使得它由于添加了转换机制而在输入上稍微慢些,但是在处理上明显更快,因为不需要重新解析。
jsonb也支持索引,这也是一个明显的优势。
因为json类型存储输入文本的精确拷贝,它将保存令牌间语义上无关紧要的空格,和JSON对象中键的顺序。另外,如果值中的一个JSON对象多次包含相同的键,那么保存所有的键/值对。(处理函数将最后一个值当做操作值。)
相比之下, jsonb不保存空格,也不保存对象键的顺序,并且不保存重复对象键。如果在输入中指定了重复的键,那么只保存最后一个值。
json(jsonb) 的常用函数及操作符
->
右操作符为int: 获取JSON数组元素(索引从0开始)
右操作符为text: 通过键获取json值
->>
右操作符为int: 获取JSON数组元素为text
右操作符为text: 通过键获取json值为text
其他的如 Postgresql 中常见的操作符:#>,#>>,@>,<@,?,?|,?& 等的用法建议参考官方文档。
总体来说 jsonb 写入比 json 稍慢, 但检索较 json 快些,官方做过测试比较的,用的时候,根据业务来确定。
json vs jsonb,及常用相关推荐
- PostgreSQL的json和jsonb比较
PostgreSQL何以支持丰富的NoSQL特性? 一.引言 PostgreSQL不仅是关系型数据库,同时支持丰富的NoSQL特性 本文主要包含以下三部分内容: PostgreSQL的 JSON和JS ...
- postgresql 的json 和jsonb 的使用
1. json 和jsonb 区别 两者从用户操作的角度来说没有区别,区别主要是存储和读取的系统处理(预处理)和耗时方面有区别. json写入快,读取慢,jsonb写入慢,读取快. 查询操作推荐使用j ...
- json和jsonb类型——PostgreSQL
PostgreSQL支持两种json数据类型:json和jsonb,而两者唯一的区别在于效率,json是对输入的完整拷贝,使用时再去解析,所以它会保留输入的空格,重复键以及顺序等.而jsonb是解析输 ...
- PG-NoSQL特性:json和 jsonb 读写性能测试
json和 jsonb 读写性能测试 文章目录 json和 jsonb 读写性能测试 前言 一.jsonb 类型创建索引 二.json jsonb 表写性能测试 1.写入速度比较 2.两表占用空间间大 ...
- Java Json Binding JSON-B使用示例
JSON-B是用于将Java对象与JSON消息相互转换的标准绑定层.它定义了一种默认的映射算法,用于将现有的Java类转换为JSON,同时使开发人员可以通过使用Java注释自定义映射过程. 安装 座标 ...
- pythonjson实例_python:JSON的两种常用编解码方式实例解析
概念 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写.在日常的工作中,应用范围极其广泛.这里就介绍python下它的两种编解码方法: 使 ...
- python内置json模块_python的常用内置模块之序列化模块json
#什么叫序列化--将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. '''比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给? 现在我们能想到的方法就是存在文 ...
- idea json格式化插件_IDEA常用插件
1.CodeGlance 代码迷你缩放图插件 2. Codota 代码提示工具,扫描你的代码后,根据你的敲击完美提示 Codota基于数百万个开源Java程序和您的上下文来完成代码行,从而帮助您以更少 ...
- lableme json转化为图片常用的脚本
个人记录使用,针对的是16位图像 1. 数据集对比度拓展 import cv2 import os import numpy as np from PIL import Image # 图像混合# f ...
最新文章
- Maven build标签
- asp.net中jQuery $post用法
- mysql 中遍历查询_mysql中循环查询
- 传感与检测技术,光电二极管和光敏电阻的特性研究实验报告,江南大学物联网工程学院自动化
- sqlmap使用方法
- 如何在Mac上的Pages文稿中设置对开页?
- mysql开启全局日志_mysql开启全局日志,通过每秒sql语句执行次数分析系统性能瓶颈...
- CAT1 4G+以太网开发板腾讯云手机微信小程序显示温度和下发控制
- 标签打印软件如何制作箭头样式
- 单片机仿真软件 linux,免费的单片机和电路仿真软件SimulIDE,从此再也不用花钱买开发板了...
- 前端工程化之前端静态资源缓存优化和部署
- Linux操作系统Maven【The JAVA_HOME environment variable is not defined correctly】
- 怎样把ICO图标改成圆形的?
- uniapp打包之后首页白屏
- 牛客每日练习----分元宵,送分啦-QAQ,字符串的问题
- [data engineering] (一)数据工程师的工作内容以及需要的软硬实力
- 基于Ajax和forms组件实现注册功能
- 外仁内圣,以借得天下,以情御英雄
- How to tame java GC pauses? Surviving 16GiB heap and greater
- 线程二—— 网图下载