高效支持JSON文档的分段更新制造技术

技术编号:33628031 阅读:85 留言:0更新日期:2022-06-02 01:19
本文是可以更新、删除和插入JSON文档部分的数据库语句对JSON文档片段的细粒度更新。在实施例中,计算机接收指定以压缩格式存储在永久性存储装置中的JSON文档的修改的请求。该修改向JSON文档添加附加内容,和/或用大小与旧值不同的新值替换JSON文档中的旧值。该修改被记录在变更日志中。变更日志最终被应用于永久性存储装置中的JSON文档的压缩格式,而不完全重写永久性存储装置中的JSON文档的压缩格式。重写永久性存储装置中的JSON文档的压缩格式。重写永久性存储装置中的JSON文档的压缩格式。

【技术实现步骤摘要】
【国外来华专利技术】高效支持JSON文档的分段更新


[0001]本公开涉及对以压缩格式存储在永久性存储装置中的JavaScript对象标记(JSON)文档的修改。本文的技术通过避免完全重写永久性存储装置中的JSON文档的压缩格式来加速对永久性存储装置中的JSON文档的压缩格式的修改。

技术介绍

[0002]作为一种精简的半结构化数据格式,JavaScript对象标记(JSON)因支持基于结构化查询语言(SQL)的关系数据库管理系统(RDBMS)和/或非SQL风格的文档对象储存库(Dcoument Object Store)中存储的JSON文档的无模式敏捷风格的应用程序开发而广受欢迎。在这样的数据应用模型中,JSON对象成为文档检索、查询和更新的单元,以支持微服务的在线事务处理(OLTP)。然而,与关系模型中的更新(其中单个更新粒度可以是每列级别)相比,即使在功能上只需要更新JSON文档的单个字段,键

值非SQL风格的储存库可能也必须整体更新JSON文档。
[0003]当JSON文档被存储为JSON文本时,除了执行完全文档替换之外,在存储级别上可以执行的优化不多,除非所需的更改非常小,以至于更新引擎可以将JSON文本解析器字符位置与所需的更改精确匹配。通常不会尝试对JSON文本存储进行这种更新优化,因为这样的交错JSON文本解析器和更新引擎需要大量的设计工作,却只提供很小的改进,因为精确的文本更新大小匹配并不经常发生。
[0004]一种业界流行的二进制格式是来自MongoDB的BSON。当新内容完全适应于原始内容时,它可以支持有限的部分更新(基本上与适用于JSON文本的限制相同)。例如,由于新旧内容完全适应,因此可以通过部分更新将标量字符串值从

ZHEN

替换为

CHEN

;但是,不能通过部分更新将

ZHEN

更新为

ZHENG

。MySQL的二进制JSON设计也有类似的限制。
[0005]文件系统实现可能足够复杂,以支持在存储JSON文档的文件的中间删除和插入,那么二进制部分更新在某种程度上对于诸如BSON的JSON编码可能是可行的。然而,这种复杂的文件系统实现必须在内部支持额外的簿记层(bookkeeping layer),该簿记层将文件中的逻辑字节偏移映射到其物理偏移。这不可避免地会给文件系统的设计带来额外的性能成本负担。
[0006]用户别无选择,只能使用JSON文档对象模型(DOM)应用编程接口(API)来程序化地遍历和更新JSON文档。虽然这种分段更新在功能上起作用,但在存储级别上有效地支持它们并没有得到充分的解决。典型供应商的实现最终会完全替换JSON文档,即使在逻辑上更新只需要对JSON文档执行很小的更改。当JSON文档的大小勉强达到兆字节或数十千字节时,这会成为一个性能问题。从事务日志的角度来看,完全JSON文档更新特别昂贵,因为它需要与更新后的完全JSON文档的大小成比例的变更日志大小。变更日志不仅会影响数据操作语言(DML)的性能,还会影响依赖于变更日志的复制性能和其他功能。
[0007]本节所述的办法是可以采取的办法,但不一定是以前设想或采取的办法。因此,除非另有说明,否则不应假定本节中描述的任何方法仅因其包含在本节中而有资格成为现有
技术。
附图说明
[0008]在附图中:
[0009]图1是描绘通过避免完全重写永久性JSON文档来加速对永久性JSON文档的修改的示例计算机的框图;
[0010]图2是描绘通过避免完全重写永久性JSON文档来加速对永久性JSON文档的修改的示例计算机过程的流程图;
[0011]图3是描绘将变更日志应用于JSON文档的压缩格式并避免完全重写压缩格式的示例计算机过程的流程图;
[0012]图4是描绘管理JSON文档的压缩格式的变更日志的生命周期的示例计算机过程的流程图;
[0013]图5是描绘将JSON文档的压缩格式存储在数据库的关系表中的示例计算机过程的流程图;
[0014]图6是示出可在其上实现本专利技术实施例的计算机系统的框图;
[0015]图7是示出可用于控制计算系统的操作的基本软件系统的框图。
具体实施方式
[0016]在下面的描述中,出于解释的目的,为了提供对本公开的(多个)示例实施例的透彻理解,提出了许多具体细节。然而,将明白,可以在没有这些具体细节的情况下实施(多个)示例实施例。在其他情况下,公知的结构和设备以框图的形式示出,以避免不必要地模糊(多个)示例实施例。
[0017]一般概述
[0018]本文是一种文档对象储存库,其经由声明性语言应用编程接口(API)提供对多个(多个)JavaScript对象标记(JSON)文档片段的细粒度更新。这里,保存JSON文档的关系数据库管理系统(RDBMS)还通过结构化查询语言(SQL)功能提供对JSON文档的分段更新。这类SQL函数通常可以通过SQL/JSON表达式和路径语言以声明性方式更新、删除和插入JSON文档的一部分。可以有多个这样的SQL函数,每个SQL函数执行一种JSON更新功能。例如,JSON_MERGEPATCH()和JSON_TRANSFORM()是能够通过一个函数调用以声明方式执行一系列更改的SQL可调用函数。
[0019]与要求用户使用JSON文档对象模型(DOM)API对JSON文档进行程序化遍历和更新相比,使用SQL函数进行分段JSON更新更加用户友好,也更符合人体工程学。这里实现的理想目标是变更日志大小与JSON文档的实际分段更改成比例。这里对变更日志的加速访问提高了以下性能:a)数据操纵语言(DML)操作,b)复制,以及c)依赖于变更日志的其他特征。
[0020]当JSON文档以二进制格式保存时,通过设计可修改的二进制格式来平衡提供快速查询和在二进制格式中启用部分更新的需求,就有很好的机会高效地执行分段更新。Oracle的OSON二进制格式在新内容不完全适应于OSON文档的原始字节内容的许多情况下执行部分更新。本文提出的方法是为像OSON这样的二进制格式设计的,以便在物理级别支持许多分段更新,使得变更日志大小与JSON文档的实际所需分段更改成比例。这些方法可
以检测在OSON上需要大量更改(来自过去的累积更改和执行当前更新操作的更改)的情况,使得OSON文档通过在适当时生成新的更紧凑的文档来自主地重新组织自身。OSON设计遵循JSON是树模型的逻辑概念,并因此提供基于本机树偏移的跳转导航,使得其能够自然地支持物理OSON字节级别的部分更新,如相关美国专利10,262,012中所提出的。此外,在实施例中,这里的OSON部分更新设计仅需要能够在文件内寻找特定偏移以进行字节长度的保留内容替换或将字节追加到文件末尾以便生长的标准文件系统,例如Unix/POSIX文件系统API。底层文件系统不需本文档来自技高网
...

