首页> 中国专利> 全面支持自主JSON文档对象(AJD)云服务的技术

全面支持自主JSON文档对象(AJD)云服务的技术

摘要

本发明涉及数据库中文档的数据网格的自主调谐。本文是用于存储单元格自主维护本地索引以及其它优化元数据和算法以加速对文档的分布式集合的选择性访问的技术。在实施例中,每个存储单元格持久化文档的相应子集。每个存储单元格在存储器中存储将每个项目映射到相应文档子集的一个或多个文档中该项目出现的(一个或多个)位置的(一个或多个)相应索引。一个或多个计算机至少基于存储单元格的索引的子集来执行来自数据库管理系统的数据访问请求。在实施例中,JSON文档服务的云提供易于使用的、完全自主的JSON文档数据库,该数据库可以水平和弹性地伸缩以交付文档事务和查询的快速执行,而无需数据库管理员进行调谐。

著录项

说明书

技术领域

本发明涉及文档的数据网格的自主调谐。本文是用于供存储单元格自主维护存储侧索引以及其它优化元数据和算法以加速对分层数据对象的分布式集合的选择性访问的技术。

背景技术

JavaScript对象表示法(JSON)可以被用作用于应用开发的无模式半结构化文档对象模型(DOM)。可以使用简单的放置/获取/替换样式CRUD(创建,读取,更新,删除)应用接口(API)在文档集合存储库上将应用对象作为JSON持久化。一旦用内容填充了JSON文档存储库,文档存储库就还应当支持JDOM上的在线分析处理(OLAP),用于对JSON文档的复杂报告查询。在关系模型下,DBA通过创建索引、物化的视图和/或将数据加载到存储器中以加速报告查询来支持OLAP。

现有技术文档云的问题是对于OLTP JDOM和OLAP JDOM两者的工作负荷,尤其是对于两者的混合,并且尤其是对于两者的波动比率,性能都不令人满意。应用开发人员为OLAPJDOM服务手动创建期望的索引。而对于同时运行OLTP和OLAP JDOM,开发人员将偏好最小化但不必消除建立索引(indexing),这种偏好与现有技术文档云存储库冲突,该现有技术文档云存储库在默认情况下对所有内容都建立索引或不对任何内容建立索引以尝试普遍地加速OLAP或OLTP之一但不可避免地并极大地减慢了另一方的速度。手动提供解决云存储系统中的OLTP和OLAP JDOM操作两者的解决方案是具有挑战性、繁琐且容易出错的过程。

附图说明

在附图中:

图1是描绘示例文档网络的框图,该示例文档网络使用自主和存储侧索引来加速对分层数据对象的分布式集合的选择性访问;

图2是描绘示例数据访问处理的流程图,该示例数据访问处理使用自主和存储侧索引来加速对分层数据对象的分布式集合的选择性访问;

图3是描绘示例文档网络的框图,该示例文档网络作为自主存储单元格(cell)的数据网格操作并提供位置透明性;

图4是描绘示例自主调谐处理的流程图,该示例自主调谐处理用于作为自主存储单元格的数据网格操作并提供位置透明性;

图5是描绘示例存储单元格的框图,该示例存储单元格具有以各种方式面向内容的存储侧索引;

图6是描绘示例索引管理处理的流程图,该示例索引管理处理用于使用和管理以各种方式面向内容的存储侧索引;

图7是图示可以在其上实现本发明的实施例的计算机系统的框图;

图8是图示可以用于控制计算系统的操作的基本软件系统的框图。

具体实施方式

在下面的描述中,出于解释的目的,阐述了许多具体细节以便提供对本发明的透彻理解。但是,将显而易见的是,可以在没有这些具体细节的情况下实践本发明。在其它情况下,以框图形式示出了众所周知的结构和设备,以避免不必要地使本发明模糊。

总体概述

本文描述的是为云中的OLTP和OLAP JDOM操作服务两者提供自主性能增强的方法,而无需向应用开发人员暴露这些性能增强的细节。这样的性能增强可以包括存储侧建立索引、物化的视图和存储器中扫描。应用开发人员只需要使用更多的逻辑概念,诸如文档集合、CRUD调用、通过简单Oracle文档访问(SODA)API表达的示例查询(QBE)调用。相关手册《Oracle Database,Introduction to Simple Oracle Document Access》中描述了SODA。在后端如何高效地执行SODA API可以是至关重要的。可以提供逻辑接口,而不是向应用开发人员暴露物理实施方式细节。

本文的解决方案可以作为以下中的任何一种来操作:数据库管理系统(DBMS),诸如关系DBMS(RDBMS)、数据仓库和/或数据网格。本文的解决方案包括计算层和存储层,并且每一层可以包含一个或多个通用或专用设计的计算机。存储层中的计算机被称为存储单元格。与通常被动的其它存储单元格不同,本文的存储单元格可以检查存储的内容、维护内容和/或用法的元数据(例如,存储侧索引和统计信息),并自主管理此类元数据和相关的优化结构。

计算层可以托管RDBMS。存储层可以作为为RDBMS提供数据存储/存储侧服务(诸如持久性、过滤、建立索引和/或高速缓存)的后端进行操作。基于与存储层的实施方式或多或少不同的实施方式,计算层可以具有自己的过滤、建立索引和高速缓存。

在本文中,自主数据仓库通过关系模型为OLAP提供服务、通过关系模型为OLTP提供服务,甚至可以通过文档集合中的JSON文档对象模型(JDOM)以及具有相同持久数据上的任意表格和查询的成熟的关系模型提供OLTP和OLAP服务两者。

SODA是易于使用的API,用于访问存储在JSON集合中的JSON文档。从开发人员处理文档存储库的角度来看,文档集合的概念有时可以比关系表更为自然,JSON文档的概念有时可以比行更自然,而QBE的概念有时可以比SQL更自然。实施例可以禁止各种结构化查询语言(SQL)数据定义语言(DDL)命令,尤其是表DDL命令,以防止用户将任意表添加到系统中。SODA API响应于用户的创建文档集合的SODA请求而自主创建具有适当JSON文档列和其它内部整理(house-keeping)列的表。用户应用不需要在存储JSON文档的表上直接发布DML语句。代替地,包括诸如put()/get()/replace()之类的调用的SODA文档CRUD API包括供用户请求OLTP JDOM服务的接口。SODA CRUD API实施方式自主地生成适当的SQL DML语句,以在数据库中的JSON文档存储表上执行JSON文档的插入/选择/更新/删除操作,包括在JSON文档集合表上自主创建存储侧主键索引以供快速键值查找。SODA QBE API使用户能够对JSON文档集合进行查询,作为请求OLAP JDOM服务的方式。SODA QBE API实施方式将QBE转变成可以被高效执行的SQL/JSON语句。

通过关系视图访问的JDOM上的SODA OLAP是供用户桥接关系模型和JDOM模型的强大机制。但是,代替直接公开JSON_TABLE()视图创建,SODA提供了JSON数据指导生成API和JSON集合上的关系视图生成API。根据本文的技术的物化或非物化的数据库视图的强加促进了存储单元格非常高效地参与,而不会影响存储单元格设计。

本文提出的存储侧索引和其它存储单元格优化可以改善过滤、投影和/或联接的性能,这些操作是可以支持数据库视图的机制的实现操作。即使数据库视图存在并且在DBMS中操作,也可以将此类实现操作中的一些或全部无缝地委托(即,下推)到智能存储层,而存储层不了解数据库视图或关系数据库。例如,数据库视图可以只公开重要文档,而重要性过滤可以委托给存储层。因此,数据库视图可以实现文档和关系表之间的映射。取决于实施例,映射可以是双向的(即,可写的视图),或者仅仅是从文档到视图表(即,只读)映射。

SODA为流行的客户端编程语言提供了相同的API。一般而言,SODA技术的自动化提供了高级别接口,并避免了使用SQL实现细节,使得文档云可以根据本文的技术连续且自主地改善其自身的分布式性能。

在实施例中,每个存储单元格持久化分层数据对象的相应子集。每个存储单元格在存储器中将把每个项目映射到(一个或多个)位置的相应的(一个或多个)存储侧索引存储在该项目发生的分层数据对象的相应子集的一个或多个分层数据对象中。一个或多个计算机至少基于存储单元格的存储侧索引的子集来执行数据访问请求。

