近期,甲骨文宣布推出了自主JSON数据库,这是一项新的云服务,专为寻求使用简单的NoSQL API的易于使用且具有成本效益的JSON数据库的开发人员而设计。自主JSON数据库提供 MongoDB的所有核心 功能以及 高性能,简单的弹性,完全的ACID支持和完整的SQL功能。

让我们了解 JSON
JSON非常流行:它最初是JavaScript对象的序列化格式,后来转移到Web应用程序的实际消息传递格式,已成为许多新应用程序(包括数据库层)的主要数据模型。

开发人员喜欢JSON, 因为它支持动态架构,因此使架构更改变得容易。开发人员不必使用表和列将数据标准化为固定的关系模式,而可以在进行应用程序更改时使用JSON文档来提高数据层的敏捷性。
我们使它易于使用
Oracle很早就确定了JSON的优点和要求:2014年,Oracle数据库提供了SQL / JSON 的第一个企业级实现,这是Oracle发起的开放标准,此标准已为许多人所采用。其他商业和开源数据库产品。

尽管SQL是用于分析或复杂报表的出色语言,但许多开发人员更喜欢一种更简单,更灵活的方式来与JSON数据进行交互。因此,Oracle 为常见的编程语言(包括Java,JavaScript和Python)添加了一个称为SODA(简单Oracle文档访问)的本地开源文档存储API 。使用JSON和SODA开发应用程序对于Oracle来说就像在NoSQL数据库(如MongoDB)中一样容易。
soda create cities;
soda insert cities {"name":"San Jose","population":1021795,"county":"Santa Clara"}
soda insert cities {"name":"Atlanta","population":506811,"county":["Fulton", "DeKalb"]}
soda get cities -f {"county":"Fulton"}
soda get cities -f {"population":{"$gte":1000000}}
通过今天宣布的自主JSON数据库,Oracle继续为JSON提供数据库创新,为JSON应用程序开发人员带来了所有的自主优势。
我们引领自治
一件很酷的事情是Oracle并未从头开始创建JSON云服务。自主JSON数据库建立在Oracle自主数据库的基础上。该服务可在数分钟内配置新数据库,可在不停机的情况下扩展和缩小数据库,在线修补数据库,通过时间点恢复进行自动备份,提供灾难恢复功能,并具有高级安全功能。自治数据库的目标是零管理,以便开发人员可以将更多时间花在其应用程序上,而花在建立和管理数据库上的时间更少。
我们为您提供自治云服务
自治JSON数据库以本地树形二进制格式存储JSON文档。这种本地JSON格式 已针对快速读取(避免线性扫描)和部分更新(减少重做/撤销日志大小)进行了高度优化。结果是一个不妥协的文档数据库,提供了低延迟的CRUD操作* 和 * 完全的ACID一致性 (包括多文档事务);用于应用程序开发的本机文档API,以及对应用程序的完整SQL支持;本机JSON存储* 和 *可伸缩的并行内存中查询优化。
自主JSON数据库提供了在不太成熟的NoSQL数据库中找不到的大量应用程序功能:
- 内置机器学习 算法,空间查询
- 先进的安全功能, 例如细粒度的访问控制
- 成熟的服务器端过程语言
- 完整的低代码开发 环境
- 没有时间或交易规模限制的ACID交易
- 简单快速的交叉收集联接和/或聚合
- 在整个JSON文件智能搜索索引
而且,这样的例子不胜枚举
IT负担得起…
自治JSON数据库非常便宜。该服务旨在为应用程序开发人员在Oracle上构建新的JSON应用程序,Oracle为开发人员提供了一个真正的机会,以极具竞争力的价格利用其自治数据库的所有功能。自主JSON数据库的 **成本比同类MongoDB Atlas低30%**配置:$ 2.74 / hr对比$ 3.95 / hr(M60层的专用群集与8个OCPU相比)。实际上,与MongoDB Atlas相比,自治JSON数据库的成本甚至更低,因为自治JSON数据库具有弹性并且不依赖固定的硬件形状-您可以为自治JSON数据库选择任意数量的CPU。自主JSON数据库的成本包括备份和与BI工具的简单连接-这都是MongoDB Atlas的额外成本项目。

Autonomous JSON数据库的高性能
与此相反,Autonomous JSON数据库的功能不会降低性能-相反:如果与MongoDB Atlas(与上面用于定价的设置相同)相比,Autonomous JSON数据库在不同的工作负载类型和集合大小下可为您提供2倍的吞吐量。MongoDB Atlas结果由MongoDB运行,并 使用行业标准 YCSB基准在此处发布 。

