暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

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

原创 胖头鱼的鱼缸 2024-12-14
193

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

数据库管理-第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。 除授权转载并标明出处外,均为“非法”抄袭

演示文稿1_01.png
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_id products @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.zip mkdir conf/ echo -e 'export PATH="$PATH:/home/oracle/ords/bin"' >> ~/.bash_profile echo -e 'export ORDS_CONFIG=/home/oracle/ords/conf' >> ~/.bash_profile ords 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

image.png
这里会输出一些启动日志,包括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; BEGIN ORDS.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关系二元性视图中,连接字符串可以根据ORDS的启动日志获取,连接过程非常丝滑。
image.png
image.png
由于前面已经使用CURL操作过,这里就不再使用MongoDB Compass进行操作演示了。

总结

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

最后修改时间:2024-12-16 10:07:59
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论