在实施例中,JSON文档服务的云提供了易于使用的、完全自主的JSON文档数据库,该JSON文档数据库水平且弹性地扩展以交付文档事务和查询的快速执行,而无需数据库管理员(DBA)进行调谐。

1.0示例文档网络

图1是描绘实施例中的示例文档网络100的框图。文档网络100使用自主和本地存储侧索引来加速对分层数据对象的分布式集合的选择性访问。

文档网络100包括通信网络,诸如电话和/或计算机网络,诸如局域网(LAN)、广域网(WAN)、存储区域网(SAN)、或各种此种类型的多个网络的互连网络。文档网络100可以包括包含体系架构层191-192的分布式拓扑。计算层191可以是包含数据库管理系统(DBMS)170(诸如关系DBMS(RDBMS))的中间件层,其包含至少一个数据库。

存储层192可以作为用于DBMS 170的持久性数据存储库(即,后端)(诸如数据网格或存储区域网(SAN))进行操作。文档网络100互连多个存储单元格,诸如作为文档网络100的网络元素的111-112,以及包括至少一个联网计算机的DBMS 170。例如,存储单元格111-112可以驻留在相同或不同的数据中心中。

文档网络100的每个计算(诸如DBMS主机或存储单元格111-112)可以是机架服务器(诸如刀片)、个人计算机、大型机、虚拟计算机或其它计算设备。代替地,存储单元格111-112可以各自是存储装置或存储设备(诸如网络附加存储装置(NAS)),其中包含存储器、持久性存储装置和至少一个处理器(诸如中央处理单元(CPU)或微控制器)。每个存储单元格111-112包含诸如130之类的存储器。

存储器130可以是随机存取存储器(RAM)或面向块的存储器(诸如固态驱动器(SSD))。存储器130可以是易失性的或非易失性的。每个存储单元格111-112包含持久性存储介质,其可以包括存储器130和/或机械存储装置(诸如盘驱动器或带驱动器)。如果持久性存储介质和存储器130是单独的组件,那么与持久性存储介质相比,存储器130通常具有更少的时延和更少的容量。

在实施例中,存储在存储器130中的数据中的一些或全部最终被复制到持久性存储介质中。例如,存储器130可以作为元数据的镜像(诸如持久性存储侧索引)进行操作,和/或根据诸如最近最少使用(LRU)之类的策略作为需求驱动的高速缓存进行操作。存储器130还可以存储未镜像的元数据,诸如本地和/或临时存储侧索引。实际上,存储侧索引的创建和/或寿命可以与少至单个数据访问请求相关。

文档网络100可以持久化许多分层数据对象,诸如121-123。每个存储单元格111-112可以持久化分层数据对象121-123的其自己的子集。例如,存储单元格111不存储分层数据对象123。虽然未示出,但是可以在一些或所有存储单元格上复制相同的分层数据对象。

在各种实施例中,分层数据对象121-123中的每一个可以是诸如文档之类的数据的完全或者或多或少的自包含的分层布置。分层数据对象121-123中的每一个可以包含JavaScript对象表示法(JSON)、可扩展标记语言(XML),和/或键-值对。例如,分层数据对象121-123可以具有多用途互联网邮件扩展(MIME)类型和/或能够作为文本进行传送/串行化。二进制格式化将在本文稍后讨论。

在操作中,DBMS 170可以接收或生成数据库语句(未示出),诸如数据操纵语言(DML)(诸如结构化查询语言(SQL))。示例场景包括只读数据仓库化,诸如多维在线分析处理(OLAP),或实时业务处理(诸如在线事务处理(OLTP))。实际上,DBMS170可以忍受对已知解决方案带来压力的对立性的工作负荷(诸如OLAP和OLTP的混合),如本文稍后讨论的。

例如,即使当OLAP和OLTP访问相同的业务数据时,用于容纳OLAP和OLTP两者的现有技术方法也使用单独的相应数据库和/或数据库体系架构。利用现有技术,将OLAP从OLTP分离到单独的DBMS中促进对OLAP和OLTP的单独调谐。利用现有技术,由于OLAP和OLTP工作负荷的不同特点和对立性的副作用,在同一个DBMS中对OLAP和OLTP进行调谐可能是无效的。

例如,企业可以将DynamoDB或MongoDB用于OLTP,并且将CosmosDB用于OLAP。但是,本文的自主执行方法可以最优地处理同一DBMS的同一数据库中的OLAP和OLTP两者。违反直觉的是,本文的技术可能看起来增加DBMS的内部复杂性,但实际上诸如通过以下简化了数据库管理:a)促进将OLAP和OLTP整合到同一数据库中,以及b)用本文的更有效的替代方法(诸如自主行为和用于JSON的智能默认配置设置)替换繁琐且容易出错的手动调谐。

对立性工作负荷是降级彼此性能的工作负荷类型。例如,OLAP查询用该查询(而不是将在短期内执行的其它查询)所需的数据块填充缓冲区高速缓存。因此,高速缓存中已填充有不太可能产生高速缓存命中的数据块,但已逐出用于OLTP工作负荷的数据块,而OLTP工作负荷更可能产生高速缓存命中。对立类型的工作负荷也是测量一种类型的工作负荷的性能降低另一种类型的性能的工作负荷的类型。

例如,更多索引可以改善OLAP工作负荷,但降低OLTP工作负荷,这在数据库被修改时承担更新索引的开销。如本文稍后讨论的,本文的自主技术可以诸如根据动态地检测到工作是OLAP工作负荷的部分还是OLTP工作负荷的部分来调整托管DBMS的第一计算机与针对DBMS持久化数据库数据的第二计算机之间的工作分配。例如,存储侧索引在本文其它地方讨论。

DBMS 170可以是多实例的(即,分布式的)。在未示出的实施例中,计算层191包含多个DBMS,诸如170。例如,存储单元格111可以与不共享内容的多个DBMS并发地互操作,这可以是另一种对立性场景。

DBMS 170可以执行每个接收到的数据库语句。这种执行可能需要优化,诸如查询计划。生成的查询计划可以指定至少一个数据访问请求(诸如180),以读取和/或写入存储在存储单元格111-112中的数据。

例如,相同的数据访问请求180可以被发送到访问分层数据对象121-123中的一个、一些或全部的存储单元格111-112中的一个、一些或全部。例如,对于EXISTS查询,可以生成或多或少相同的数据访问请求(诸如180)并且并发地发送到所有存储单元格111-112,以实现水平缩放的单位线性加速,如本文稍后讨论的。在另一个示例中,诸如当可以基于相应存储单元格111-112包含、维护和使用的(一个或多个)存储侧索引(诸如141-142)来回答对DBMS 170的EXISTS查询时,数据访问请求180不访问分层数据对象121-123。DBMS 170不需要知道存储侧索引存在,也不需要知道存储单元格111-112是自主的。

因为数据对象121-123是分层的,所以它们各自可以由(一个或多个)数据项(dataitem)组成。例如,分层数据对象121包含项目(item)A-B。而且,因为数据对象121-123是分层的,因此虽然未显示,但是项目A可以包含项目B。在各个实施例中,项目可以具有逻辑角色,诸如键、键-值对、字段名称(例如,JSON字典键或XML属性)、值、JSON字典键或XML标签,和/或其它项目的集合。

可以在相同的分层数据对象中重复相同的项目。例如,分层数据对象121包含项目A的多个实例。

可以在驻留在相同存储单元格中的不同分层数据对象中重复相同的项目。例如,存储单元格111包含各自都包含项目B实例的分层数据对象121-122。

可以在驻留在不同存储单元格中的不同分层数据对象中重复相同的项目。例如,存储单元格111-112分别包含各自都包含项目A的实例的分层数据对象121和123。

每个数据项或数据项的实例驻留在分层数据对象内的不同位置。例如,数据项A-B驻留在同一分层数据对象121中的位置X-Z中,包括驻留在位置X和Z中的相同数据项A的实例。位置可以包括偏移量,诸如到分层数据对象的字节或机器字偏移量和/或到数组的偏移量,诸如按字母顺序排序的相同或多个分层数据对象的项目的数组。

