甲骨文发布 JSON Database,对标MongoDB

甲骨文于8月13日宣布推出了自主JSON数据库(Autonomous JSON Database,AJD)。这是一款全新的云服务,专为寻求简单易用、经济高效的JSON数据库和NoSQL API的开发人员而打造。AJD在MongoDB的核心功能的基础上,还提供了更高的性能、简单的弹性、全面的ACID支持以及完整的SQL功能。

JSON是潮流:从最初的JavaScript对象的序列化格式,到现在Web应用中信息传递的格式,JSON俨然已成为许多新兴应用(包括数据库层)的主要数据模型。

JSON

{ 
  "name":"San Jose",
  "population":1021795,
  "county":"Santa Clara"
}
 
{
  "name":"Atlanta",
  "population":506811,
  "county":["Fulton","DeKalb"]
}

开发人员对JSON的 热爱 是因为其对 动态模式 的支持,从而更容易进行 模式变更 。开发人员在进行应用变更时,可以使用JSON文档获得灵活的数据库层,而不必将数据规范化到固定的关系型模式中的表和列。

甲骨文很早便发现了JSON的好处和需求:2014年,甲骨文数据库交付了第一个 SQL/JSON 的企业级实现——这是由甲骨文发起的一个开放标准,在此之后又被许多其他的商业和开源数据库产品采用。

虽然在数据分析或复杂的报告上,SQL做的不错,但许多开发人员更喜欢与简便灵活的JSON数据交互。因此,甲骨文为主流编程语言(包括Java,JavaScript与Python)添加了 本地开源文档存储API ,称之为SODA(Simple Oracle Document Access,简单的甲骨文文档访问)。结束甲骨文使用JSON和SODA开发应用,就像是用NoSQL数据库MongoDB一样容易。

甲骨文一直在提供JSON数据库提供创新,而随着AJD的出现,JSON为应用开发人员带来了所有的自主优势。

有趣的是,甲骨文的JSON云服务并不是从零开始的。AJD是站在甲骨文自主数据库的肩膀上开发的。自主数据库服务可以在短短数分钟内配置新的数据库,可以不停机扩展或缩减应用程序,在线修补数据库,通过时间点恢复进行自动备份,提供灾难恢复功能,并且具有高级安全功能。自主数据库的目标是 零管理 ,这样开发人员就可以减少在建立和管理数据库上花费的时间,将更多的时间投入在其他应用程序上。

提供自主云服务

自主JSON数据库以原生树状二进制的格式存储JSON文档。这种 原生JSON格式 经过高度优化,可以实现快速读取(避免线性扫描)和部分更新(减少重做/回滚日志大小)。其最终是一个文档数据库,可提供低延迟CRUD操作以及包括多文档在内的 完整ACID一致性 ;用于应用开发的原生文档API以及针对应用的完整SQL支持;原生JSON存储以及可扩展的、并行的、在内存中的查询优化。

自主JSON数据库提供丰富的应用功能,这些在不成熟的NoSQL数据库中尚不具备:

  • 内置 机器学习 算法、 空间 查询
  • 先进的安全功能 ,诸如精细的访问控制
  • 成熟的 服务器端程序语言
  • 完整的 低代码开发 环境
  • ACID事务无时间或事务大小限制
  • 简单快捷的跨集合join和/或aggregations
  • 对JSON文档进行全文智能搜索索引

等等一系列优势。

低成本

AJD的成本出乎意料的低。AJD让应用开发人员能在甲骨文上搭建新的JSON应用,而甲骨文则让开发人员能够以极具竞争力的价格使用自主数据库的所有功能。在相同配置(M60的专用集群与8 OCPU)下,AJD的成本比其竞争者MongoDB云数据库要低30%,两者分别为$2.74/小时和$3.95/小时。实际上,AJD可能要比MongoDB云数据库花销更低,因为AJD是弹性的,不依赖于固定的硬件,这意味着你可以为AJD选择任何数量的CPU。AJD的成本包括了备份和简单BI工具连接,这两项在MongoDB云数据库中都属于额外成本。

可扩展

AJD的新功能不会带来性能上的损失,相反,与同样价格配置下的MongoDB云数据库相比,AJD可以在不同的工作负载类型和集合大小下,持续提供两倍的吞吐量。MongoDB云数据库的结果是由MongoDB运行,根据行业标准YCSB发布于此

8 OCPU自主JSON数据库对比M60上MongoDB云服务

工业标准雅虎云服务标准(YCSB)

MongoDB数据来源:https://www.mongodb.com/atlas-vs-amazon-documentdb/performance,于2020/8/12获取

自主JSON数据库和甲骨文云免费套餐的简短说明

