数据库管理-第271期 Oracle 23ai:用MongoDB的方式来操作JSON二元性(20241214)

数据库管理271期 2024-12-14

  • 数据库管理-第271期 Oracle 23ai:用MongoDB的方式来操作JSON二元性(20241214)
    • 1 初始化数据
      • 1.1 创建用户
      • 1.2 导入数据
      • 1.3 创建JSON关系二元性视图
    • 2 创建ORDS服务
      • 2.1 下载JDK17
      • 2.2 安装ORDS
      • 2.3 启用MongoDB API
      • 2.4 启动ORDS
      • 2.5 创建ORDS服务
    • 3 CURL操作JSON关系二元性视图
      • 3.1 简单查询
      • 3.2 复杂查询
      • 3.3 基于_id查询
      • 3.4 插入数据
      • 3.5 修改数据
      • 3.6 删除操作
    • 4 MongoDB客户端操作JSON关系二元性视图
    • 总结

数据库管理-第271期 Oracle 23ai:用MongoDB的方式来操作JSON二元性(20241214)

作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database
PostgreSQL ACE Partner
10年数据库行业经验
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP,ITPUB认证专家,数盟会长老会成员,OCM讲师,PolarDB开源社区、青学会MOP社区技术顾问,HaloDB外聘技术顾问,OceanBase观察团成员
圈内拥有“总监”称号,非著名社恐(社交恐怖分子)
公众号:胖头鱼的鱼缸;CSDN:胖头鱼的鱼缸(尹海文);墨天轮:胖头鱼的鱼缸;ITPUB:yhw1809。
除授权转载并标明出处外,均为“非法”抄袭

JSON关系二元性视图是Oracle 23c/23ai引入的一个非常厉害的新特性(具体可以查看第184和185期),本期使用的数据也是源自于184、185期,使用curl来操作JSON关系二元性视图

1 初始化数据

和270期对AI的数据库一致,数据库基本连接信息为:10.10.10.31:1521/pdbprod1(PDB)。

1.1 创建用户

alter session set container=pdbprod1;
create user mongo identified by mongo;
grant DB_DEVELOPER_ROLE to mongo;
alter user mongo default tablespace users quota unlimited on users;

1.2 导入数据

conn mongo/mongo@10.10.10.31:1521/pdbprod1
--建表语句和数据插入详见184、185期

1.3 创建JSON关系二元性视图

这里只创建订单维度的视图:

CREATE or REPLACE JSON DUALITY VIEW orders_jdv AS
orders @insert @update @delete
{_id          : order_id,ordertime    : order_time,customers @unnest @insert @update{cid        : customer_id,customer   : customer_name},details      : order_details @insert @update @delete[ {subid       : sub_idproducts @insert @update{pn        : product_id,pname     : product_name,price     : price_number,       product_type @unnest @insert @update{typeid  : type_id,type    : type_name}}} ]
};

image.png

2 创建ORDS服务

Oracle REST Data Services (ORDS) 让您的Oracle数据库启用HTTPS功能。作为一个中间层Java应用,ORDS提供了数据库管理REST API、SQL Developer Web、PL/SQL网关和适用于REST的SODA,并且支持发布RESTful Web服务,可与Oracle数据库中的数据和存储过程进行交互。这里也是用ORDS服务来对接JSON关系二元性视图。

2.1 下载JDK17

JDK17下载地址(使用JDK 17.0.12):https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html

tar -xvf jdk-17.0.12_linux-x64_bin.tar.gz
echo -e 'export JAVA_HOME=/home/oracle/jdk-17.0.12' >> ~/.bash_profile

2.2 安装ORDS

ORDS下载地址为(使用最新版24.4):https://www.oracle.com/cn/database/sqldeveloper/technologies/db-actions/download/

mkdir ords/
mv ords-latest.zip ords/
cd ords/
unzip ords-latest.zipmkdir conf/echo -e 'export PATH="$PATH:/home/oracle/ords/bin"' >> ~/.bash_profile
echo -e 'export ORDS_CONFIG=/home/oracle/ords/conf' >> ~/.bash_profileords install

需要数据库的相关信息:
image.png
这时会启动ORDS,Ctrl+C终止即可:
image.png

2.3 启用MongoDB API

ords config set mongo.enabled true
ords config set mongo.tls false

2.4 启动ORDS

ords serve

在这里插入图片描述

这里会输出一些启动日志,包括REST API的端口,以及MongoDB客户端连接到数据库的字符串。

2.5 创建ORDS服务

grant soda_app to mongo;
conn mongo/mongo@10.10.10.31:1521/pdbprod1
exec ords.enable_schema;DECLARE PRAGMA AUTONOMOUS_TRANSACTION;
BEGINORDS.ENABLE_OBJECT(p_enabled => TRUE,p_schema => 'MONGO',p_object => 'ORDERS_JDV',p_object_type => 'VIEW',p_object_alias => 'orders_jdv',p_auto_rest_auth => FALSE);commit;
END;
/ 

image.png

3 CURL操作JSON关系二元性视图

ORDS启动后,根据启动日志可以看到可以通过8080端口使用REST API操作JSON二元性视图。