在未示出的实施例中,位置跨同一存储单元格的分层数据对象或跨文档网络100(即,所有存储单元格)可以是唯一的。在所示的实施例中,保证位置仅在特定的分层数据对象内是唯一的。

在实施例中,相同的位置可以出现在相同的存储单元格的不同的分层数据对象中。例如,位置Z出现在不同的两个分层数据对象121-122两者中。

在实施例中,相同的位置可以出现在不同的存储单元格的不同的分层数据对象中。例如,位置Y出现在不同的分层数据对象121和123两者中。

存储侧索引(诸如141-142)可以加速对分层数据对象和/或其中的项目的访问。稍后将讨论具有各种用途的各种类型的存储侧索引。

在这个示例中,存储侧索引141-142可以被用于基于诸如特定项、用于一个或多个项目的模式、进入层次结构的路径(或路径模式)和/或出现在路径模式中的过滤表达式之类的(一个或多个)准则来查找位置X-Z(和/或分层数据对象的标识符)。例如,存储侧索引141可以是倒排索引。在实施例中,存储侧索引141包括查找表、散列表和/或其它关联的(即,映射/字典)结构。

例如,当存储侧索引141-142中的一个、一些或全部代替强力(brute-force)表扫描被使用时,可以加速查找项目B(或计数项目A实例,或检测项目C在文档网络100、存储单元格111或分层数据对象121内的存在)。索引分布可以如下。

在所示的实施例中,每个存储单元格具有其自己的存储侧索引。例如,每个存储侧索引的类型和/或每个存储侧索引的内容可以不同。如本文稍后讨论的,相同的存储单元格可以具有不同种类的存储侧索引和/或相同种类的存储侧索引的不同实例。在实施例中,可以诸如根据包含存储侧索引的单元格的流量(traffic)(即,使用情况)或内容来独立地更新每个存储侧索引。

此外,虽然未示出,但是文档网络100可以具有不包含在单个存储单元格中、或不包含在任何存储单元格中、或不包含在存储层192中的全局索引。例如,存储层192中、计算层191中、或DBMS 170中的全局索引可以指示分层数据对象和/或其中的项目的分布和/或复制。

在所示的实施例中,存储侧索引141驻留在存储器130中以进一步减少时延。取决于实施例,可以从盘直接加载存储侧索引141,可以从盘上的其它数据或元数据间接构建存储侧索引141,或者可以最初直接在存储器130中构建存储侧索引141。

在实施例中,存储单元格111-112是自主的,使得每个单元格诸如根据该单元格的流量或内容独立地维护并动态地更新其自身的存储侧索引。例如,存储单元格111可以具有诸如通过监视读取和/或写入并维持其统计信息来维护存储侧索引141的逻辑,诸如本文稍后讨论的。

也如本文稍后讨论的,自主存储单元格111可以具有逻辑,该逻辑基于该单元格的使用情况统计信息来动态地决定加载、创建、和更新、调谐、持久化和/或丢弃单元格自身的存储侧索引的实例的时间、种类和/或实例。在实施例中,自主存储单元格111即使在离线时(诸如当处于管理维护模式下时或者当单元格与文档网络100的连接性暂时丢失时)也可以周期性地维护其自身的存储侧索引。

2.0示例数据访问处理

图2是描绘实施例中使用存储侧索引来加速对分层数据对象的分布式集合的选择性访问的文档网络100的流程图。参考图1来讨论图2。

文档网络100可以可选地具有中央服务器,该中央服务器附加地执行图2的步骤中的一个、一些或全部。但是,自主存储单元格应当执行步骤202、204,并且依照情况不执行步骤206的任何活动或执行步骤206的一些或全部活动。例如,所有存储单元格111-112都有条件且自主地执行步骤204,并且对于特定的访问请求,可以参与或者可以不参与步骤202和/或206。

如本文所解释的,文档网络100和自主存储单元格111-112的操作可以对流量和内容敏感。而且如本文所解释的,这种敏感性对于存储单元格可以是本地的,使得重新配置各个存储单元格可以是自主的(即,本地且独立受控)。

但是,流量和内容不应当被视为不透明和/或整体的。即,流量实际上是多个个体数据访问请求,每个请求都可能引起可以对使用情况统计信息起作用的操作。数据访问请求有时可以或多或少是并发的,有时不是并发的,并且有时存储单元格对客户端可以是明显空闲的。因此,对于各种数据访问请求,或者对于根本没有数据访问请求(诸如在文档网络100或存储单元格的懒惰和增量初始化(即,启动)期间),图2中所示的步骤可以各自在各个时间再次发生,或者在服务中由储存单元格自主地进行。

例如,存储单元格111(和/或文档网络100)自身可以并发地执行图2的步骤中的一个、一些或全部,并且对于相同或不同的存储单元格(诸如对于不同的访问请求)或自发地,同一步骤的重复出现可以并发地发生。因此,瞬时流量可以并发地激活图2的所有步骤,并且这些步骤中的任何步骤或全部步骤可以在存储单元格111(或文档网络100)处于服务的整个时间中或多或少地具有至少一次发生执行。

换句话说,并且尤其是在高负荷下,所有这些步骤可以总是在进行。因此,将分层数据对象的相应子集持久化到存储单元格111的持久存储中的步骤202可以以任意/偶发频率发生(诸如对于汽车经销店),或者对于(诸如从物联网(IoT))将要假脱机(spool)到存储单元格111中的分层数据对象的流或多或少不断地进行。

例如,在后续步骤开始之前,步骤202可以完成或完全重复,或者可以不完成或完全重复。利用跨多个存储单元格111-112的水平并行性,存储单元格自主性对于利用偶然或有意出现的优化机会可能特别有益,如本文稍后所讨论的。在一些实施例中,存储层192中的存储单元格可以比计算层191中的数据库服务器实例的伴随集合(未示出)更可伸缩。例如,存储单元格不需要对系统吞吐量进行限制,尤其是对于本文稍后给出的自主吞吐量优化。

不管存储单元格111-112存储的是相同的(即,副本)还是不同的内容,存储单元格自主性(下文讨论)都可以强调存储单元格的存储侧索引的管理,尤其是如本文稍后讨论的。在步骤204中,存储单元格可以在其存储器中存储一个或多个相应的存储侧索引,诸如将内容项映射到每个项目在该存储单元格的本地分层数据对象中出现的(一个或多个)位置的索引、或将项目映射到文档的索引、或两者。

在步骤206中,由文档网络100接收并执行数据访问请求。例如,DBMS 170可以从客户端接收数据库查询,并且响应于此而向存储单元格中的一个、一些或全部发送一个或多个数据访问请求(诸如180)。基于这些存储单元格的存储侧索引中的一个、一些或全部,加速执行数据访问请求180。存储侧索引操作和管理将在本文稍后讨论。

3.0存储单元格自主性

图3是描绘实施例中的示例文档网络300的框图。文档网络300作为自主存储单元格的数据网格进行操作,并提供位置透明性。文档网络300可以是文档网络100的实施方式。

如上面所解释的,每个存储单元格(诸如311-312),可以诸如根据动态和本地条件自主地维护其自身的(一个或多个)存储侧索引。每个存储单元格311-312可以动态地决定加载、创建、更新、调谐、持久化和/或丢弃其自身的存储侧索引的实例的时间、种类和/或实例数量。不同示例种类的存储侧索引如下,并且每个存储单元格可以根据波动条件动态地创建或丢弃它们的实例,诸如作为本地使用情况统计信息370被跟踪,如由存储单元格311维护的。

使用情况统计信息370可以包括对数据访问请求(诸如380)的分析结果,和/或存储单元格311的内容的内容分析的结果。在未示出的实施例中,文档网络300还维护全局使用情况统计信息。在实施例中,存储单元格311-312中的每一个可以读取和/或写入其自身的本地使用情况统计信息(诸如370或全局使用情况统计信息)。

