前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PostgreSQL 的JSON 处理甩“你”几条街

PostgreSQL 的JSON 处理甩“你”几条街

作者头像
AustinDatabases
发布2020-03-26 13:14:25
4.5K0
发布2020-03-26 13:14:25
举报
文章被收录于专栏:AustinDatabasesAustinDatabases

首先这里的你绝对不是MONGODB ,至于是谁,你是谁,那的先了解POSTGRESQL 处理 JSON 的方式后,才能确定那个你是谁。

首先POSTGRESQL 支持两种JSON格式,JSON and JSONB ,在PG 9.X 版本对JSON的支持就已经出具规模了(MONGODB 中的支持BSON格式),拿在postgresql 中大概率的你是要使用JSONB 这样的格式,这样的格式有以下一些好处

1 处理的速度快

2 可以添加索引

当然也有一些东西是有限制的,这里先不表,另外学习的过程,我发现一个点,就是如果你能在学习的过程中,先得到一点甜头,则你后续的学习就会有兴趣,并且很可能越学越快

所以下面我们先做一点实践,增加兴趣

我们建立一个表,如果按照MONGODB 来说,应该叫collection, 然后我们插入一条 document ,格式是jsonb ,但如果你用MONGODB 的方式来理解,你可以找到一点不一样的地方

可以看到,其实要展示数据在POSTGRESQL 中也并不是难事

然后我们创建一个索引,熟悉PG的人都知道他模糊查询的厉害,下面的索引的建立也颇有那几分味道。

explain analyze SELECT * FROM json_test WHERE info @> '{"name": "Calor"}';

查询中也有一些 JSONB 特殊的查询的方式,但这样的查询方式比初次使用MONGODB 的查询语句对熟悉SQL 的人要亲切的多。

到这里我们可以小结一下,PostgreSQL 里面的JSON 可以使用JSONB 的方式来进行存储,并且大部分时间创建一个GIN 的索引就可以满足大部分查询,如果使用过MONGODB 的,可以知道MONGODB 本身存储是B+树来存储索引的,特定的查询也要配合特定建立的索引,这点上就.......

下面我们继续做测试,看看是不是POSTGRESQL 可以一个索引就将所有的查询都HOLD 住。

下面我们创建,一个新的collection

create table test_json_2 (info jsonb);

插入数据

insert into test_json_2 select ('{"name": "nn-' || round(random()*20000000) || '", "ajon": "address", "tags": ["system", "database", "langrage"]}')::jsonb from (select * from generate_series(1,100000)) as temp;

一个10万行的collection就生成了,照方抓药,创建索引后,直接查询,结果很明显是可以走索引的。

并且网上提及的某些不能走索引的情况,在PG11 这个版本也是可以开始走索引了。

当然如果你统计的数据是全表,或大部分数据,则还是要走全表扫描的

这里大致的看了一下POSTGRESQL 对JOSN 的支持,相对于某些数据库还是友好的,并且符合人类快速理解和上手的方式。

当然在面对专业文档数据库MONGODB 的强大的处理能力下,没有其他的数据库可以抗衡,因为那个是他的 饭碗,如果不是很复杂(就是那种嵌套,嵌套,嵌套,还有数组的让人头要炸开的那种)的JSON 或者你没有专业的MONGODB 的支持,想使用JSON 或文档的方式在数据库里面不想失望的使用,POSTGRESQL 是一个选择,不错的。

说到这里,那个题目中的“你”到底应该颁给谁?心里早就有答案了吧

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档