与M60
行业标准Yahoo云服务基准(YCSB)上的MongoDB Atlas相比,具有8个OCPU的自治JSON数据库
MongoDB结果的来源:https : //www.mongodb.com/atlas-vs-amazon-documentdb/性能截至8 / 12/2020
试一试!
您可以使用免费的 Oracle Cloud Trial帐户尝试新的自治JSON数据库:在此处注册
关于自治JSON数据库和Oracle Cloud Free Tier的快速说明:
自治JSON数据库是自治数据库家族的一部分。自主JSON数据库 与所有其他自主数据库服务共享自动化,生命周期管理,安全性,可用性,可伸缩性和弹性的所有核心功能。
如果要尝试在Oracle Cloud Free Tier上使用自主JSON数据库,则应从自主事务处理开始。当您准备扩展系统或投入生产时,可以将免费层的自动交易处理直接移至自动JSON数据库的付费版本。
如果您想知道免费版本的自主事务处理中是否可以使用某些功能来阻止您迁移到自主JSON数据库,答案为“否”。免费层的数据大小限制为20GB,并且类似情况,自治JSON数据库支持20GB的非JSON数据。
自治JSON和MONGODB ATLAS的比较
自治JSON数据库不仅比MongoDB Atlas便宜和快捷,而且还具有更多功能:

根据MongoDB文档的建议:link1,link2
如何开始使用AJD:逐步操作
登录到Oracle Cloud后,在左侧菜单中选择“自主JSON数据库”:

这将带您到此屏幕,按蓝色按钮创建数据库

给您的数据库起一个名字(和显示名),确保选中“ JSON”。

在同一屏幕上,您还需要提供一个“管理员”密码。记住它,您将需要它。

单击“创建自治数据库”,您将看到一个新实例正在配置。

此过程不应超过几分钟。屏幕刷新,您看到绿色的徽标-该服务可用
h
单击工具,然后选择“ SQL Developer Web”

在这里,您需要“管理员”密码。

现在,您有了一个Web控制台,可以在其中输入SQL和SODA命令。SODA代表“简单Oracle文档访问”,并为您提供了一个简单的文档存储界面,用于将JSON文档存储在集合中。“苏打水帮助”为您提供了苏打水命令的概述。

输入以下内容以创建集合“城市”并插入两个JSON文档。请注意,它们有些不同。第一条记录假定一个城市属于一个县。但是有些城市属于多个县。这就是第二份文档使用数组的原因。运行以下命令来创建集合并插入两个文档:
soda create cities;
soda insert cities {"name":"San Jose","population":1021795,"county":"Santa Clara"}
soda insert cities {"name":"Atlanta","population":506811,"county":["Fulton", "DeKalb"]}
现在,我们可以查询集合以查找符合搜索/过滤条件的文档。我们称此为“示例查询”或简称QBE。 第一个QBE在“富尔顿”县寻找城市:
soda get cities -f {"county":"Fulton"}

第二个QBE选择人口大于250000的所有城市。它选择两个文档。
soda get cities -f {"population":{"$gt":250000}}

在这些示例中,我们使用控制台输入SODA命令。通常,您将直接通过编程语言使用SODA。我们确实有适用于Java,JavaScript(nodeJS),Python,REST,Pl / Sql和ODPI-C的SODA驱动程序。
通过将JSON数据存储在Oracle数据库中,还可以使用SQL访问相同的数据。首先,让我们描述一下集合
describe cities;

可以看到,JSON集合由常规表支持。JSON数据以二进制表示形式存储,已针对快速读取和分段更新进行了优化。为了将其转换为JSON字符串,我们使用JSON_SERIALIZE。
select JSON_Serialize(JSON_Document) from cities;

使用JSON_Table可以取消嵌套JSON数据并将其投影到关系列和行。并不是说两个JSON文档会生成3行,因为一个城市有两个县。
select j.* from cities NESTED json_document
COLUMNS (name, population number,
NESTED county[*]
COLUMNS(countyName PATH '$')) j;

从关系表示回到JSON同样容易。我们要做的就是向查询添加一个(或多个)JSON生成函数。在下面的代码中,我们将生成一个包含所有城市名称的数组。
select JSON_ArrayAgg(c.json_document.name) from cities c;

作者:Beda Hammerschmidt
文章来源:https://blogs.oracle.com/jsondb/autonomous-json-database




