Postgresql中json和jsonb类型区别

2024-06-05 09:44

本文主要是介绍Postgresql中json和jsonb类型区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在我们的业务开发中,可能会因为特殊【历史,偷懒,防止表连接】经常会有JSON或者JSONArray类的数据存储到某列中,这个时候再PG数据库中有两种数据格式可以直接一对多或者一对一的映射对象。所以我们也可能会经常用到这类格式数据;PG数据库存储json类型数据可以有两种数据类型JSON和JSONB

json和jsonb区别

json和jsonb都可以json和jsonArray类型的数据
在这里插入图片描述
实际上主要区别在于写入和查询效率以及数据存储上面

性能

  • json 数据类型存储了输入文本的精确副本,这意味着每次需要访问或修改数据时,数据库都必须重新解析该文本。这会导致在处理大型 JSON 文档或进行频繁的 JSON 操作时性能下降。
  • 相比之下,jsonb 数据类型将 JSON 数据存储为一种分解好的二进制格式。虽然这在输入时会稍微慢一些,因为需要进行额外的转换,但它在处理时要快得多,因为不需要进行解析。

存储方式

  • json 数据类型保留了输入文本的完整结构,包括可能存在的空格、JSON 对象内部键的顺序以及重复的键/值对。这意味着它提供了一种“所见即所得”的存储方式,但也可能导致不必要的空间占用和可能的性能开销。
  • jsonb 数据类型在存储时会删除不必要的空格、不保留对象键的顺序,并且只保留每个键的最后一个值(如果存在重复键)。这种存储方式更加紧凑,并且可以提高查询和处理的效率。

索引支持

  • jsonb 数据类型支持基于 GIN(Generalized Inverted Index)或 B-tree 的索引,这使得基于 JSON 数据的查询可以更加高效。通过索引,您可以快速检索 JSON 文档中的特定元素或值。
  • json 数据类型则不支持这样的索引,这可能会限制其在大型数据集或需要高性能查询的应用中的使用。

所以我们在不同情况下可以选择不同的数据格式【PS:业务系统大概率是进行单条数据新增,批量数据查询和过滤,这些情况选择什么数据格式大家应该都比较清楚了,如果有特殊情况可以特殊考虑处理,其实根本就是空间换时间】

其他

在创建表的时候发现还有一种数据类型jsonpath,这个数据类型可以存储解析json格式的表达式
在这里插入图片描述

SELECT jsonb_path_query(jsonb_1 ,  jsonpath_1) FROM tb_json;

结果如下
在这里插入图片描述
在一般的业务场景下我们的json格式一般都是固定的,但是有一些特殊情况比如我们抓取一些非格式话的数据的时候可以存储下解析规则,然后对规则进行补全,逐步完善我们数据解析的能力

这篇关于Postgresql中json和jsonb类型区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1032724

相关文章

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

postgresql数据库基本操作及命令详解

《postgresql数据库基本操作及命令详解》本文介绍了PostgreSQL数据库的基础操作,包括连接、创建、查看数据库,表的增删改查、索引管理、备份恢复及退出命令,适用于数据库管理和开发实践,感兴... 目录1. 连接 PostgreSQL 数据库2. 创建数据库3. 查看当前数据库4. 查看所有数据库

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

PostgreSQL数据库密码被遗忘时的操作步骤

《PostgreSQL数据库密码被遗忘时的操作步骤》密码遗忘是常见的用户问题,因此提供一种安全的遗忘密码找回机制是十分必要的,:本文主要介绍PostgreSQL数据库密码被遗忘时的操作步骤的相关资... 目录前言一、背景知识二、Windows环境下的解决步骤1. 找到PostgreSQL安装目录2. 修改p

PostgreSQL 默认隔离级别的设置

《PostgreSQL默认隔离级别的设置》PostgreSQL的默认事务隔离级别是读已提交,这是其事务处理系统的基础行为模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一 默认隔离级别概述1.1 默认设置1.2 各版本一致性二 读已提交的特性2.1 行为特征2.2

PostgreSQL中MVCC 机制的实现

《PostgreSQL中MVCC机制的实现》本文主要介绍了PostgreSQL中MVCC机制的实现,通过多版本数据存储、快照隔离和事务ID管理实现高并发读写,具有一定的参考价值,感兴趣的可以了解一下... 目录一 MVCC 基本原理python1.1 MVCC 核心概念1.2 与传统锁机制对比二 Postg

Before和BeforeClass的区别及说明

《Before和BeforeClass的区别及说明》:本文主要介绍Before和BeforeClass的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Before和BeforeClass的区别一个简单的例子当运行这个测试类时总结Before和Befor

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri