加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

PostgreSQL何以支持丰富的NoSQL特性?

发布时间:2018-11-08 07:44:24 所属栏目:MySql教程 来源:DBAplus社群
导读:副标题#e# 【新品产上线啦】51CTO播客,随时随地,碎片化学习 作者介绍 谭峰,网名francs,中国开源软件推进联盟PostgreSQL分会特聘专家,《PostgreSQL实战》作者之一,《PostgreSQL 9 Administration Cookbook》译者之一。现就职于浙江移动负责应用上云架
副标题[/!--empirenews.page--] 【新品产上线啦】51CTO播客,随时随地,碎片化学习

PostgreSQL何以支持丰富的NoSQL特性?

作者介绍

谭峰,网名francs,中国开源软件推进联盟PostgreSQL分会特聘专家,《PostgreSQL实战》作者之一,《PostgreSQL 9 Administration Cookbook》译者之一。现就职于浙江移动负责应用上云架构管控以及私有云建设工作。

张文升,中国开源软件推进联盟PostgreSQL分会核心成员之一,《PostgreSQL实战》作者之一,活跃于PostgreSQL、MySQL、Redis等开源技术社区,致力于推动PostgreSQL在互联网企业的应用及企业PostgreSQL培训与技术支持。

在上一篇文章《PostgreSQL用户应掌握的高级SQL特性》我们介绍了PostgreSQL的典型高级SQL特性。PostgreSQL不仅是关系型数据库,同时支持丰富的NoSQL特性,所以本文将介绍PostgreSQL的NoSQL特性,分以下三部分来介绍:

  • PostgreSQL的JSON和JSONB数据类型简介;

  • JSON与JSONB读写性能测试;

  • PostgreSQL全文检索支持JSON和JSONB(PosgreSQL 10新特性)。

一、JSON和JSONB数据类型

PostgreSQL支持非关系数据类型json (JavaScript Object Notation),本节介绍json类型、json与jsonb差异、json与jsonb操作符和函数以及jsonb键值的追加、删除、更新。

1、JSON类型简介

PotgreSQL早在9.2版本已经提供了json类型,并且随着大版本的演进,PostgreSQL对json的支持趋于完善,例如提供更多的json函数和操作符方便应用开发,一个简单的json类型例子如下:

  1. mydb=> SELECT '{"a":1,"b":2}'::json; 
  2. json 
  3. --------------- 
  4. {"a":1,"b":2} 

为了更好演示json类型,接下来创建一张表,如下所示:

  1. mydb=> CREATE TABLE test_json1 (id serial primary key,name json);  
  2. CREATE TABLE 

以上示例定义字段name为json类型,插入表数据,如下所示:

  1. mydb=> INSERT INTO test_json1 (name)  
  2. VALUES ('{"col1":1,"col2":"francs","col3":"male"}');  
  3. INSERT 0 1  
  4. mydb=> INSERT INTO test_json1 (name)  
  5. VALUES ('{"col1":2,"col2":"fp","col3":"female"}');  
  6. INSERT 0 1 

查询表test_json1数据:

  1. mydb=> SELECT * FROM test_json1;  
  2. id | name  
  3. ----+------------------------------------------  
  4. 1 | {"col1":1,"col2":"francs","col3":"male"}  
  5. 2 | {"col1":2,"col2":"fp","col3":"female"} 

2、查询JSON数据

通过->操作符可以查询json数据的键值,如下所示:

  1. mydb=> SELECT name -> 'col2' FROM test_json1 WHERE id=1;  
  2. ?column?  
  3. ----------  
  4. "francs"  
  5. (1 row) 

如果想以文本格式返回json字段键值可以使用->>符,如下所示:

  1. mydb=> SELECT name ->> 'col2' FROM test_json1 WHERE id=1;  
  2. francs  
  3. (1 row) 

3、JSONB与JSON差异

PostgreSQL支持两种JSON数据类型:json和jsonb,两种类型在使用上几乎完全相同,主要区别如下:

json存储格式为文本,而jsonb存储格式为二进制 ,由于存储格式的不同使得两种json数据类型的处理效率不一样,json类型以文本存储并且存储的内容和输入数据一样,当检索json数据时必须重新解析,而jsonb以二进制形式存储已解析好的数据,当检索jsonb数据时不需要重新解析,因此json写入比jsonb快,但检索比jsonb慢,后面会通过测试验证两者读写性能差异。

除了上述介绍的区别之外,json与jsonb在使用过程中还存在差异,例如jsonb输出的键的顺序和输入不一样,如下所示:

  1. mydb=> SELECT '{"bar": "baz", "balance": 7.77, "active":false}'::jsonb; 
  2. jsonb 
  3. -------------------------------------------------- 
  4. {"bar": "baz", "active": false, "balance": 7.77} 
  5. (1 row) 

而json的输出键的顺序和输入完全一样,如下所示:

  1. mydb=> SELECT '{"bar": "baz", "balance": 7.77, "active":false}'::json;  
  2. json  
  3. -------------------------------------------------  
  4. {"bar": "baz", "balance": 7.77, "active":false}  
  5. (1 row) 

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读