AJD是甲骨文自主数据库家族的一部分。AJD拥有其他自主数据库服务的所有核心功能,包括生命周期管理、安全性、可用性、可伸缩性,以及弹性。

如果你想要通过甲骨文免费套餐尝试下自主JSON数据库,那么建议你从自主事务处理(Autonomous Transaction Processing)开始。当你准备扩展系统或投入生产时,你可以直接将免费套餐中的自主事务处理直接转移到付费版本的自主JSON数据库。

如果你担心免费版的自主事务处理中某些功能是否会影响到你迁移到自主JSON数据库的话,答案是否定的。免费版中的数据大小的限制是20G,而AJD同样支持20G的非JSON数据。

自主JSON和MongoDB云数据库的对比

AJD不仅在价格和速度上优于MongoDB,在其他方面也具有优势:

自主JSON数据库(AJD) MongoDB云数据库
最大文件大小 32 MB 16 MB
文件最大嵌套深度 1024 层 100 层
每个集合的索引 无限制 64
复合索引字段 无限制 32
全文档索引 JSON搜索索引 ×
服务器端功能 函数、过程、触发器 不推荐*
多文档事务 ACID 仅通过指定API调用请求才有ACID
事务时长 无限制 默认60秒
事务大小 无限制 最大1000个文档*
聚合数据大小 无限制 100 MB RAM + 指定allowDiskUse参数
无服务器自动缩放 ×
通过SQL访问JSON文档 ×
综合安全性(例如:虚拟专用数据库,数据编辑,自定义数据库角色) ×
最低价格 $2.74/小时 $3.95/小时

*MongoDB文档建议:链接1链接2

AJD的新手教程

登录到甲骨文云后,在左侧菜单栏选择“Autonomous JSON Database”:

然后在下面这个页面,点击蓝色按钮创建数据库:

为数据库命名(包括显示名称),确认选中了“JSON”。

在同一个界面,填写“admin”密码,后面会用到。

点击“Create Autonomous Database’”,然后就能看到正在配置一个新的数据库实例。

这个过程应该不过几分钟,等到页面刷新后你会看到一个绿色的图标,告诉你服务已经可用了。

点击“Tools”,选择“SQL Developer Web”。

输入刚才设置的“admin”密码。

然后会出现一个Web控制台,可以在其中输入SQL和SODA命令。SODA全称是Simple Oracle Document Access(甲骨文简单文档访问),提供简单的JSON文档储存界面。输入“soda help”可以查看soda命令概述。

输入下列命令创建‘cities’集合,并插入两个JSON文档。注意这两者之间的区别:前者默认city属于一个country,但后者city可以属于多个country,这也是为什么后者会使用数组表示。

SQL

soda create cities;
soda insert cities {"name":"San Jose","population":1021795,"county":"Santa Clara"}
soda insert cities {"name":"Atlanta","population":506811,"county":["Fulton", "DeKalb"]}

现在,我们可以使用查询搜索符合筛选条件的文档,这一步叫“Query By Example”,或简称QBE。首先用QBE查找country为“Fulton”的city:

SQL

soda get cities -f {"county":"Fulton"}   

然后用QBE选择两个文档中所有人口大于250,000的city。

SQL

soda get cities -f {"population":{"$gt":250000}}

这里我们都是使用控制台输入SODA命令,但一般情况下我们都会直接用编程语言直接运行SODA命令。甲骨文为Java,JavaScript(nodeJS),Python,REST,PI/Sql以及ODPI-C提供SODA驱动。

我们还可以通过SQL来访问存储在甲骨文数据库的JSON数据。首先,创建如下city的集合:

可以看到,JSON集合是由常规表支持, 而JSON数据则是以二进制的表现形式存储,这种优化是为了快速的读取和分段更新。如果想将其转换为JSON字符串,那么可以用JSON_SERIALIZE。

SQL

select JSON_Serialize(JSON_Document) from cities;

JSON_Table可以拆开嵌套JSON数据,并将其映射到关系列和行。注意,这里两个JSON文档会生成三行数据,这是因为其中一个city有两个country。

SQL

select j.* from cities NESTED json_document 
    COLUMNS (name, population number, 
    NESTED county[*] 
    COLUMNS(countyName PATH '$')) j; 

从关系表转换回JSON也很容易。只需要将JSON生成函数添加到查询。下面的代码生成一个包含所有city名称的数组。

SQL

select JSON_ArrayAgg(c.json_document.name) from cities c;

原文链接

https://blogs.oracle.com/jsondb/autonomous-json-database/comment-submitted?cid=82843da7-d065-45df-acfd-dea5656634e3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章