Oracle Database 23c在简化开发、应对开发发力了,更多拥抱开发者方面的能力,真的是人惊讶,这几天也是参加Oracle官方组织的AI专家培训,受益非浅,在这里给大家分享一下通过 ORDS操作对外暴露Http Restful服务,达到以 JSON对象形式快速简便操作多张关系表的效果。
1.ORDS介绍
ORDS(Oracle REST 数据服务)是Oracle REST服务,它为以Oracle为中心的应用程序提供类似的标准化。它使具有SQL和其他数据库技能的开发人员能够构建对Oracle数据库的企业级数据访问PI。
当今的现代、最先进的应用程序开发人员希望使用这些API,并且确实越来越需要使用这些API来构建应用程序。这样我们可以通过安全、高性能的 HTTPS 访问 Oracle 数据库。
2.ORDS配置
1.下载ORDS,从这里下载最新版本的 ORDS:
http://www.oracle.com/technetwork/developer-tools/rest-data-services/downloads/index.html
2.解压缩ORDS安装包,解锁用户
ALTER USER ORDS_PUBLIC_USER IDENTIFIED BY OraPassword1 ACCOUNT UNLOCK;
3.创建目录以保存配置
4.编辑ORDS软件ords_params.properties文件,
并为您的安装设置适当的参数。
5.启动ORDS
./startup.sh
6: 验证ORDS是否启动成功
curl http://localhost:8080/ords
3.JSON 关系二元性
3.1 创建二元性视图
二元性视图底层是传统关系表,创建二元性视图时需声明二元性视图与底层关系表之间的关系
Duality View 只需要用 select语句来声明view与table之间的关系。
CREATE [ OR REPLACE ] [ [ NO ] FORCE ] [ EDITIONABLE | NONEDITIONABLE ]
JSON [ RELATIONAL ] DUALITY VIEW [ IF NOT EXISTS ] view_name AS
{ { SELECT object_gen_clause FROM root_table [ root_table_alias ]
[ table_tags_clause ] } | ( graphql_query_for_DV ) }
3.2 开启REST服务
DECLARE PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
ORDS.ENABLE_OBJECT(p_enabled => TRUE,
p_schema => 'USER0',
p_object => 'ORDER_DV',
p_object_type => 'VIEW',
p_object_alias => 'order_dv',
p_auto_rest_auth => FALSE);
commit;
END;
/
ORDER_DV为二元视图的名称
WITH INSERT UPDATE DELETE为操作的权限
3.3 操作二元性视图
它的地址前缀规则是
http://${ip}:${ords_port}/ords/${db_user}/${object_name}/
a) 普通查询
规则是http://${ip}:${ords_port}/ords/${db_user}/${object_name}/
b) 分页查询
curl -s 'http://localhost:8080/ords/<数据库用户名>/order_dv/?offset=1&limit=1' | jq .
c) 条件查询
规则是 http://${ip}:${ords_port}/ords/${db_user}/${object_name}/?q=${查询条件}
d)新增
在 Linux 命令行中,执行如下命令
curl -s -X POST 'http://localhost:8080/ords/<数据库用户名>/order_dv/' \
--header 'Content-Type: application/json' \
--data '{
"_id":"#####",
....
}'
d)更新
curl -s -X POST 'http://localhost:8080/ords/<数据库用户名>/order_dv/' \
--header 'Content-Type: application/json' \
--data '{
"_id":"#####",
"_metadata" : {"etag" : " #######"},
....
}'
这里也就是使用ETAG 提交,即可更新
e)删除
curl -s -X DELETE http://localhost:8080/ords/<数据库用户名>/order_dv/##### | jq .
4.原生JSON
Oracle23ai 中全新引入了NATIVE JSON 这个新的数据类型,在存储空间占用,数据访问效率,操作便利性方面都有长足的提升。 NATIVE JSON 相对于之前的Oracle数据库版本使
用 BLOB 类型来存储JSON,在空间节省方面有相当大的改善。
在这里给大家展示一个多值索引
基于多值函数的索引允许我们对存储在 JSON 数据类型中的
JSON 文档中的多个标量值进行索引。
这可以提高包含 JSON_EXISTS 条件的查询的性能。
create multivalue index t1_test on test t
(t.json_data.words.pages.number());
可以看到执行计划中使用了多值索引
5.总结
Oracle和JSON结合起来,可谓是真正的王炸啊,其实有很多的第三方开放平台,可以允许我们去调用他们的开放接口,相比来说,由Oracle Database 23ai代表用户管理文档级可串行性。大家可以继续使用简单的 HTTP PUT、POST 及 GET 操作,或者直接针对 Oracle Database 使用特定语言的 API,例如 Oracle SODA API 甚至 MongoDB API。有了 JSON Duality Views,“鱼与熊掌不可兼得”将彻底成为历史。