各种实施例可以如下使用Oracle ExaData存储单元格。ExaData系统的体系架构是将数据库服务器计算节点与存储单元格节点分开。尤其是当文档网络300存储JSON文档时,DBMS 305可以接受针对存储在文档网络300内的存储单元格中的JSON文档的查询。作为人类可读的文本,JSON被编码为具有本质上稀疏的字符集的字符串。例如,作为原始(raw)文本,可以将月份编码为“September(九月)”,或者密集地二进制编码为八的基于零的整数值,这可能需要少四个比特,并且即使与一、二、四或八字节边界对准时也仍比原始文本更密集,因为原始的“September”需要9个字节。

因此,二进制编码实现了压缩。取决于实施例,文档可以在传输中和/或存储中被编码为文本或以二进制格式编码(诸如OSON,其可以完全或或多或少地无模式)。例如,存储单元格可以将文档存储为OSON数据块的集合,该OSON数据块的集合可以被DBMS 305直接访问或可以不被DBMS 305直接访问。

在OSON实施例中,为JSON文档内的每个唯一字段名指派整数字段名标识符并且仅存储一次,以便将对相同字段名称的多个引用替换为其字段名标识符。因为标识符仅占用几个字节,所以当原始文档具有嵌套的子对象数组或对递归的层次结构进行编码时,OSON编码通常节省大量空间。指派标识符的最大益处是,通过使用整数比较执行二进制搜索,标识符可以促进快速导航到给定的子字段。OSON以排序的次序存储每个对象的字段名称标识符,以支持这种类型的访问。

JSON对象可以具有命名字段,可以嵌套,并且可以布置在数组中。例如,同一种类的对象的对象实例可能都具有相同的名称字段,即使这些字段的值跨对象实例有所不同。OSON如下所述压缩相似(即,字段名称的相同集合)对象的数组。原始字段名称或其整数标识符可以包含在数组中一次,在数组元数据中或者在数组中的第一个元素(即,对象实例)中。数组中的后续对象实例可以省略暗示要实现压缩的字段名称或标识符。

针对JSON文档发出的OLAP查询是由表扫描驱动的,并且可以通过存储单元格评估OSON存储数据块上的JSON谓词而下推到(一个或多个)存储单元格。与加载在存储单元格中的闪存高速缓存中的OSON内容并行执行涉及多个存储单元格的扫描。因此,即使确实发生了高速缓存颠簸(thrashing):也a)通过水平缩放来加速扫描,b)在DBMS 305的高速缓存中不发生颠簸,并且c)颠簸不带来网络流量,这是与利用直接通过DBMS 305的计算机的现有技术表扫描非常不同的性能特点。

例如,可以对OLTP查询进行索引驱动,以利用频繁访问的OSON数据块和索引块的DBMS缓冲区高速缓存。DBMS 305可以自主地决定不将OLTP过滤委托给存储单元格311-312。而OLAP查询可以是表扫描驱动的,使得它们可以被自主下推到可以评估OSON存储块上的JSON谓词的存储单元格311-312。存储单元格311-312可以并行执行相同的扫描,并且可以在其自身的相应高速缓存中高速缓存OSON块。因此,查询计划可以:a)自动检测扫描所依赖的数据结构类型,以及b)自主地决定是否将扫描委托给存储单元格311-312。例如,可以将代表OLAP的表扫描下推到存储单元格311-312。而代表OLTP的索引扫描不应当被下推,而是应当由DBMS 305的计算机直接执行。

将过滤向下推到存储单元格311-312不需要放弃使用索引,因为如本文稍后讨论的,存储单元格311-312可以具有存储侧索引。但是,由DBMS 305进行的查询计划没有考虑存储侧索引,并且可能无法发现由存储单元格311-312中的每一个自主且私有地创建和维护的存储侧索引,如本文稍后讨论的。在一些情况下,DBMS 305和存储单元格311-312两者中的索引都可以被用于相同的查询或甚至相同的扫描。

即使DBMS确定它定义了可以被用于评估查询中指定的路径表达式的索引,过滤也可以被推送到存储服务器。实际上,DBMS将路径表达式的评估视为或将其分类为OLAP工作负荷而不是OLTP工作负荷,并将路径表达式的评估推送到DBMS请求存储服务器执行的表扫描。

例如,DBMS接收基于路径表达式在谓词中引用基于路径的运算符的查询。当编译查询时,DBMS确定DBMS定义了可以被用于评估路径表达式的索引,但也确定基于路径的运算符的选择性较低。响应于确定选择性较低,DBMS用于生成包括具有过滤器的表扫描的执行,该过滤器基于路径表达式对表中的文档进行过滤。当执行表扫描过滤器时,DBMS请求存储装置去扫描表中的满足路径表达式的文档。存储单元格使用存储侧索引对路径表达式进行评估,以确定哪些数据块包括保持满足路径表达式的文档。

虽然查询计划发生在DBMS 305中,并且代数查询本身没有中继到存储单元格311-312,但是在实施例中,可以将QBE或多或少地直接委托给(一个或多个)存储单元格。例如,因为存储单元格的实施例可以支持OSON,所以存储单元格311-312可以接受OSON编码的示例并且用找到的匹配来回答。存储单元格311可以被配置用于OSON格式,并且能够针对JSON文档评估JSON路径表达式。可以被评估的路径表达式的示例是用于访问文档的基于oath的运算符,诸如JSON。这样的运算符在标题为“Generic SQL Enhancement To Query AnySemi-Structured Data And Techniques To Efficiently Support Such Enhancements”的美国专利申请No.14/337,189(美国专利公开No.2015-00395 87A1)中描述。被配置用于扫描数据库数据的存储单元格在标题为“Hash Join Using Collaborative ParallelFiltering In Intelligent Storage With Offloaded Bloom Filters”的美国专利No.8,825,678和标题为“Method To Accelerate Queries Using Dynamically GeneratedAlternate Data Formats In Flash Cache”的美国专利No.10,296,462中描述。

存储单元格311可以监视访问请求(诸如380),以检测超过阈值频率的相同或相似的访问请求,然后自主地创建或移除适当种类的存储侧索引。以下JSON示例演示了一些适当的存储侧索引类型。

频繁过滤数据访问请求的示例是{“dateField”:{“$date”:DATE-STRING}},其中DATE-STRING是ISO 8601格式的字符串。此处,项目方法$date将DATE-STRING变换为数据类型DATE的SQL值。通过为其创建B树(B-tree)索引,可以加速对诸如“dateField”之类的字段的过滤。用于SQL/JSON函数json_value的B树索引或位图索引可以加速过滤请求。位图索引可以加速SQL/JSON条件是json,不是json、以及json_exists。只要用于函数的可能值的数量少,位图索引就可以是适当的。例如,如果预期值是布尔值或以其它方式是少量字符串值之一,那么可以为函数json_value创建位图索引。基于函数的建立索引对于针对特定函数的访问请求是适当的,这在SQL/JSON函数的上下文中意味着特定的SQL/JSON路径表达式,这对于支持DBMS 305对自组织(ad hoc)的数据库查询的执行可能没有帮助。当利用特定路径表达式频繁过滤时,基于函数的索引是适当的。

在实施例中,自主地设置存储器中加速以便以路径-值索引格式来高速缓存通常搜索的路径和值。每条不同的路径都与该路径下的排序的值的集合相关联。排序的数组中的每个唯一值都与发布列表相关联,该列表表示具有这种值的所有OSON文档的位图。使用路径-值索引来评估路径-值数据访问请求(诸如用JSON_EXISTS()或JSON_VALUE()为数据库查询生成的请求),以执行存储器中扫描以生成文档标识符的集合,然后该文档标识符被用于读取对应的OSON格式以进行后期评估。这样的存储器中路径-值索引是在存储单元格上自主设置的。

路径值索引在标题为“Techniques for Enabling and Integrating In-MemorySemi-Structured Data and Text Document Searches With In-Memory Columnar QueryProcessing”的美国专利申请No.16/022,465中描述。存储单元格上的每个路径值索引覆盖数据块的连续区域,诸如范围。这些存储侧索引可以在启动时构建,并且一旦构建,就保存在持久高速性缓存中。当在区域中更新数据块时,用于该区域的路径值索引可以失效(以防止使用),然后重建。代替地,访问正在重建的路径值索引的区域的数据访问请求是通过强力(即,扫描和评估该区域中的数据块)来评估的。

