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

Oracle Cloud World 2022:数据技术拥抱现代化应用开发:对象、文档和关系型开发

甲骨文云技术 2022-10-25
832
北京时间2022年10月20日凌晨,在Oracle Cloud World 2022的《对象、文档和关系型开发的革新》演讲中,甲骨文关键任务数据库技术执行副总裁Juan Loaiza带领甲骨文高级副总裁Tirthankar Lahiri和高级总监Beda Hammerschmidt,介绍了Oracle Database 23c 中的一项标志性功能 - JSON Document Relational Duality。
这项突破性创新将JSON 文档和规范化关系的优势融合在一个数据库中,解决了应用程序使用数据方式与关系数据库存储数据方式之间的不匹配问题,帮助开发人员克服了在构建应用程序时所面临的挑战。
开发人员通常根据应用层语言对象来构建应用,遵循一个层次结构,其中有变量、引用、方法,而关系数据库将数据存储为表、行和列。构建单独的应用层对象通常需要访问多个表,因此应用程序使用数据与关系型数据库存储数据的方式非常不匹配。
为了弥合这种不匹配,过去曾经有很多的尝试,包括对象数据库、对象关系数据库、对象关系映射,以及使用JSON来存储数据的文档数据库。
在现在的Oracle数据库中,开发人员已经可以在同一个数据库中为特定数据选择JSON或者关系数据模型。
JSON模型很受开发人员欢迎,因为它们可以轻松检索和存储与应用层语言对象相对应的分层组织数据。在JSON模型下,允许应用程序将对象直接映射为分层 JSON 格式,从而避免分解或重构以及相关的复杂性。然而JSON模型作为一种存储格式时,重复存储效率低下,数据一致性不好,更新成本昂贵。因此,JSON模型是一种对开发人员友好的数据访问格式,使开发人员可以轻松上手,但作为数据存储格式却存在重大限制,尤其是在应用程序复杂性增加的情况下。
基于关系数据来建模和访问数据都非常灵活,它使用数据规范化来确保数据完整性,同时避免数据重复,是一种非常有效的数据存储格式。但是关系数据模型对开发人员来说并不总是容易的,开发人员依据用例来构建应用层对象,而关系数据库将数据存储为表、行和列,因此构建单独的应用层对象往往需要访问多个表。应用程序使用数据与关系模型存储数据的不匹配为应用构建带来难题。
这两种模式各有所长,那么能不能同时获得关系模型和JSON模型的优势呢?一方面具备关系数据模型的所有好处,包括用例灵活性、可查询性、一致性和空间效率,另一方面同时拥有JSON文档模型的优势,包括简单映射语言类型、敏捷模式开发、分层数据格式和标准交换格式。
这就是Oracle数据库23c的新特性JSON document Relational Duality致力引入的内容,它将数据以高效的规范化格式存储在关系表中,但应用程序以 JSON 文档的形式访问,从而在架构上兼得JSON的用例简单性和关系模型的多用例功能,将JSON和关系模型的优势融合在一个数据库中,而无需进行任何权衡。
在JSON document Relational Duality特性中,需要定义JSON Duality View来声明将关系数据组织成JSON文档的方法,在View中还可以指定JSON文档的哪些部分可以更新,哪些不能更新。
定义好JSON Duality View后,既可以使用 SQL来查询数据,也可以使用 SQL文档API来访问数据。开发人员可以使用他们常用的驱动程序、框架、工具和开发方法,以他们习惯的方式操作由 Duality Views 生成的 JSON 文档。
开发人员可以非常简单地使用JSON Duality View。从视图中获取文档后,进行任何需要的更改并将其放回视图中,数据库会自动检测所做的更改并修改基础行。任何其他共享相同数据的JSON Duality View都将立即反映这种变化,开发人员不再需要担心数据不一致的问题。对于开发人员的另一个好处是极大的灵活性,开发人员可以轻松构建以JSON文档为中心的应用程序,将JSON文档存储为关系数据,还可以将现有的关系数据作为JSON文档进行操作。
JSON Document Relational Duality实现了一种新的无锁并发协议。在此协议中,数据库会自动检测文档的基础数据在初始读取和后续写入之间是否发生变化,如果发生了变化,写入操作会被自动拒绝并返回错误,然后应用程序可以根据正确的数据重新进行更改。
Oracle Database 23c使用独特的基于数据的控制机制来实现无锁并发控制。ETag(Entity-Tag)在 HTTP 协议中用于网页内容的签名或指纹,而现在ETag概念从 HTTP 扩展到核心数据库,以实现无锁并发控制。
当发起GET时,数据库会根据获取的JSON文档底层数据自动计算 ETag,并将其插入返回的JSON文档本身。当修改后的JSON文档PUT回数据库时,数据库会验证JSON文档底层数据是否仍然与之前GET的 ETag匹配。如果行与 ETag匹配,则自动更新行。如果不匹配,说明另一个用户进行了更改,这次PUT 操作将被拒绝,然后可以使用新数据重新尝试PUT。
传统的基于锁或基于版本的并发控制协议必须锁定多个层次结构,这可能导致性能不佳和死锁。而ETag是基于数据计算的,因此无锁并发控制实际上是通过检查数据是否发生变化,而不是通过向数据添加锁或版本号来检测冲突更新。这是非常强大和灵活的机制,它会自动同步更新由许多不同JSON文档共享的数据,也会跨JSON文档和表工作,自动确保使用 SQL 的直接行更新和JSON文档更新之间的一致性。

        在这种机制下,任何SQL都可以更新数据行,而应用程序可以同时使用文档 API 来更新相同的数据,这是一个非常令人兴奋和独特的并发控制架构。

