网站建设报告/wp博客seo插件
数据库管理130期 2024-01-09
- 第130期 JSON二元性(20240109)
- 1 简介
- 2 关系型表和JSON存储的优劣
- 3 Oracle JSON关系型二元性视图
- 总结
第130期 JSON二元性(20240109)
上周,又双叒飞了一趟上海,也是2024年第一飞,主要是受德哥邀请参加《国产数据库共话未来趋势·第三期-数据库实践哪家强》第一次当主持人(紧张的一批,嘴瓢了好几次),同时进行了《国产数据库最大的敌人》的主题分享,从Oracle的营收与研发投入展现Oracle的强大,同时从Oracle 23c新特性JSON二元性来展现Oracle的创新能力。(视频回放可以关注微信视频号“digoal德哥PostgreSQL”进行查看)
1 简介
本期就来稍微深入的讲一下JSON二元性,其实这个是去年Oracle 23c新特性探索连更那几篇遗留的一项内容,主要是我在SQL和开发这块确实比较烂,那时候就跳过了JSON二元性这个特性。在CAB/PAB,Oracle通过一个非常直观的栗子讲解了这一特性,我也很荣幸要到了对应的PPT并进行了翻译,在本次大会上进行了分享。
Oracle JSON关系型二元性视图,Oracle JSON Relational Duality Views,简称JSON二元性(官方文档:https://docs.oracle.com/en/database/oracle/oracle-database/23/jsnvu/overview-json-relational-duality-views.html)。其实简单点来说就是依然用关系型表用行列方式存放数据,而通过视图来将表映射成JSON模型,并可以通过传统JSON数据库方式来通过这个视图来操作对应数据。
下面我们以一个栗子,搭建并维护一个学生课表APP来展示JSON二元性这一新特性:
2 关系型表和JSON存储的优劣
关系型表的存储设计其实比较简单,可以实现存储独立性、数据一致性还是查询便捷性:
通过四表JOIN即可获取需要的结果,但是通过SQL会出现输出结果的重复数据,增加业务侧对数据的处理:
而JSON存储,对于业务程序来说可以做到几乎是拿来即可展示:
在Oracle 23c出现之前,为了在关系型数据库中存放JSON信息,很多数据库,比如Oracle、MySQL、PostgreSQL等已经将JSON作为一种原生数据类型引入数据库中,即将JSON数据存放在列中。但是JSON文档存储也有一些问题,比如数据冗余的问题:
即多条数据存在相同的内容会出现数据的冗余(这个栗子中就是多个学生有相同的课程),同时如果需要对该条数据进行更新,需要对所有关联数据进行操作(比如某个课程需要换老师或教室),增加了更新的开销和风险。
3 Oracle JSON关系型二元性视图
从Oracle 23c开始Oracle提供了一个存储模型存放所有类型数据的方案,在Oracle眼中数据是以存储为中心,而不是以使用为重,数据的存储模型决定了数据的一切使用方式,包括操作、语言和API:
JSON关系型二元性视图声明意图将关系型数据作为JSON文档使用,允许数据库使用关系型表生成JSON格式和API:
这个栗子中JSON二元性相关语句如下:
CREATE JSON DUALITY VIEW student_schedule
AS student
{{student : stuidname : snamemajor : majorschedule : student_courses[ {course{time : timecourse : cnamecourseId : cidroom : room teacher @unnest{teacher : tname}}} ]
};
通过JSON关系型二元性视图,将关系型表映射成JSON格式,APP可以使用标准的REST来从视图中GET获取JSON文档,视图同样可以通过MongoDB兼容API或SQL进行访问:
GET school.edu/student_sched?q={"student":{"$eq":"Jill"}}
也可以使用PUTs、MongoDB兼容API或SQL来通过视图编辑文档,数据库检测对文档的变更并且实时更新关系表中的数据:
PUT school.edu/student_schedule/:stuid
JSON二元性允许JSON文档包含任何对应用方便的数据,JSON关系型二元性视图因为底层标准关系型行模式存储,因此永远不会出现冗余数据,相较于JSON数据库,二元性为应用提供了更好的JSON使用及存储方式:
另一方面使用JSON二元性功能不需要像传统JSON数据库那样,针对每一种功能设计独立的JSON模型,通过一套关系型表底层可以实现多种JSON模型映射以实现不同的功能,从而降低数据底层逻辑设计难度,提升数据使用便捷性:
同时,基于关系型表底层可以充分发挥关系型数据库在OLTP的性能优势,并提供更加便捷多元化的分析方式,还可以通过数据库的自动并行进一步提升性能:
总结
Oracle 23c新特性JSON关系型二元性视图给数据库提供了全新的数据存储与使用思路,同时进一步阐释并践行了Oracle融合数据库的理念。
老规矩,知道写了些啥。
相关文章:

数据库管理-第130期 JSON二元性(20240109)
数据库管理130期 2024-01-09 第130期 JSON二元性(20240109)1 简介2 关系型表和JSON存储的优劣3 Oracle JSON关系型二元性视图总结 第130期 JSON二元性(20240109) 上周,又双叒飞了一趟上海,也是2024年第一飞…...

k8s--动态pvc和pv
前情回顾 存储卷: emptyDir 容器内部,随着pod销毁,emptyDir也会消失 不能做数据持久化 hostPath:持久化存储数据 可以和节点上目录做挂载。pod被销毁了数据还在 NFS:一台机器,提供pod内容器所有的挂载点…...

C++:常量
const的最初动机 const的使用方法 使用const的好处是允许指定一种语义上的约束,即某种对象不能被修改,且由编译器具体实施这种约束。 const声明格式:const 类型名 对象名;修饰普通变量,时期不能被随意修改 【注意】1.C中的const…...

java JDBC 连接数据库
必须先插入工具包 DataSource ds JdbcHelper.getDs();System.out.println(ds);JdbcTemplate jdbcTemplatenew JdbcTemplate(ds);System.out.println(jdbcTemplate);//新增String sql1"insert into biao values(null,?,?,?)";int ijdbcTemplate.update(sql1,"…...

图神经网络|5.消息传递的计算方法 6.多层GNN的作用
5.消息传递的计算方法 边的存放方式 注意,在实际的边的实现方式中,并不是以邻接矩阵来进行实现的,这是因为在图的更新中,用邻接矩阵进行更新所占用的时间开销相对大,二是因为领接矩阵占用的空间大(N方&am…...

构建中国人自己的私人GPT
创作不易,请大家多鼓励支持。 在现实生活中,很多人的资料是不愿意公布在互联网上的,但是我们又要使用人工智能的能力帮我们处理文件、做决策、执行命令那怎么办呢?于是我们构建自己或公司的私人GPT变得非常重要。 先看效果 一、…...

添加气泡与菜单
目录 1、添加气泡 1.1、文本提示气泡 1.2、带按钮的提示气泡 1.3、自定义气泡 2、菜单 2.1、创建默认样式的菜单 2.2、创建自定义样式的菜单 1、添加气泡 Popup属性可绑定在组件上显示气泡弹窗提示,设置弹窗内容、交互逻辑和显示状态。主要用于…...

python代码练习:双指针法
题目一:移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不…...

C++系列十七:访问控制符
访问权限控制符 一、public访问权限二、private访问权限三、protected访问权限 在C中,访问权限控制符用于限制类成员的访问权限,主要包括public、private和protected三种。这些访问权限控制符用于控制类成员的访问级别,从而保证数据的封装性和…...

postgresql 最简主从配置
实验目的 配置一个最简的主从环境,了解基本的主从配置。 环境参数 操作系统CentOS Linux release 7.9.2009 (Core)数据库版本PostgreSQL 10.23主库端口15431备库端口15432 因为只是做实验,所以主备库放在同一台机器上,仅通过端口区分主备…...

ubuntu 安装 anaconda
ubuntu 安装 anaconda 下载 wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh安装 bash Anaconda3-2023.09-0-Linux-x86_64.sh2.1 回车继续 2.2 许可协议 输入 q 退出阅读许可协议 2.3 输入 yes 接受 许可协议 2.4 设置 anaconda 安装位置 如不需…...

DOM 被劫持
文档对象模型(DOM)充当着 HTML 和 JavaScript 之间的接口,搭建起静态内容与动态交互之间的桥梁,对现代 Web 开发而言,DOM 的作用不可或缺。 然而,DOM 也有一个致命的陷阱 —— DOM 劫持。DOM 劫持是指当 H…...

PIG框架学习2——资源服务器的配置详解
一、前言 1、pig资源服务器的配置 Spring Security oauth2相关的依赖是在pigx-common-security模块中引入的,其他模块需要进行token鉴权的,需要在微服务中引入pigx-common-security模块的依赖,从而间接引入相关的Spring security oauth2依赖…...

vue+element ui实现图片上传并拖拽进行图片排序
用到的技术栈: vue2element Uivue-dragging 如何使用: 第一步: 安装 npm install awe-dnd --save第二步: 引入 main.js 文件 // 引入组件 import VueDND from awe-dnd // 添加至全局 Vue.use(VueDND)具体项目代码 <el-form-item label"封面…...

国产服务器 BIOS下组建RADI不同RAID卡-超详细
国产服务器 长城 组建Raid的方法 说明 大多数国产服务器通用型服务器进入BIOS的都是按DEL键。 9361RAID卡组建方法 在服务器启动过程中,按下DEL键进入BIOS界面。 进入设备管理器,选择AVAGO MegaRAID页签。 3. 进入RAID卡设备,选择Main Me…...

UE4 4.21-4.27使用编辑器蓝图EditorBlueprint方法
在UE4 4.21中,编辑器蓝图(Editor Blueprint)是一个强大的工具,允许开发者扩展和自定义Unreal编辑器的功能。通过编辑器蓝图,我们可以创建自定义的工具和功能,以优化开发流程。 本教程将指导您如何在UE4 4.…...

105、Zero-1-to-3: Zero-shot One Image to 3D Object
简介 官网 使用合成数据集来学习相对摄像机视点的控制,这允许在指定的摄像机变换下生成相同对象的新图像,用于从单个图像进行三维重建的任务。 实现流程 输入图像 x ∈ R H W 3 x \in \R^{H \times W \times 3} x∈RHW3,所需视点的相…...

scala 安装和创建项目
Scala,一种可随您扩展的编程语言:从小型脚本到大型多平台应用程序。Scala不是Java的扩展,但它完全可以与Java互操作。在编译时,Scala文件将转换为Java字节码并在JVM(Java虚拟机)上运行。Scala被设计成面向对…...

Python办公自动化 – 自动化文本翻译和Oracle数据库操作
Python办公自动化 – 自动化文本翻译和Oracle数据库操作 以下是往期的文章目录,需要可以查看哦。 Python办公自动化 – Excel和Word的操作运用 Python办公自动化 – Python发送电子邮件和Outlook的集成 Python办公自动化 – 对PDF文档和PPT文档的处理 Python办公自…...

如何在Win10电脑接收苹果手机日程提醒呢?
有很多小伙伴手机使用的是iPhone苹果手机,但办公电脑使用的win10系统的电脑,这时候如果想要在win10电脑上同步接收苹果手机上设置的日程提醒,该怎么操作呢?如何在win10电脑接收苹果手机日程提醒呢? 如果你设置的日程提…...

227.【2023年华为OD机试真题(C卷)】小明找位置(二分查找-JavaPythonC++JS实现)
🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-小明找位置二.解题思路三.题解代码Python题解代…...

【现代密码学】笔记3.4-3.7--构造安全加密方案、CPA安全、CCA安全 《introduction to modern cryphtography》
【现代密码学】笔记3.4-3.7--构造安全加密方案、CPA安全、CCA安全 《introduction to modern cryphtography》 写在最前面私钥加密与伪随机性 第二部分流加密与CPA多重加密 CPA安全加密方案CPA安全实验、预言机访问(oracle access) 操作模式伪随机函数PR…...

服务器带宽有什么用? 带宽不足怎么办?
服务器带宽是指服务器能够接收和传输数据的速率,通常以每秒传输的数据量来衡量。它是支持特定应用服务器网络和因特网(Internet)访问的单一网络线路,对网络速度、响应时间、应用程序处理速度等方面都有影响。 服务器带宽有什么作…...

Alphafold2蛋白质结构预测AI工作站配置推荐
AlphaFold2计算特点 蛋白质三维结构预测是一项计算量非常巨大的任务,科学家多年的探索研究,形成了X射线晶体学法、核磁共振法、冷冻电镜等。 2021年底,谷歌的DeepMind团队的采用人工智能方法的AlphaFold2算法在生物界引起了极大的轰动…...

如何让ArcGIS Pro启动显示空白页面
刚接触ArcGIS Pro的你是否会觉得在操作上有那么一些不习惯,从一开始软件启动就发现和ArcGIS差距很大:丰富的欢迎页面,加上默认加载的地图让你眼花缭乱,这里教你如何去掉这些繁杂的内容,还你一个干净的启动页面。 跳过…...

超市账单管理系统产品数据新增Servlet实现
超市账单管理系统产品数据新增Servlet实现 package com.test.controller; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import ja…...

计算机组成原理之计算机硬件发展和计算机系统的组成
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…...

《JVM由浅入深学习【七】 2024-01-11》JVM由简入深学习提升分享
亲爱的读者们,欢迎来到本篇博客,这是JVM第七次分享,下面是七个JVM常用常面的分享,请笑纳 目录 1. 几个与JVM 内存相关的核心参数2.如何计算一个对象的大小3.堆为什么要分为新生代和老年代4.JVM堆的年轻代为什么要有两个 Survivor…...

Golang leetcode142 环形链表 暴力map 快慢指针法
文章目录 环形链表 leetcode142暴力遍历 map哈希记录快慢指针法 环形链表 leetcode142 该题目要求找到入环的第一个节点 我们可以通过map进行记录,没到新的节点查询是否经过原有节点 入环节点,上两个节点的next相同 若有入环节点,则一定能检…...

基于java,springboot的论旅游管理系统设计与实现
环境以及简介 基于java,springboot的论旅游管理系统设计与实现,Java项目,SpringBoot项目,含开发文档,源码,数据库以及ppt 源码下载 环境配置: 框架:springboot JDK版本:JDK1.8 服…...