通过创建空间索引,可以加速GeoJSON几何对象中空间数据的存储侧访问。可以通过创建JSON搜索索引来自主地加速为全文查询和/或自组织结构化查询(诸如对于示例查询(QBE)运算符$contains)生成的数据访问请求。JSON搜索索引是通过为每个JSON字段名称和每个叶子标量值(字符串被标记为关键字的集合以支持全文本搜索)维护反向索引在JSON列上创建的通用模式不可知索引。JSON搜索索引促进对文档集合进行高效评估的自组织SQL/JSON路径查询谓词,诸如JSON_EXISTS()、JSON_TEXTCONTAINS()和JSON_VALUE()。

由存储单元格311生成使用情况统计信息370可能需要计算数据基数和/或选择性。基数计数字段的不同值,诸如键-值对(诸如“日期”的键)中的值。平均选择性是基数与群体范围(诸如其键为“日期”的对)的比率。根据特定的过滤准则(其可以是复合准则),特定的选择性是经过滤的与未过滤的群体的比率。例如,诸如根据过滤表达式390,通过应用可以由数据访问请求380供应的过滤准则来产生特定的选择性。散列索引340可以包含过滤表达式390的全部或部分。

对于高度选择性(即,超过选择性阈值)的确切路径过滤,可以创建散列索引。对于高度选择性的范围路径过滤,可以创建B+树索引,该索引可以是单值或多值的。对于全文本搜索,默认情况下使用异步模式的路径子集的JSON搜索索引是适当的。对于高度选择的多值数据,可语句刷新的json_table()物化视图是合适的。

对于高度选择的路径值过滤,维护基于同步B+树的功能索引更有益。但是,维护B+树索引降低DML性能,因此,应当在所创建的一些功能索引与它们在改善OLTP和OLAP数据访问性能的益处之间取得平衡。表达式执行统计信息,以查找工作负荷中的WHERE子句中通常使用的JSON_EXISTS()和JSON_VALUE()表达式。表达式执行统计信息在美国专利申请No.15/146,798中描述。充分利用ATP自主建立索引创建工作来确定功能索引创建是否值得。

对于非高度选择性的数据访问,基于存储器中扫描在存储单元格上改善的表扫描是适当的。作为本文所使用的术语,“存储器中扫描”涉及扫描数据库数据的持久形式(“PF”)的存储器中高速缓存版本。PF数据库数据的单元在本文称为存储器中压缩单元(IMCU)的单元中被高速缓存在存储器中。对于相同的数据,IMCU可以具有与盘块格式不同的数据格式。例如,列式IMCU可以对相同类型和含义的数据(诸如特定键(诸如“颜色”)的键-值对的值)进行去归一化(即,分离)。列式IMCU可以利用存储单元格的向量硬件(诸如图形处理单元(GPU)和/或单指令多数据(SIMD)),尤其是用于扫描。列式IMCU可以包括诸如字典编码或游程长度编码(RLE)之类的压缩。对于可变长度的值,字典编码为固定长度的代码可以适合无法轻松处理可变长度值的向量硬件。列式IMCU的内容可以是OSON编码的。

存储器中表达式单元(IMEU)是存储派生数据(诸如经过滤和/或经变换的数据)的IMCU。例如,列式IMEU可以高速缓存满足数据访问请求的过滤表达式的本地值。IMCU和IMEU在美国专利申请No.16/144,926中提出。

可以使用JSON集合方法上的“全部建立索引”。但是,“全部建立索引”是昂贵的并且由于繁重的DML OLTP/JDOM服务而恶化。NVRAM(非易失性随机存取存储器)之上的存储器中存储侧建立索引结构更适当。

在一些情况下,项目A-B可以被用作(一个或多个)存储侧索引的键和/或值。基于使用情况统计信息,可以将特定项目动态地移除或添加到存储侧索引。

DBMS 305可以基于其自身的使用情况统计信息(未示出)来叠加/覆盖关系数据库视图(诸如360),诸如以支持和优化对分层数据对象(诸如321)的SQL访问。数据库视图可以具有语句刷新和/或物化。通过视图物化,DBMS 305可以将分层数据对象321-322处理为表格数据并向客户端公开,这些表格数据可以充分利用DBMS 305的许多子系统(未示出),诸如查询优化以及使用情况或内容的度量。同样,数据库视图360可以促进关系代数(诸如SQL,诸如来自客户端)。何时创建数据库视图360可以基于多值数据的查询选择性。

在实施例中,SODA基于数据指导来创建JSON_TABLE()物化视图(MV),以便基于关系代数(诸如JSON文档集合上的SQL)运行查询。由DBMS 305监视JSON_TABLE()MV的使用情况,以确定通过充分利用和集成Oracle的自主MV创建框架来创建JSON_TABLE()MV是否会提高效率。

在关系模型(即,物化视图)中,并非所有列都被平等地访问。被频繁读取的具有高选择性的列可以指导RDBMS 305在RDBMS305中创建索引以改善OLAP查询,而不会不利地影响物化视图的繁重使用的关系表上的随机DML。为了支持物化视图,RDBMS 305可以具有所谓的数据指导,该数据指导从诸如JSON之类的无模式文档的集合中推断并保留示意图细节。

在另一个用例中需要比通过数据库视图更直接的文档访问的JSON文档集合中,由RDBMS 305生成RDBMS 305中用于JSON文档集合的数据指导,以确定JSON路径和叶子值域类型和/或数据类型。数据指导的示例在标题为“Dynamically Updating Data Guide ForHierarchical Data Objects”的美国专利No.9,864,816中描述。基于叶子值的数据类型,可以确定适当的索引。

用于叶子数据类型和路径的数据指导是便携式机制,其可以作为存储单元格的内部部分。每个存储单元格可以自主地维护其自身的数据指导,该数据指导可以由存储单元格操作:a)作为一种存储侧索引,b)以促进其它种类的存储侧索引的生成和/或维护,和/或c)促进OSON处理,诸如检查或编码。

通常被访问的JSON路径及其叶子值分布统计信息可以由存储单元格搜集。叶子值可能要经过相等性测试、值范围过滤、全文本搜索或GeoJson空间匹配。由于大多数此类数据访问是由DBMS 305的SODA QBE API或数据指导关系视图API生成的,因此路径/值数据域使用模式和统计值分布可以由存储单元格根据其自身的本地JSON文档集合在内部进行维护。根据数据访问请求的使用模式,可以加速执行这些模式的存储单元格,而不影响DBMS305中的DML。此类加速度调整可以由每个存储单元格自主地决定。因此,存储单元格的统计信息和/或数据指导可以提供重要的元数据,存储单元格可以根据这些元数据做出自主决策,用于自我管理各种优化结构(诸如存储侧索引)。因此,以现有存储层由于缺乏嵌入式智能而无法支持的方式,自主性对于敏捷性可以是数据驱动的(即,机会调整)。

存储侧建立索引和总体效率可能更受流量/使用情况的影响。两种类型的使用方式中的一种或两种可以占主导地位,而刻板印象可以是对立性的,可能降级(即,降级彼此的效率)。

只读使用是报告和多维分析的典型应用,诸如对于OLAP,诸如在数据仓库中。只读使用趋于是顺序的,诸如对于扫描,这可能会使(例如,OSON)块、记录、行或文档的高速缓存颠簸。索引为只读使用提供最大的益处。

可变使用是实时系统的典型应用,诸如OLTP,诸如对于数据录入和/或交易。可变使用趋于需要随机访问和小的工作数据集,这些数据可以被修订为高速缓存,但是可能对频繁改变的索引造成压力。

在实施例中,文档网络300可以为不同或相同的分层数据对象提供OLAP和OLTP两者。当同一个存储单元格或多或少并发地承受两种使用时,可能发生干扰(即,降级的性能)。例如,在存储单元格311的本地使用情况统计信息370中明显的模式可能变成,这可能限制存储单元格的逻辑选择优化。这种混合使用可以使存储单元格311中的存储侧索引和/或颠簸高速缓存超负荷工作。因此,混合使用可能降低存储单元格311和/或文档网络300的吞吐量。混合使用还可能减少或消除存储单元格自主性的性能优势。