【技术保护点】

【技术特征摘要】
【国外来华专利技术】1.一种方法,包括:接收指定JavaScript对象标记(JSON)文档的修改的请求,所述JSON文档以压缩格式存储在永久性存储装置中,其中所述修改:向所述JSON文档添加附加内容,和/或用新值替换所述JSON文档中的旧值,所述新值和所述旧值的大小不同;将所述修改记录在变更日志中;将变更日志应用于永久性存储装置中的所述JSON文档的压缩格式,而不完全重写永久性存储装置中的所述JSON文档的压缩格式。2.如权利要求1所述的方法,还包括将所述修改应用于存储在易失性存储器中的所述JSON文档的副本。3.如权利要求2所述的方法,其中,所述JSON文档的文档对象模型(DOM)执行:所述将所述修改记录在变更日志中,以及所述将所述修改应用于存储在易失性存储器中的所述JSON文档的副本。4.如权利要求3所述的方法,其中:所述JSON文档的第二修改由以下指定:指定所述JSON文档的所述修改的所述请求,或第二请求;所述方法还包括所述JSON文档的所述DOM:将第二修改记录在变更日志中,而不将第二修改应用于存储在易失性存储器中的所述JSON文档的副本,或者将第二修改应用于永久性存储装置中的所述JSON文档的压缩格式,而不将第二修改记录在变更日志中。5.如权利要求1所述的方法,其中,所述将变更日志应用于所述JSON文档的压缩格式包括:推迟所述将变更日志应用于所述JSON文档的压缩格式,在所述JSON文档的压缩格式中用新值原地覆写旧值,将所述附加内容写入第一未使用空间中,所述第一未使用空间驻留在永久性存储装置中的所述JSON文档的压缩格式中、在永久性存储装置中的所述JSON文档的压缩格式的已经存储所述JSON文档的部分的两个空间之间,和/或将所述附加内容或第二未使用空间或所述新值追加到永久存储装置中的所述JSON文档的压缩格式上。6.如权利要求5所述的方法,还包括将第三未使用空间追加到永久性存储装置中的所述JSON文档的压缩格式上,所述第三未使用空间以指数方式大于所述第二未使用空间。7.如权利要求5所述的方法,其中:所述将所述新值追加到永久性存储装置中的所述JSON文档的压缩格式上发生在所述永久性存储装置中的所述JSON文档的压缩格式中的地址或偏移处;所述将变更日志应用于所述JSON文档的压缩格式包括,用指定所述地址或偏移的指针原地覆写永久性存储装置中的所述JSON文档的压缩格式中的所述旧值。8.如权利要求7所述的方法,还包括用第二指针原地覆写永久性存储装置中的所述JSON文档的压缩格式中的所述指针,所述第二指针指定永久性存储装置中的所述JSON文档
的压缩格式中的不同的地址或偏移。9.如权利要求1所述的方法,还包括将所述修改和第二修改合并成单个组合修改,所述单个组合修改替换所述变更日志中的所述修改和/或所述第二修改。10.如权利要求9所述的方法,其中,在所述将变更日志应用于永久性存储装置中的所述JSON文档的压缩格式之前,所述修改和所述第二修改替换连续存储在永久性存储装置中的所述JSON文档的压缩格式中的单独的值。11.如权利要求1所述的方法,其中:所述方法还包括:将所述JSON文档的压缩格式中的相应偏移与包括所述JSON文档的所述修改在内的所述JSON文档的多个修改相关联;以及基于所述JSON文档的压...

【专利技术属性】
技术研发人员:刘振华B
申请(专利权)人:甲骨文国际公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1