人大金仓数据库KingbaseES-json与jsonb常见的差异

json与jsonb常见的差异

关键字:

json、jsonb、人大金仓、KingbaseES、

1. json的概念

json是一种轻量级的数据交换格式,它以人类可读的方式存储和表示数据。他由键值对组成,可以包含多层嵌套的结构。这种数据也可以被存储为 text,但是 JSON 数据类型的优势在于能强制要求每个被存储的值符合JSON规则。也有很多 JSON相关的函数和操作符可以用于存储在这些数据类型中的数据

KES中同时支持json和jsonb这两种格式的使用。

2. json与jsonb在概念上的区别

这两个格式中常见的一些区别就是,json是被保存为文本格式的,而jsonb则是保存为二进制格式的。

因此这一特性通常会使jsonb比json格式占用更多的磁盘空间;且jsonb比json的写入更耗时间,并且json的操作比jsonb的操作,非常明显的会更耗时间,因为在操作一个json格式的数据的时候,每次读取都需要对json数据进行一次解析,转化为二进制数据,而jsonb由于在存储的时候就是存储的二进制数据,因此,在使用的时候,就可以省去解析这一步。

因此,如果只需要进行一些常见的保存于获取json数据,那么使用json格式就完全可以。但是如果需要使用较多的json值的操作,或者需要在一些json字段上使用索引的时候,就需要使用jsonb格式。

3、json与jsonb在实际使用中包含的差异

区别一:jsonb输出的键值的顺序与输入时的不一样

注:这里jsonb的输出顺序需要注意,会出现不同的情况

1、插入key值都为英文的时候,如果英文长度不一样,则长度短的会被输出到前面

select '{"pieapple":7.77,"apple": 7.77}'::jsonb;

select '{"pieapple":7.77,"wwwwwwapple": 7.77}'::jsonb;

2、当插入的key值都是英文的时候,如果英文长度一样,则按照字母顺序排序,排序靠前的会被输出到前面,例如abc与abd,abc会到前面

select '{"apple":7.77,"appla": 7.77}'::jsonb;

select '{"apple":7.77,"applz": 7.77}'::jsonb;

3、当插入的key值有中文和英文的时候,此时一个中文会占用三个英文字母的位置,越少的越靠前,相等情况下英文字母排在前面。

select '{"appappl":7.77,"一二": 7.77}'::jsonb;

select '{"appapp":7.77,"一二": 7.77}'::jsonb;

区别二:当前面的key值相等的时候,就会产生相等的两个键值对覆盖成一个的情况

select '{"apple":"sdafasd","apple":[1, 2]}'::jsonb;

select '{"apple":[1,2],"apple":"asdfas"}'::jsonb;

区别三:jsonb会去掉输入数据中键值的空格

select '{"apple": "sdafasd","apple": 213}'::jsonb;

json则不会删除空格

区别4:在 JSONB 中数据会被按照底层 numeric 类型的行为来打印,那么e记号输入的数字被打印出来就不会有该记号。

select '{"reading": 1.230e-5}'::jsonb;

转换为json则会正常打印

参考资料

《KingbaseES SQL语言参考手册》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值