在实施例中,为了保持吞吐量,文档网络300可以将客户端会话和/或特定访问请求路由到具有相关副本内容的(一个或多个)特定存储单元格。例如,OLAP和OLTP可以被路由到具有部分或全部复制的内容的相应存储单元格311-312。副本一致性(即,同步)可以被流传输(诸如实时地),或被调度(诸如每小时或每晚)。例如,每日、每周和每月的报告不需要实时复制。同样,从事产品研发(R&D)的数据科学家也不需要实时复制。在实施例中,文档网络300包括(一个或多个)公共云和/或私有云,诸如具有弹性水平缩放(即,自发复制)。在实施例中,复制是同步的,并且支持ACID事务。在实施例中,复制是异步的(即,最终的)。

不管拓扑问题(诸如复制和缩放)如何,存储单元格311-312和文档网络300的吞吐量都可以受益于流量整形,使得OLAP和OLTP分离。每个存储单元格的自主性受益于流量和/或内容的分离,因为每个存储单元格的本地工作负荷可以更加一致和集中,由此可以产生使用情况统计370中更清晰的模式。当存储单元格311-312是自主的时,每个单元格可以针对其自身的本地内容和工作负荷自动管理和调谐存储侧索引和高速缓存(诸如IMCU),从而实现每个存储单元格的最优本地吞吐量,这直接有助于文档网络300的最优全局吞吐量。

例如,如果分层数据对象321-322是采购订单,那么查询当月订单可以强调诸如行项目(line item)之类的订单内容。而查询前一个月的订单可以强调付款和运货状态。因此,即使流向一些或全部存储单元格的全部流量都是针对OLAP的,按内容隔离(即,分配)分层数据对象321-322可以增加吞吐量。例如,分层数据对象321-322可以按购买订单的月份分配给存储单元格311,从而可以更好地利用存储单元格自主性。

4.0示例自主调谐处理

图4是描绘实施例中文档网络300作为自主存储单元格的数据网格操作并提供位置透明性的流程图。参考图3来讨论图4。

文档网络300具有许多存储单元格(诸如311-312),它们可以具有分区和/或复制的内容。在一些示例中,文档网络300可能需要选择参与数据访问请求380的执行的(一个或多个)存储单元格,可能基于存储存储单元格的工作负荷和/或内容、数据访问请求380的内容、数据访问请求380的类型和/或客户端会话的类型。

在步骤401中,检查数据访问请求380的类型和/或客户会话的类型以选择存储单元格311-312中哪一个应当执行数据访问请求380。如图所示,按照相应的步骤402-403,将OLAP访问路由到存储单元格311,并且将OLTP访问路由到存储单元格312。因此,存储单元格311自然地针对OLAP调谐其存储侧索引,并且针对OLTP调谐存储单元格312。在没有明确向存储单元格311-312通知其相应的使用指定为OLAP或OLTP的情况下,可以发生自主调谐。

步骤404-406可以以不同于示出的多种顺序发生。步骤404-405由所选择的(一个或多个)存储单元格(诸如用于OLAP的311)执行,并且涉及该存储单元格的存储侧索引的使用和/或管理。

步骤404使用散列索引340,诸如路径模式索引或其它过滤器模式索引。例如,表达式390可以是过滤器表达式,诸如部分或整个WHERE子句或XPath,其被用作进入驻留在存储器330(其可以是快速RAM)中的散列索引380的查找关键字。散列索引380可以返回存储在存储单元格中的分层数据对象的标识符和/或分层数据对象内的项目的位置或标识符。

存储单元格311可以响应于访问请求、调度表和/或资源需求而自主地更新其存储侧索引。基于使用情况统计信息370,步骤405动态地将项目移除或添加到存储侧索引。例如,数据访问请求380可以承载新的分层数据对象以持久化到存储单元格311中。新的分层数据对象可以包含新的分层数据对象内的遍历路径可到达的项目,这些遍历路径与已经存储在存储侧索引中的路径模式匹配。这些路径模式的映射可以在存储侧索引中被更新,以包括这些项目在新的分层数据对象中的位置。

存储单元格311可以响应于访问请求、调度表和/或资源需求而自主地创建或丢弃优化元数据。响应于阈值频率,诸如针对使用情况统计信息370的选择性或其它方面,步骤406创建或丢弃存储侧索引、本地关系视图、本地高速缓存和/或本地IMCU。例如,当随机访问对顺序的使用比率低于阈值时,高速缓存可以被缩小或被丢弃和/或存储侧索引可以被丢弃。当存储器可用性降至低于阈值时,IMCU可以被丢弃和/或高速缓存可以被缩小或被丢弃。

由RDBMS测得的(一个或多个)查询或(一个或多个)联接的阈值频率可以使得RDBMS创建或丢弃可以跨越一个、一些或全部存储单元格的内容的数据库视图。数据库视图或其视图表可以被RDBMS进一步操作,以测量存储层300的内容和/或使用情况的统计信息。因此,RDBMS可以维护用于RDBMS优化的集中式统计信息,该集中式统计信息与存储单元格中的本地统计信息正交(即,分开)。

5.0示例存储单元格

图5是描绘实施例中的示例自主存储单元格500的框图。存储单元格500具有以各种方式面向内容的存储侧索引。存储单元格500可以是存储单元格111的实施方式。

文档521-522中的每一个可以被存储为自包含的单元,诸如blob、字节数组、数据结构或文档对象模型。在实施例中,文档521-522与客户端交换和/或以二进制编码(诸如数据结构,诸如Oracle的OSON(即,二进制JSON))存储在存储单元格111中。例如,客户端驱动程序可以在OSON与JSON之间、在OSON与自定义文档对象模型(DOM)之间、在OSON与专有应用编程接口(API)之间和/或在OSON与传统对象模型之间进行双向转码,诸如利用数据绑定和/或编组框架。在实施例中,自包含的二进制格式包含文档和专用于访问文档内部的(一个或多个)索引(诸如项目E-H或I-J)。

在标题为“Techniques Related to Binary Encoding of Hierarchical DataObjects to Support Efficient Path Navigation of the Hierarchical DataObjects”的相关的美国专利No.10,262,012中描述了OSON的示例实施方式。OSON支持更高效的查询执行和JSON文档的部分更新。具体而言,除其它之外,通过降低重做日志记录开销和加速路径查询,OSON使得能够在DML期间快速进行存储侧索引维护,从而使部分JSON文档更新成为可能,因为OSON格式本身就是DOM树。

在实施例中,文档521-522可以被持久化到关系数据库中。例如,文档521可以被存储为二进制/字符大对象(即,BLOB或CLOB)。可替代地,文档521可以在逻辑上被分片成单独的字段,以存储到关系数据库的单独的列和/或单独的表中。

无论诸如二进制或原始文本之类的编码细节如何,当文档521作为自包含单元存储时,整个文档的存储位置和/或标识符的使用可以加速访问。例如,存储侧索引541可以是包含文档的位置或标识符(诸如511-512)的文档索引。取决于实施例,文档标识符511-512可以跨文档网络是全局唯一的,或者仅在存储单元格500内是本地唯一的。

在IMCU实施例中,文档标识符511-512可以仅在IMCU内是唯一的。例如,文档标识符511-512可以被偏移到IMCU中。例如,列式IMCU仅存储同类项目(诸如颜色)的值。例如,当文档标识符511-512偏移到分别以相同顺序存储相同文档的颜色和日期的一对列式IMCU中时,可以使用从一个IMCU中选择的偏移量来交叉引用另一个IMCU。

此外,(一个或多个)位图索引可以被限制到特定的IMCU,并且在一些情况下,可以通过针对不同列/字段的IMCU位图的按位合并或分离来实现复合过滤。这些位图可以被懒惰创建,诸如仅针对当前访问请求。在数据库实施例中,文档标识符511-512可以被用作用于访问相应文档521-522的主键,该文档521-522可以各自存储为表列中的BLOB。