JSON Document Relational Duality为 Oracle 添加了许多新技术和新创新。
首先,开发人员可以将数据存储为关系数据,使用标准 SQL或者JSON Duality View访问相同的关系数据,进行数据读取和写入,并对数据操作进行出色的并发控制。
开发人员还可以将数据存储为JSON文档,然后通过JSON Data Guide在 JSON 列上创建视图进行访问,或者使用ANSII JSON扩展/SODA/MongoDB API来访问文档数据。
这一切最大的好处是开发人员可以为每个用例和每个开发阶段选择最佳存储格式和最佳访问格式,并获得关系数据和JSON文档的全部优势。
Juan Loaiza在最后回顾时谈到,JSON Document Relational Duality使得将应用程序对象作为 JSON 进行持久化和操作变得非常容易,弥合了JSON模型和关系模型之间的不匹配。它还使数据能够以表格或JSON文档的形式透明地读取或写入,从而可以用任何想要的方式来访问完全相同的数据。而在数据库核心深处实现的基于值的并发控制机制,确保了跨文档和表的数据一致性,让JSON Document Relational Duality真正成为现实。

对于喜欢使用JSON文档的开发人员,JSON Document Relational Duality提供了他们喜欢的 JSON 的用例简单性以及关系的用例可扩展性。开发人员现在可以为每个用例定义专门化的JSON文档,而不会导致数据重复和一致性问题。而且开发人员可以轻松地在现有关系数据上构建以JSON文档为中心的应用程序,并使用Oracle融合数据库的所有高级功能。
对于使用关系模型的开发人员, JSON Document Relational Duality是一种比 ORM 更有效、更集中、更简单且更一致的数据映射方式,它可以在一次调用数据库的过程中轻松访问用例所需的所有数据。使用关系模型的开发人员可以轻松创建以 SQL 为中心的应用程序,或者对使用以JSON文档为中心的应用程序创建的数据进行分析,为每个用例获得两者的所有好处。
最后,Juan Loaiza引用了Wikibo的Marc Staimer的观点:“在Oracle Database 23c中,JSON Relational Duality兼具关系模型与JSON文档模型的优势,结束了两者之间的长期争论。”他相信JSON Document Relational Duality不仅仅是 Oracle 的一个创新特性,这项技术将改变开发人员的使用方式,也将被业内许多其他产品采用。

11月22日,甲骨文云技术嘉年华将集中本地化的呈现甲骨文全球云大会(Oracle CloudWorld)精华内容给大家。届时,甲骨文中国高管和技术大咖将携手本地优秀客户和合作伙伴为您抽丝剥茧深度解读全球云大会中的前瞻技术成果、云战略布局、创新数据库、极简开发,及如何将客户复杂问题简单化的全球经验。

大咖云集,思想碰撞,一起来探索云端精彩实践。

  • 扫码提前关注甲骨文云技术嘉年华

  • 编辑:范宏伟


  • *活动最终解释权归甲骨文公司所有

文章转载自甲骨文云技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论