语言
<< 返回文章列表

Oracle 20c 新特性:原生的 JSON 数据类型(Native JSON Datatype)

2020年5月8日
eygle
218

墨天轮原文链接:https://www.modb.pro/db/24543


Oracle 在 12c(12.1.0.2)版本中引入了对JSON的支持,允许将JSON存储在数据库中的varchar2或LOB(CLOB或BLOB)中。这意味着,我们可以利用无模式设计模型所提供的灵活性来构建应用程序,但又能从Oracle数据库的强大功能中受益。


早期版本中创建包含 JSON 对象的表,类似:

CREATE TABLE theater
(
  theater_id    VARCHAR2(255),
  json_document BLOB

);

对于 BLOB 类型的插入,需要对数据进行转换:

INSERT INTO theaters (theater_name, json_document) VALUES ('Century_16_Redwood',
 utl_raw.cast_to_raw('{"id":1,
   "name":"Century 16",
   "location":{"street":"Main St",
               "city":"Redwood",
               "zipCode":"94607",
               "state":"CA",
               "phoneNumber":null
            }
            }')
);

Oracle 的 JSON 支持,使得我们可以使用标准SQL查询JSON文档,也可以利用高级分析功能,对单个属性或整个文档进行索引,并行处理数十亿个JSON文档,云和恩墨的部分客户已经在 12.1 版本时采用了这个特性,使得数据库支持 NoSQL 上更加丰富灵活。


Oracle 还提供了一些工具来发现JSON文档是由哪些属性组成的,并在集合之上创建关系视图。开发人员还可以通过使用Java、Node.js、Python、C语言和REST的SODA API来访问Oracle数据库,你甚至可以将Oracle 数据库视为一个 NoSQL数据库。

JSON 是 Oracle 多模化支持的一个重要演进。


在Oracle数据库20c中,通过提供一个 Native 数据类型 "JSON ",继续加强和改进了 Oracle 对JSON的支持。

PIC 12.jpg


使用原生的数据类型,在读取或更新操作时不必对JSON进行解析,而只在插入时才进行解析,然后JSON以内部二进制格式保存,这使得访问速度更快。这可以使读取和更新操作的速度提高4到5倍,更新到非常大的JSON文档的速度提高20到30倍。


现在创建一个包含 JSON 类型的数据表类似:

CREATE TABLE j_order (
  id INTEGER PRIMARY KEY,
  po_doc JSON )


新的数据类型并不是Oracle数据库20c中为JSON引入的唯一变化,Oracle还增加了一个新的JSON函数JSON_TRANSFORM,它使得在一次操作中更新和删除文档中的多个属性变得更加简单。


参考链接:JSON_TRANSFORM