每个项目E-H可以符合相应的数据类型,诸如弱类型(诸如文本)或强类型(诸如时间戳)。强类型可以促进时间和/或空间的附加优化。例如,由于时区的缘故,芝加哥时间戳和波士顿时间戳的原始文本可能是相同UTC时间的交替表示,因此虽然在字面上并不等同,但在语义上是等同的。当时间戳内部具有相同的规范编码时,可以通过避免数据转换来加速时间戳的扫描。

当按项目类型分离时,存储侧索引也可以被加速,这与差异项目的原始文本的单个单一存储侧索引相反。例如,存储侧索引541可以专用于时间戳项目,并且存储侧索引542可以专用于另一个强类型或原始文本。分离的存储侧索引还可以使存储单元格自主性受益,因为一个存储单元格可以主要处理时间戳,而另一个存储单元格可以主要处理另一种数据类型。而强制两个存储单元格仅使用相同数据类型的相应存储侧索引将减少本地和全局吞吐量。例如,存储单元格500可以基于本地流量和存储单元格500的内容来自主地决定哪些数据类型值得存储侧索引。

一些数据类型虽然表现为内容内的项目,但可以具有结构性质的数据类型。例如,项目可以表示XML标签,为此可以存在“标签”数据类型。同样,项目可以表示键/值对的键(诸如JSON字典键或XML属性名),为此可以存在“键”数据类型。例如,存储侧索引541可以

因为文档521-522在内部是分层的,所以项目可以嵌套。例如,项目I包含项目J,诸如对于XML形式的元素或OSON或JSON形式的数组或字典。诸如路径查询(诸如XPath)之类的查询可以通过诸如路径索引之类的层次结构索引来加速。例如,如果存储侧索引541是路径索引,那么存储侧索引541可以反映出项目I包含项目J。

6.0示例存储侧索引管理处理

图6是描绘实施例中以各种方式使用和管理面向内容的存储侧索引的存储单元格500的流程图。参考图5来讨论图6。

图6示出了由存储单元格500执行的步骤。取决于示例和/或实施例,这些步骤中的一些被重新排序或跳过。例如,这些步骤中的一些支持读取,一些步骤支持写入,而一些步骤支持读取和写入。

如果存储单元格500以二进制格式持久化文档521-522,那么当(一个或多个)客户端发送该二进制格式的文档521-522时,效率可以如下提高。步骤601诸如从客户端接收二进制格式(诸如OSON)的文档521-522。二进制格式可以比文本更密集,因此消耗更少的网络带宽。仅将原始文档编码为二进制格式的操作就可能需要计算机资源,这在每个客户端执行这种二进制编码时可以受益于水平可伸缩性。这防止文档网络成为多个客户端并发编码的瓶颈。

步骤602检测哪些本地文档与访问请求有关。例如,可以查询存储器中的路径索引或其它存储侧索引以获得潜在相关文档的标识符。例如,存储侧索引可以识别与查询相关的文档。诸如当自动决定是作为新文档插入文档还是代替地选择性地更新文档的(一个或多个)部分时,相同或不同的存储侧索引可以指示文档是否已经被持久化,。

步骤603持久化接收到的(一个或多个)文档。这可能需要以二进制格式持久化文档,诸如接收到或通过将文档动态编码为二进制。文档可以被持久化到文件系统和/或数据库中。持久化到数据库中可以是原样的(例如,BLOB)或根据分解(诸如将文档分片成字段以将其持久化为表列)。

如上面所解释的,对于若干项目数据类型中的每一个,可以存在存储侧索引的单独实例,和/或一些种类的存储侧索引可以被限制到一些种类的项目。步骤604基于项目是什么数据类型来选择用于访问项目的存储侧索引的种类和/或实例。例如,JSON字典条目或XML标签项目可能需要分层索引,该索引可能已经使用附加结构化信息(诸如文档类型描述符(DTD)、XML模式或文档结构的其它示意图描述符)被构建,或可能未使用附加结构化信息被构建。例如,步骤605使用指示项目之间的包含关系的层次结构索引,诸如用于给定父项目的子项目的计数或定位。

步骤606更新已经持久化的(一个或多个)文档。例如,存储单元格500可以自动决定是覆写(即,完全替换)文档,还是替代地选择性地仅更新文档中改变的项目。文档更新可能需要基于文档内实际改变的项目来更新一个或多个存储侧索引。

对于查询,文档网络可以将匹配的文档返回到客户端。例如,如果文档被存储为二进制,那么匹配的文档可以通过步骤607作为二进制(为了减小的尺寸和/或水平可伸缩性)被返回,或者在返回它们之前由存储单元格500解码为文本。

硬件概述

根据一个实施例,本文描述的技术由一个或多个专用计算设备实现。专用计算设备可以是硬连线的以执行这些技术,或者可以包括数字电子设备(诸如被持久地编程为执行这些技术的一个或多个专用集成电路(ASIC)或现场可编程门阵列(FPGA)),或者可以包括被编程为根据固件、存储器、其它存储装置或组合中的程序指令执行这些技术的一个或多个通用硬件处理器。这种专用计算设备还可以将定制的硬连线逻辑、ASIC或FPGA与定制编程相结合,以实现这些技术。专用计算设备可以是台式计算机系统、便携式计算机系统、手持设备、联网设备或者结合硬连线和/或程序逻辑以实现这些技术的任何其它设备。

例如,图7是图示可以在其上实现本发明实施例的计算机系统700的框图。计算机系统700包括总线702或用于传送信息的其它通信机制,以及与总线702耦合用于处理信息的硬件处理器704。硬件处理器704可以是例如通用微处理器。

计算机系统700还包括耦合到总线702用于存储将由处理器704执行的信息和指令的主存储器706,诸如随机存取存储器(RAM)或其它动态存储设备。主存储器706还可以用于存储在执行由处理器704执行的指令期间的临时变量或其它中间信息。这些指令当存储在处理器704可访问的非暂态存储介质中时,使得计算机系统700成为被定制以执行指令中指定的操作的专用机器。

计算机系统700还包括耦合到总线702用于存储用于处理器704的静态信息和指令的只读存储器(ROM)708或其它静态存储设备。提供存储设备710(诸如磁盘、光盘或固态驱动器)并耦合到总线702用于存储信息和指令。

计算机系统700可以经由总线702耦合到显示器712(诸如阴极射线管(CRT)),用于向计算机用户显示信息。包括字母数字键和其它键的输入设备714耦合到总线702,用于将信息和命令选择传送到处理器704。另一种类型的用户输入设备是光标控件716(诸如鼠标、轨迹球或光标方向键),用于将方向信息和命令选择传送到处理器704并用于控制显示器712上的光标移动。这种输入设备通常在两个轴(第一轴(例如,x)和第二轴(例如,y))上具有两个自由度,这允许设备指定平面中的位置。

计算机系统700可以使用定制的硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑(它们与计算机系统相结合,使计算机系统700成为或将计算机系统700编程为专用机器)来实现本文所述的技术。根据一个实施例,响应于处理器704执行包含在主存储器706中的一个或多个指令的一个或多个序列,计算机系统700执行本文的技术。这些指令可以从另一个存储介质(诸如存储设备710)读入到主存储器706中。包含在主存储器706中的指令序列的执行使得处理器704执行本文所述的处理步骤。在替代实施例中,可以使用硬连线的电路系统代替软件指令或与软件指令组合。

如本文使用的术语“存储介质”是指存储使机器以特定方式操作的数据和/或指令的任何非暂态介质。这种存储介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如光盘、磁盘或固态驱动器,诸如存储设备710。易失性介质包括动态存储器,诸如主存储器706。存储介质的常见形式包括例如软盘、柔性盘、硬盘、固态驱动器、磁带或任何其它磁数据存储介质、CD-ROM、任何其它光学数据存储介质、具有孔图案的任何物理介质、RAM、PROM和EPROM、FLASH-EPROM、NVRAM、任何其它存储器芯片或盒式磁带。

存储介质不同于传输介质但可以与传输介质结合使用。传输介质参与在存储介质之间传送信息。例如,传输介质包括同轴线缆、铜线和光纤,包括包含总线702的导线。传输介质也可以采用声波或光波的形式,诸如在无线电波和红外数据通信期间生成的那些波。