3.1 简单查询

curl -s http://10.10.10.31:8080/ords/mongo/orders_jdv/ | jq .

image.png

curl -s 'http://10.10.10.31:8080/ords/mongo/orders_jdv/?offset=3&limit=1' | jq .

image.png

3.2 复杂查询

curl -s --globoff 'http://10.10.10.31:8080/ords/mongo/orders_jdv/?filter={"details":"$elemMatch":{{"products.pname":"pork"}}}' | jq .

这里可以查出带有Pork为商品的订单(这里不全截图了):
image.png
image.png

3.3 基于_id查询

curl -s http://10.10.10.31:8080/ords/mongo/orders_jdv/12345681 | jq .

image.png

3.4 插入数据

curl -s -X POST 'http://10.10.10.31:8080/ords/mongo/orders_jdv/' \
--header 'Content-Type: application/json' \
--data '{"_id": "123456786", "ordertime": "2024-12-13T13:33:33", "cid": "345678", "customer": "Haiwen","details": [{"subid": 21,"products": {"pn": 98765,"pname": "Laptop mode A","price": 2000,"typeid": 1234,"type": "computer"}},{"subid": 22,"products": {"pn": 87654,"pname": "CD A","price": 40,"typeid": 2345,"type": "music"}}]
}' | jq .

image.png
image.png
在关系表中也能查询到相关数据:
image.png

3.5 修改数据

curl -s -X PUT 'http://10.10.10.31:8080/ords/mongo/orders_jdv/123456786' \
--header 'Content-Type: application/json' \
--data '{"_id": "123456786", "_metadata" : {"etag" : "5F43B20AECD5EFF7CF022352530E3C75"},"ordertime": "2024-12-11T13:33:33", "cid": "345678", "customer": "Haiwen","details": [{"subid": 21,"products": {"pn": 76543,"pname": "Pork","price": 15,"typeid": 3456,"type": "food"}},{"subid": 22,"products": {"pn": 65432,"pname": "Oracle 23ai Document","price": 100,"typeid": 4567,"type": "book"}}]
}' | jq .

image.png
image.png
在关系表中也能查询到数据已变更:
image.png

3.6 删除操作

curl -s -X DELETE http://10.10.10.31:8080/ords/mongo/orders_jdv/123456786 | jq .

image.png
关系表中相关数据已删除:
image.png

4 MongoDB客户端操作JSON关系二元性视图

可以使用MongoDB官方提供的MongoDB Compass直接连接到Oracle 23ai的JSON关系二元性视图中。
image.png
image.png
由于前面已经使用CURL操作过,这里就不再使用MongoDB Compass进行操作演示了,连接字符串可以根据ORDS的启动日志获取,连接过程非常丝滑。

总结

本期演示了用使用MongoDB的方式来操作Oracle 23ai JSON关系二元性视图。
老规矩,知道写了些啥。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/491550.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024 年的科技趋势

2024 年在科技领域有着诸多重大进展与突破。从人工智能、量子计算到基因组医学、可再生能源以及新兴技术重塑了众多行业。随着元宇宙等趋势的兴起以及太空探索取得的进步,未来在接下来的岁月里有望继续取得进展与突破。让我们来探讨一下定义 2024 年的一些关键趋势&…

WPF+MVVM案例实战与特效(三十八)- 封装一个自定义的数字滚动显示控件

文章目录 1、运行效果2、案例实现1、功能设计2、页面布局3、控件使用4、运行效果3、拓展:多数字自定义控件1、控件应用4、总结1、运行效果 在Windows Presentation Foundation (WPF)应用程序中,自定义控件允许开发者创建具有特定功能和外观的独特UI元素。本博客将介绍一个名…

ElasticSearch的自动补全功能(拼音分词器、自定义分词器、DSL实现自动补全查询、RestAPI实现自动补全查询)

文章目录 1. 什么是自动补全2. 拼音分词器2.1 初识拼音分词器2.2 下载拼音分词器2.3 安装拼音分词器2.4 测试拼音分词器 3. 自定义分词器3.1 拼音分词器存在的问题3.2 分词器(analyzer)的组成3.3 如何自定义分词器3.4 拼音分词器的可选参数3.5 配置自定义…

八股—Java基础(二)

目录 一. 面向对象 1. 面向对象和面向过程的区别? 2. 面向对象三大特性 3. Java语言是如何实现多态的? 4. 重载(Overload)和重写(Override)的区别是什么? 5. 重载的方法能否根据返回值类…

Java-08

类的抽象是将类的实现和使用分离, 而类的封装是将实现的细节封装起来并且对用户隐藏,用户只需会用就行。 类的合约指的是从类外可以访问的方法和数据域的集合以及与其这些成员如何行为的描述 isAlive()方法的返回值类型为布尔型(Boolean)。这个方法用于…

【MATLAB第109期】基于MATLAB的带置信区间的RSA区域敏感性分析方法,无目标函数

【MATLAB第108期】基于MATLAB的带置信区间的RSA区域敏感性分析方法,无目标函数 参考第64期文章【MATLAB第64期】【保姆级教程】基于MATLAB的SOBOL全局敏感性分析模型运用(含无目标函数,考虑代理模型) 创新点: 1、采…