各种形式的介质可以参与将一个或多个指令的一个或多个序列传送到处理器704以供执行。例如,指令最初可以在远程计算机的磁盘或固态驱动器上携带。远程计算机可以将指令加载到其动态存储器中,并使用调制解调器通过电话线发送指令。计算机系统700本地的调制解调器可以经电话线接收数据并使用红外发送器将数据转换成红外信号。红外检测器可以接收红外信号中携带的数据,并且适当的电路系统可以将数据放在总线702上。总线702将数据携带到主存储器706,处理器704从主存储器706检索并执行指令。由主存储器706接收的指令可以可选地在由处理器704执行之前或之后存储在存储设备710上。

计算机系统700还包括耦合到总线702的通信接口718。通信接口718提供耦合到网络链路720的双向数据通信,该网络链路720连接到本地网络722。例如,通信接口718可以是集成服务数字网(ISDN)卡、线缆调制解调器、卫星调制解调器或者提供与对应类型的电话线的数据通信连接的调制解调器。作为另一个示例,通信接口718可以是局域网(LAN)卡,以提供与兼容LAN的数据通信连接。还可以实现无线链路。在任何此类实现中,通信接口718都发送和接收携带表示各种类型信息的数字数据流的电信号、电磁信号或光信号。

网络链路720通常通过一个或多个网络向其它数据设备提供数据通信。例如,网络链路720可以提供通过本地网络722到主计算机724或到由互联网服务提供商(ISP)726操作的数据设备的连接。ISP 726进而通过全球分组数据通信网络(现在通常称为“互联网”728)提供数据通信服务。本地网络722和互联网728都使用携带数字数据流的电信号、电磁信号或光学信号。通过各种网络的信号以及网络链路720上并通过通信接口718的信号(其将数字数据携带到计算机系统700和从计算机系统700携带数字数据)是传输介质的示例形式。

计算机系统700可以通过(一个或多个)网络、网络链路720和通信接口718发送消息和接收数据,包括程序代码。在互联网示例中,服务器730可以通过互联网728、ISP 726、本地网络722和通信接口718发送对应用程序的所请求代码。

接收到的代码可以在被接收到时由处理器704执行,和/或存储在存储设备710或其它非易失性存储装置中以供稍后执行。

软件概述

图8是可以用于控制计算机系统700的操作的基本软件系统800的框图。软件系统800及其组件(包括它们的连接、关系和功能)仅仅是示例性的,并且不意味着限制(一个或多个)示例实施例的实现。适于实现(一个或多个)示例实施例的其它软件系统可以具有不同的组件,包括具有不同的连接、关系和功能的组件。

提供软件系统800用于指导计算系统700的操作。可以存储在系统存储器(RAM)706和固定存储装置(例如,硬盘或闪存)710上的软件系统800包括内核或操作系统(OS)810。

OS 810管理计算机操作的低级别方面,包括管理进程的执行、存储器分配、文件输入和输出(I/O)以及设备I/O。表示为802A、802B、802C...802N的一个或多个应用可以被“加载”(例如,从固定存储装置710传送到存储器706中)以供系统800执行。意图在计算机系统700上使用的应用或其它软件也可以被存储为可下载的计算机可执行指令集,用于例如从互联网位置(例如,Web服务器、app商店或其它在线服务)下载和安装。

软件系统800包括图形用户界面(GUI)815,用于以图形(例如,“点击”或“触摸手势”)方式接收用户命令和数据。进而,这些输入可以由系统800根据来自操作系统810和/或(一个或多个)应用802的指令来操作。GUI 815还用于显示来自OS 810和(一个或多个)应用802的操作结果,据此用户可以提供附加的输入或终止会话(例如,注销)。

OS 810可以直接在计算机系统700的裸硬件820(例如,(一个或多个)处理器704)上执行。可替代地,管理程序或虚拟机监视器(VMM)830可以插入在裸硬件820和OS 810之间。在这个配置中,VMM 830充当OS 810与计算机系统700的裸硬件820之间的软件“缓冲”或虚拟化层。

VMM 830实例化并运行一个或多个虚拟机实例(“客户(guest)机”)。每个客户机包括“客户”操作系统(诸如OS 810),以及被设计为在客户操作系统上执行的一个或多个应用(诸如(一个或多个)应用802)。VMM 830向客户操作系统呈现虚拟操作平台并管理客户操作系统的执行。

在一些实例中,VMM 830可以允许客户操作系统如同其直接在计算机系统800的裸硬件820上运行一样运行。在这些实例中,被配置为直接在裸硬件820上执行的客户操作系统的相同版本也可以在VMM 830上执行而无需修改或重新配置。换句话说,VMM 830可以在一些情况下向客户操作系统提供完全硬件和CPU虚拟化。

在其它实例中,客户操作系统可以被专门设计或配置为在VMM 830上执行以提高效率。在这些实例中,客户操作系统“意识到”它在虚拟机监视器上执行。换句话说,VMM 830可以在某些情况下向客户操作系统提供半虚拟化。

计算机系统进程包括硬件处理器时间的分配,以及存储器(物理和/或虚拟)的分配、用于以下的存储器的分配:存储由硬件处理器执行的指令的、用于存储由硬件处理器执行指令所生成的数据、和/或用于当计算机系统进程未运行时在硬件处理器时间的分配之间存储硬件处理器状态(例如,寄存器的内容)。计算机系统进程在操作系统的控制下运行,并且可以在计算机系统上执行的其它程序的控制下运行。

云计算

本文一般地使用术语“云计算”来描述计算模型,该计算模型使得能够按需访问诸如计算机网络、服务器、软件应用和服务的计算资源的共享池,并且允许以最少的管理工作或服务提供商交互来快速提供和释放资源。

云计算环境(有时称为云环境或云)可以以各种不同方式实现,以最好地适应不同要求。例如,在公共云环境中,底层计算基础设施由组织拥有,该组织使其云服务可供其它组织或公众使用。相反,私有云环境一般仅供单个组织使用或在单个组织内使用。社区云旨在由社区内的若干组织共享;而混合云包括通过数据和应用可移植性绑定在一起的两种或更多种类型的云(例如,私有、社区或公共)。

一般而言,云计算模型使得先前可能已经由组织自身的信息技术部门提供的那些职责中的一些代替地作为云环境内的服务层来递送,以供消费者使用(根据云的公共/私有性质,在组织内部或外部)。取决于特定实现,由每个云服务层提供或在每个云服务层内提供的组件或特征的精确定义可以有所不同,但常见示例包括:软件即服务(SaaS),其中消费者使用在云基础设施上运行的软件应用,同时SaaS提供者管理或控制底层云基础设施和应用。平台即服务(PaaS),其中消费者可以使用由PaaS提供者支持的软件编程语言和开发工具,以开发、部署和以其它方式控制它们自己的应用,同时PaaS提供者管理或控制云环境的其它方面(即,运行时执行环境下的一切)。基础设施即服务(IaaS),其中消费者可以部署和运行任意软件应用,和/或提供进程、存储、网络和其它基础计算资源,同时IaaS提供者管理或控制底层物理云基础设施(即,操作系统层下面的一切)。数据库即服务(DBaaS),其中消费者使用在云基础设施上运行的数据库服务器或数据库管理系统,同时DbaaS提供者管理或控制底层云基础设施和应用。

呈现上述基本计算机硬件和软件以及云计算环境是为了说明可以用于实现(一个或多个)示例实施例的基本底层计算机组件。但是,(一个或多个)示例实施例不必限于任何特定的计算环境或计算设备配置。代替地,(一个或多个)示例实施例可以在本领域技术人员依据本公开将理解为能够支持本文呈现的(一个或多个)示例实施例的特征和功能的任何类型的系统体系架构或处理环境中实现。

在前述说明书中,已经参考许多具体细节描述了本发明的实施例,这些具体细节可能因实施方案而不同。因此,应当在说明性而不是限制性的意义上看待说明书和附图。本发明范围的唯一且排他的指示以及申请人意在要作为本发明范围的是以由本申请产生的一组权利要求的具体形式的所产生权利要求的字面和等同范围,包括任何后续的校正。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号