机器视觉与OpenCV--01篇

计算机眼中的图像 像素 像素是图像的基本单位,每个像素存储着图像的颜色、亮度或者其他特征,一张图片就是由若干个像素组成的。 RGB 在计算机中,RGB三种颜色被称为RGB三通道,且每个通道的取值都是0到255之间。 计算机中图像的…

[数据结构#2] 图(1) | 概念 | 邻接矩阵 | 邻接表 | 模拟

图是由顶点集合及顶点间的关系(边)组成的数据结构,可用 G ( V , E ) G(V,E) G(V,E)表示,其中: 顶点集合 V V V: V { x ∣ x ∈ 某数据对象集 } V\{x|x\in\text{某数据对象集}\} V{x∣x∈某数据对象集},…

自动驾驶---小米汽车智驾进展

1 背景 小米汽车的进度,可能出乎很多人的意料,其它新势力车企花了5---10年的时间,小米汽车三年就成功造出了第一辆车,在小米su7月销2万的同时,获得了非常不错的口碑。笔者在之前的博客《微自传系列---雷军》中已经阐述…

IOTIQS100芯片, TCP 发送数据+NSOSD,data要是hex16进制转换方法

命令:data以十六进制字符串格式发送的数据。 方法 代码 sprintf(temp, "%02X", data[i]);:将当前字节转换为两位宽的大写十六进制字符,并存储在 temp 中。如果需要小写字母,可以将格式说明符改为 "%02x"。 …

3.metagpt中的软件公司智能体 (Architect 角色)

目录 基础流程1. WriteDesign 动作类2. Architect 角色类3. 流程说明:4. Mermaid图:总结: 代码1. WriteDesign类2. Architect角色3. 上下文,即数据结构4. 数据准备4. 初次编写5. 重写 基础流程 用于管理软件开发任务的系统的一部…

虚幻引擎NPR角色渲染

VRM4U导入 VRM4U插件 安装插件后需在项目设置勾选settings,就可以把VRM格式导入拖拽进UE 专业模型创作分享社区_模之屋_PlayBox 重定向 导入的骨骼和小白人Mannequin的骨骼会显示incompatible,需要用IK_Mannequin跟小白人的IK_Mannequin做retarget。 这边注意如果…

LabVIEW汽车综合参数测量

系统基于LabVIEW虚拟仪器技术,专为汽车带轮生产中的质量控制而设计,自动化测量和检测带轮的关键参数。系统采用PCIe-6320数据采集卡与精密传感器结合,能够对带轮的直径、厚度等多个参数进行高精度测量,并通过比较测量法判定产品合…

基于matlab的单目相机标定

链接: 单目相机标定(使用Matlab) 用Matlab对单目相机参数的标定步骤(保姆级教程) 1.准备代码 调用摄像头代码(用于测试摄像头是否可用): #https://blog.csdn.net/qq_37759113/art…

景联文科技入选中国信通院发布的“人工智能数据标注产业图谱”

近日,由中国信息通信研究院、中国人工智能产业发展联盟牵头,联合中国电信集团、沈阳市数据局、保定高新区等70多家单位编制完成并发布《人工智能数据标注产业图谱》。景联文科技作为人工智能产业关键环节的代表企业,入选图谱中技术服务板块。…

实景视频与模型叠加融合?

[视频GIS系列]无人机视频与与实景模型进行实时融合_无人机视频融合-CSDN博客文章浏览阅读1.5k次,点赞28次,收藏14次。将无人机视频与实景模型进行实时融合是一个涉及多个技术领域的复杂过程,主要包括无人机视频采集、实景模型构建、视频与模型…

[SAP ABAP] 将内表数据转换为HTML格式

从sflight数据库表中检索航班信息,并将这些信息转换成HTML格式,然后下载或显示在前端 开发步骤 ① 自定义一个数据类型 ty_sflight 来存储航班信息 ② 声明内表和工作区变量,用于存储表头、字段、HTML内容和航班详细信息以及创建字段目录lt…

EMQX 可观测性最佳实践

EMQX 介绍 EMQX 是一款开源、高度可伸缩、高可用的分布式 MQTT 消息服务器,同时也支持 CoAP/LwM2M 等一站式 IoT 协议接入。以下是 EMQX 的一些主要特点和功能: 海量连接与高并发:EMQX 能够处理千万级别的并发客户端,支持大规模…

Spark优化----Spark 性能调优

目录 常规性能调优 常规性能调优一:最优资源配置 常规性能调优二:RDD 优化 RDD 复用 RDD 持久化 RDD 尽可能早的 filter 操作 常规性能调优三:并行度调节 常规性能调优四:广播大变量 常规性能调优五:Kryo 序列化 常规性…

【zlm】 webrtc源码讲解三(总结)

目录 setsdp onwrite ​编辑 play 参考 setsdp onwrite play 参考 【zlm】 webrtc源码讲解_zlm webrtc-CSDN博客 【zlm】 webrtc源码讲解(二)_webrtc 源码-CSDN博客