CN108369598A - 对于半结构化数据的列状数据布置 - Google Patents
对于半结构化数据的列状数据布置 Download PDFInfo
- Publication number
- CN108369598A CN108369598A CN201680073840.8A CN201680073840A CN108369598A CN 108369598 A CN108369598 A CN 108369598A CN 201680073840 A CN201680073840 A CN 201680073840A CN 108369598 A CN108369598 A CN 108369598A
- Authority
- CN
- China
- Prior art keywords
- data
- semi
- row
- node
- structured
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24542—Plan optimisation
- G06F16/24544—Join order optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/80—Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
- G06F16/84—Mapping; Conversion
- G06F16/86—Mapping to a database
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/80—Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
- G06F16/81—Indexing, e.g. XML tags; Data structures therefor; Storage structures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Operations Research (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
提供了用于将半结构化层级数据去规范化为虚拟表的技术。在实施例中,半结构化数据文档集合的至少一部分被去规范化,用于改进涉及遍历半结构化数据文档集合的半结构化数据层级的查询的执行。基于提取出的半结构化数据的模式,生成去规范化布置,其中半结构化数据的层级关系被转换为列集合。通过将去规范化布置应用到半结构化数据上,去规范化布置在虚拟表中进行物化。在实施例中,接收到的涉及遍历半结构化数据层级的查询被转换为可以在虚拟表上执行的关系查询。在虚拟表上执行关系查询改进了生成结果数据集的性能。
Description
技术领域
本发明涉及数据库系统,并且更具体地,涉及评估对数据库系统中半结构化数据的查询。
背景技术
半结构化数据格式(诸如JSON和XML)广泛用于存储大量数据集,特别是因为半结构化数据可方便地存储在一个或多个文档中而不会丢失数据的层级信息(hierarchicalinformation)。数据的层级信息可以包括信息关系和彼此引用的数据部分的布置。例如,半结构化数据通常可以表示为节点的层级,每个节点包含数据的一部分。在这样的层级中,包含半结构化数据的一部分的每个节点与层级中的一个或多个其它节点具有层级关系:节点在半结构化数据中可以是另一个节点的父节点、兄弟节点或子节点。
虽然在大量文档中存储半结构化数据的大型数据集很方便,但查询如此大量的文档具有挑战性。特别地,查询可能请求与查询定义的值约束匹配并且位于层级的特定级别/分支/节点中的数据。为了满足查询,匹配查询标准的每个文档需要根据层级进行浏览以匹配所请求的数据。这些操作可能非常昂贵,尤其是考虑到可能需要遍历数千甚至数十万个文档。如果所涉及的层级的模式是未知的,那么层级的遍历是特别昂贵的操作。为了查询未知或“隐式”模式数据,必须假定关于半结构化数据的层级,并且结果返回的数据只有在半结构化数据确实符合假定的层级时才是正确的。
一种解决方案是规范化半结构化数据并将数据存储在关系数据库的关系表中,以利用数据库管理系统(DBMS)的强大查询功能。但是,即使以关系方式存储数据时,查询性能也不是最优的。对于具有一对多基数关系的数据集,半结构化数据的数据集单独存储在关系数据库中以避免重复。例如,对于除了名称之外还包含客户地址和电话号码的客户数据,每个客户名称可以对应于多个地址以及多个电话号码。因此,如果所有客户数据都要存储在DBMS中的关系数据库的单个表中,那么为了保留客户名称与地址和电话号码之间的关系,每个客户名称将针对每个地址再次重复,并且然后针对每个电话号码重复。将地址和电话号码存储在单独的表中,与客户名称的外键关系存储在单独的表中,避免了重复客户名称。术语“规范化”是指根据数据集的基数关系和数据类型将数据分成数据集的处理。
虽然通过避免重复对半结构化数据进行规范化提高了存储效率,但与文档存储相比尚未改进的查询性能可能仍然使其得不到重视。需要来自多个数据集的数据的查询需要根据其相应的关系来加入数据集。例如,如果查询针对选择客户名称连同地址和电话号码,那么查询执行包括将客户名称表与客户地址表和客户电话号码表接合以产生结果数据集。这种接合操作可能消耗大量资源,尤其在经常执行这种接合操作并且数据集大的情况下。
一种解决方案是产生以规范化方式物理存储的数据的去规范化“视图”。代替以去规范化的方式存储数据的另一个副本,DBMS存储产生去规范化视图的预先计算的查询。当接收到引用视图的用户查询时,执行视图的存储的预先计算的查询以产生该视图的结果数据集。虽然存储的查询是预先计算的,但DBMS仍然必须从物理存储中检索数据并将数据布置在一起以获得结果数据集。因此,即使查询视图也会比从数据库中的单个表中检索数据消耗更多的计算资源。
附图说明
在附图中:
图1A是根据实施例的数据库管理系统(DBMS)的框图,该数据库管理系统同时维护易失性存储器中的镜像格式虚拟表和持久性存储装置中的持久性格式虚拟表;
图1B是描绘根据实施例的用于针对半结构化数据文档集合处理查询并且为所查询的半结构化数据生成虚拟表的程序逻辑的处理图;
图2描绘了根据实施例的包含所描绘的样本JSON数据的半结构化数据文档集合的示例;
图3是根据实施例的半结构化数据分区的数据指南的框图;
图4是根据实施例的半结构化数据文档集合的数据指南的框图;
图5是根据实施例的层级布置中的半结构化数据分区的框图;
图6是根据实施例的层级布置中的半结构化文档集合的框图;
图7是图示根据一个或多个实施例的用于基于半结构化数据的数据指南来生成去规范化布置的处理的框图。
图8-图10描绘了根据实施例的使用JSON_TABLE运算符的去规范化布置的示例;
图11A-图11B描绘了根据实施例的虚拟表的示例;以及
图12是图示可以用于实现本文所描述的技术的计算机系统的框图。
具体实施方式
在以下描述中,出于解释的目的,阐述了许多具体细节以便提供对本发明的透彻理解。但是显而易见的是,可以在没有这些具体细节的情况下实践本发明。在其它情况下,众所周知的结构和设备以框图的形式示出,以避免不必要地模糊本发明。
总体概述
描述了用于为包含半结构化数据的文档集合生成各种细节的去规范化数据布置的技术。术语“去规范化数据布置”(或简称“去规范化布置”)是指将半结构化数据的层级形式映射到选定细节级别的平面关系方案的数据布置。对于半结构化数据的任何文档集合,可以生成去规范化数据布置,无论集合的文档中的半结构化数据是否具有相关或不相关的结构。在实施例中,去规范化数据布置将半结构化数据的层级形式“平面化”为列集合。所生成的列保留原始行基数,即,列的行中的每个值与同一行中的另一列的值相关,并且如果不相关,那么为另一列的行插入空(NULL)值。
这样的去规范化数据布置显著地加快了对半结构化数据的查询。接收到的查询不必遍历半结构化数据的层级,而是使用查询谓词(predict)和其它基于扫描或接合的查询技术从列中提取数据。
在一个实施例中,去规范化数据布置的列数据类型和行值格式是根据半结构化数据的文档的显式模式来确定的。在另一个实施例中,通过首先为半结构化数据生成隐式模式来确定数据布置。隐式和显式模式在本文中都被称为“数据指南”在于2015年4月29日提交的申请号为14/699,685的美国专利申请“Dynamically Updating Data Guide ForHierarchical Data Objects”中描述了从半结构化数据生成数据指南的在本文中被称为“数据指南应用(Data Guide Application)”技术,该专利申请的内容并入本文。
在一些实施例中,根据去规范化布置来表示集合中的半结构化数据的一部分而不是整个集合。术语“半结构化数据分区”是指这样的半结构化数据的一部分。半结构化数据分区的大小是预先确定的或者可以从为集合接收到的查询中推导出来。
在实施例中,为了加快对为半结构化数据接收到的查询的评估,指定遍历层级的查询中的路径表达被转换为关系语句。由于层级半结构化数据是平面化的,因此不能容易地在平面化半结构化数据上执行具有路径表达的查询。因此,所接收到的查询被转换为要在平面化数据上执行的关系查询,并产生与原始查询中的路径表达相同的输出。
此外,所接收到的针对半结构化数据文档集合的查询中的路径表达可以确定针对去规范化布置从半结构化数据中选择的细节级别。为半结构化数据的去规范化数据布置选择的细节级别取决于评估路径表达所需的层级信息的量:例如,父子层级关系的数量或层级的特定级别处的兄弟的顺序。这样的信息可以用于生成更紧凑形式的半结构化数据的去规范化布置用于关系查询执行。
在实施例中,DBMS中的半结构化数据的去规范化数据布置由关系语句来表示。例如,“SELECT”子句可以与JSON_TABLE运算符一起用于JSON类型的半结构化数据,或者与XMLTable运算符一起用于XML类型的半结构化数据。使用这些半结构化数据运算符,半结构化数据被布置在具有基于数据指南确定的类型和值格式的列集合中。
在实施例中,执行表示半结构化数据的去规范化布置的关系语句所产生的数据被存储在存储器中。结果存储的数据在本文中被称为“虚拟表”,其列对应于半结构化数据的去规范化布置的列集合。虚拟表可以存储在持久性或易失性存储器中。在于2014年7月21日提交的申请号为14/337,179的美国专利申请“Mirroring,In Memory,Data From Disk ToImprove Query Performance”中进一步描述了将数据存储在虚拟表中的在本文中被称为“镜像数据应用(Mirroring Data Application)”的技术,该专利申请的全部内容通过引用并入本文。
通用体系架构
图1A是根据一个实施例的用于实现本文所描述的技术的数据库管理系统的框图。参考图1,数据库管理系统(DBMS)100包括易失性存储器102和持久性存储装置110,持久性存储装置110存储由数据优化器130管理并且在其上执行由查询优化器126处理的查询的数据。
易失性存储器102一般表示由DBMS 100使用的随机存取存储器表示,并且可以由任何数量的存储器设备来实现。通常,当发生故障时,存储在易失性存储器102中的数据丢失。
持久性存储装置110一般表示任何数量的持久性存储设备,诸如磁盘、闪存存储器和/或固态驱动器。与易失性存储器102不同,当发生故障时,存储在持久性存储装置110中的数据不丢失。因此,在故障之后,持久性存储装置110中的数据可以用于重建在易失性存储器102中丢失的数据。
与半结构化数据的盘上格式对应的格式在本文中被称为“持久性格式”或“PF”。处于持久性格式的数据在本文中被称为PF数据。独立于盘上(on-disk)格式的存储器中(in-memory)格式被称为“镜像格式”或“MF”。处于镜像格式的数据在本文中被称为MF数据。
PF数据112以一种或多种持久性格式驻留在持久性存储设备110上。PF数据112可以作为半结构化数据116的文档集合114存储在持久性存储设备110上。每个文档可以作为平面文件存储在连续的存储器地址空间中。附加地或替代地,PF数据112可以以诸如PF虚拟表108的虚拟表的形式存储在持久性存储设备110上。PF虚拟表108可以是任何级别的组织(例如,表、列、行、行为主的盘块、列为主的盘块等)上的PF数据112的结构。在实施例中,根据下面描述的技术,数据优化器130从文档集合114的半结构化数据116生成虚拟表并将虚拟表存储在PF数据112中作为PF虚拟表108。
易失性存储器102还包括用于PF数据的高速缓存的存储器高速缓存106。在高速缓存106内,数据以基于其中数据驻留在PF数据112内的格式的格式被存储。例如,如果持久性格式是行为主的盘块,那么高速缓存106可以包含行为主的盘块的高速缓存拷贝。
另一方面,MF数据104处于与持久性格式无关的格式。例如,在其中持久性格式是行为主的非压缩盘块的情况下,镜像格式可以是列为主的压缩单元。由于镜像格式与持久性格式不同,因此MF数据104通过根据在“镜像数据应用”中所描述的技术在PF数据112上执行变换来产生。
数据生成器124可以执行这些变换,这些变换既可以在易失性存储器102(无论在启动时还是根据需要时)被初始地用MF数据104填充时发生,又可以在易失性存储器102在故障之后用MF数据104重新填充时发生。在实施例中,数据生成器124可以从PF数据112中选择数据并且对该数据进行镜像以基于一个或多个因素生成MF数据104,该一个或多个因素在于2015年8月31日提交的申请号为14/841,56的美国专利申请“Selective DataCompression For In-Memory Databases”中进行了描述,在本文中被称为“选择性镜像应用(Selective Mirroring Application)”,该专利申请的全部内容通过引用并入本文。
在实施例中,数据库服务器120维护与PF数据112在事务上一致的存储器中MF数据104。MF数据104在事务上是一致的,因为从MF数据104提供给事务的任何数据项将是如果数据项是从PF数据112中被提供的情况下已经被提供的相同版本。
重要的是,MF数据104的存在可以对向数据库服务器提交数据库命令、利用MF数据104的数据库应用是透明的。例如,被设计为与在PF数据112上独自操作的DBMS交互的那些相同的应用除了PF数据112之外还可以不加修改地与维护MF数据104的数据库服务器交互。此外,对那些应用透明的是,该数据库服务器可以使用MF数据104来更高效地处理那些数据库命令中的一些或全部。“镜像数据应用”中描述了关于利用MF数据和PF数据的DBMS的进一步细节。
功能概述
DBMS 100可以接收来自一个或多个数据库应用(未示出)的用于在数据库服务器120上执行的对半结构化数据的查询。图1B是描绘在实施例中用于针对半结构化数据文档集合150处理查询140并基于用于所查询的半结构化数据的虚拟表160生成结果集165的程序逻辑的处理图。
为了执行查询(诸如查询140),使用查询优化器126的DBMS 100可以首先将查询140转换为用于访问来自数据库服务器120中的PF数据112或MF数据104中的数据的有序运算符集。每个运算符可以包含对另一个运算符的输出数据或PF数据112或MF数据104的一个或多个数据操作。查询优化器126可以生成运算符集的置换。在实施例中,为了确保选择最优的运算符集,查询优化器126的统计数据收集器128收集并维护关于DBMS 100的统计数据。由统计数据收集器128收集到的各种类型的统计数据在“选择性镜像应用”中被进一步讨论。
生成半结构化数据分区和数据指南
统计数据收集器128的统计数据还可以帮助减少需要处理用于评估查询140的数据量。为了准确地确定结果集165,将需要处理查询140中所引用的完整数据集。在实施例中,虚拟表160从半结构化数据文档集合150整体生成(如图1B中从半结构化数据文档集合150到数据指南生成器132的虚线箭头线所示)。
在另一个实施例中,统计数据收集器128的统计数据用作数据生成器124的输入以确定半结构化数据文档集合150的最多被查询的部分。半结构化数据的最多被查询的部分,即半结构化数据分区152,与半结构化数据文档集合150相比具有更少的数据,同时,半结构化数据分区152很可能包含确定查询140的结果集165所需的所有数据。在相关的实施例中,为半结构化数据分区152选择的半结构化数据的量进一步取决于在MF数据104中为虚拟表160分配的存储器中压缩单元(IMCU)。半结构化数据分区152的大小根据用于IMCU的压缩级别和为虚拟表160分配的IMCU的数量来确定。
在另一个替代实施例中,查询优化器可以对接收到的查询140进行预处理以提取关于被查询的层级对象的信息(在图1B中被称为对象信息158)。数据生成器124基于用于生成半结构化数据分区152的对象信息158来选择半结构化数据,该半结构化数据分区152至少包含评估查询140所需的半结构化数据对象。
为了对半结构化数据去规范化以供更快速地进行查询处理,可以从半结构化数据152或半结构化数据文档集合150中提取对半结构化数据的层级节点的描述,这在本文中被称为“输入半结构化数据”。在实施例中,数据指南生成器132根据“数据指南应用”中描述的技术来生成描述输入半结构化数据的数据指南154。数据指南154基于遍历半结构化数据和记录每个层级节点的约束的数据指南生成器132来描述对层级节点的约束。这些约束可以包括所选择的节点是标量属性(非复杂数据类型)还是(复杂数据类型的)对象、节点是单例(singleton)还是数组、数据类型以及标量属性值的范围或长度。
在一个或多个实施例中取决于输入半结构化数据,所生成的数据指南154可以不同。在实施例中,即使半结构化数据分区152是半结构化数据文档集合150的一部分,半结构化数据文档集合150也可以具有与半结构化数据分区152的数据指南不同的数据指南。例如,对于JSON半结构化数据集合,如果数据指南生成器132仅已遇到输入半结构化数据中的特定对象的单个实例,那么数据指南154可以将特定对象描述为单例,而如果数据指南生成器132已遇到特定对象的多个实例,那么数据指南154可以将特定对象描述为数组。类似地,如果在半结构化数据分区152中,特定标量属性的值是整数,那么数据指南154可以将特定标量属性描述为数字,而如果半结构化数据文档集合150包含具有至少一个非数字字符的特定标量属性的附加值,那么数据指南154可以将特定标量属性描述为串。
为了图示查询处理和虚拟表的生成,半结构化数据文档集合150的示例包含图2中所描绘的样本JSON数据。在一个示例中,当统计数据收集器128基于半结构化数据文档集合150的查询统计数据来确定“add_items”对象是最多被查询的时,生成半结构化数据分区152。因此,在这样的示例中,数据生成器124可以为半结构化数据分区152选择“add_items”对象的实例。但是,如果在另一个示例中“add_items”对象是最少被查询的,那么从半结构化数据分区152中排除“add_items”对象的实例。
在另一个示例中,统计数据收集器128可以指示poDocument1.json 202比半结构化数据文档集合150中的其它文档被显著查询得更多。作为响应,数据生成器124可以选择poDocument1.json 202作为半结构化数据分区152并且将poDocument1.json 202中的半结构化数据提供给数据指南生成器132。在这样的示例中,数据指南生成器132可以遍历半结构化数据以生成数据指南154。图3描绘了针对半结构化数据152的poDocument1.json 202的结果数据指南154。
在又一个示例中,如图4所示,数据指南生成器可以基于半结构化数据文档集合152来整体生成数据指南154。由于集合通常具有更多对象,因此针对集合的数据指南154可以与先前示例的半结构化数据分区152的数据指南154不同。即使对于同一个对象,数据指南也可能包含不同的约束。
图4描绘了从图2中所描绘的文档集合生成的数据指南。由于该集合具有比先前示例中的分区更多数量的对象,因此在图4中描绘了比图3中更多数量的对象。此外,由于数据生成器132已经遇到在poDocument2.json 204中作为对象的数组“物品”,因此“物品”对象是图4中的数组而不是图3中的单例。通过使标量属性“items[].itemPrice”作为串而不是作为数字,针对集合的数据指南中的“物品”对象与针对半结构化数据分区152的相同“物品”对象进一步不同,因为poDocument2.json 204包含不作为数字的具有值“$1.10”的“itemPrice”标量属性。
数据指南154的层级表示可以用于图示相关的关系(relational relationship),诸如数据指南154的层级中的节点之间的主从(master-detail)关系。例如,图5根据图3的数据指南154描绘了半结构化数据分区152的层级信息。节点224和节点222是父节点220的后代节点。特别地,节点222的子树的“部分(parts)”数组中的每个元素描述“物品”节点220的进一步细节。类似地,图6根据图4中描绘的数据指南154描绘了图2中描绘的文档集合的完全展开的相关的关系的层级。在实施例中,可以使用由半结构化数据的数据指南描述的半结构化数据的这种相关的关系将半结构化数据变换成具有去规范化布置的虚拟表。
对半结构化数据去规范化
在实施例中,去规范化器134基于数据指南154生成去规范化布置156。去规范化布置156以关系语句的形式对输入半结构化数据的层级信息以及输入半结构化数据的对象信息进行编码。对输入半结构化数据执行关系语句导致生成虚拟表160。查询虚拟表160进而产生针对输入半结构化数据接收到的查询140的结果集165。
图7是描绘在实施例中用于基于数据指南来生成去规范化数据布置的列集合的处理的框图。所描述的一个或多个方框可以被省略、重复和/或以不同的顺序执行。因此,图7中示出的方框的具体布置不应被解释为限制本发明的范围。进一步地,可以基于半结构化数据的去规范化布置中的列的不同布置来修改下面描述的方框。例如,一种这样的布置可以针对半结构化数据的数组/对象/标量属性节点来使用去规范化布置中的单个列集合而不是多个列集合。
在方框705处,从输入半结构化数据的数据指南154中初始地选择根节点。在每次后续迭代中,数据指南154中的下一个节点在方框705处被选择,直到数据指南154中的所有节点都被遍历。节点基于其在层级中从根节点到每个叶节点的路径进行迭代。例如,图4中描绘的数据指南154已经基于路径排序(以“PID”列表示)被布置成行,因此从第一行到最后一行迭代图4的数据指南154的行将导致从根节点到每个叶节点完全遍历层级。
在实施例中,针对半结构化数据中的每个新对象或数组,为去规范化布置156定义单独的列集合。在方框710处,为了确定是开始还是结束列集合的定义,所选择的节点的数据类型从数据指南154中被检索并被处理以确定节点数据类型。如果数据类型描述非复杂的非数组数据类型,诸如串、整数、实数或日期,那么所选择的节点被认为是标量属性,否则所选择的节点将触发在方框715-750处新的列集合的定义。
在为去规范化布置定义新的列集合之前,在一些实施例中,在方框705处选择新对象/数组节点还可以触发为先前选择的节点定义列集合的定义结束。如果所选择的对象/数组节点在层级中比先前选择的节点处于更高级别,则在先前所选择的节点的路径中没有更多的节点,并且为一个或多个先前所选择的节点的列集合的定义对于去规范化布置156结束。在方框715处,确定当前所选择的节点与先前所选择的节点的级别之间级别数量的差异。差异的这种级别的数量对应于需要结束定义的先前列集合的数量。在方框720处,如果存在差异,那么在方框725处,在去规范化布置156中关闭先前所选择的节点的确定级别的列集合定义。
例如,处理可以选择与具有图4中的数据指南154的值13的“PID”对应的节点。如“[]”符号所描绘的,“$.items.parts2”节点是数组。“PID”处的先前节点的值为12,该节点具有“$.items.part2”节点下方一个级别的“$.items.parts.partQuantity”的路径。因此,在开始对“$.items.parts2”列集合的定义之前,在去规范化布置156中关闭对一个列集合(“$.items.parts”)的定义。
在方框730处,为所选择的对象/数组节点的新的列集合生成新的定义。如果在方框735处确定所选择的节点是数组,那么在方框740处数组运算符被添加到该列集合的定义。数组运算符表示对于新集合的列中的每个值,父节点的列中的值将被重复。换句话说,由于所选择的节点是数组,因此该节点与祖先节点具有多对一的关系;因此,为了去规范化布置表示这种关系,对于所选择的节点的数组中的每个值重复祖先节点中的值。类似地,所选择的数组节点与父节点与其具有一对一关系的任何节点具有多对一关系。例如,当去规范化时,对于所选择的节点的数组的每个值,将重复与父节点具有一对一关系的每个单例兄弟节点的相应值。而与父节点具有多对一关系的兄弟数组节点因此与所选择的节点具有多对多关系。在这种情况下,由于层级形式缺少关于多对多关系内的特定值关系的特定信息,因此当去规范化时,所选择的节点的数组的值与兄弟节点的数组的值不存在对应关系和/或关系。
在方框745处,为所选择的数组节点确定子节点的数量。如果存在多于一个子节点,那么这些多个子节点值彼此具有一对一的关系,并且每个这样的值集合形成元组(tuple)。这些元组将被去规范化为多个列,使得多个列的同一行中的值在半结构化数据中具有共同的父节点值。在实施例中,为了保留子节点元组的这种一对一关系,在方框750处定义附加的序数列(ordinality column)。序数列是对于每个元组都具有唯一值的递增整数。因此,序数列保留去规范化布置156中的子节点列的行基数。
例如,继续图4中的数据指南154示例,当选择“$.items.parts2”节点时,去规范化器134确定“$.items.parts2”是基于数据指南154的“数据类型”列的数组。作为数组,“$.items.parts2”与其父节点“$.items”以及与“$.items”具有一对一关系的任何单例节点(诸如子节点“$.items.itemName”和兄弟节点“$.poDate”)具有多对一的关系。因此,在虚拟表160中,根据去规范化布置156,对于“$.items.parts2”的列集合的每行的值,重复“$.items.itemName”和“$.poDate”列的对应行的值。另一方面,“$.items.parts2”和“$items.parts”具有多对多关系或没有关系,因此在对于其在“$.items.parts”的列集合中存在值的那些行中,为“$.items.parts2”的列集合插入空值,反之亦然。
在数据指南154中从在“$.items.parts2”行之后的下一行开始,去规范化器134还确定该节点具有三个子节点:“$.items.parts2.part2Name”、“$.items.parts2.parts2Quantity”和“$.items.parts2.diffPart2Name”(在图6中也被描绘为子节点)。因此,去规范化器134用包含子节点的序数列的新的列集合定义来增强(一个或多个)去规范化布置156。
在实施例中,在方框755-760处,为在方框715-750处已经为其定义列集合的对象/数组内的标量属性定义新的列。在方框710处,如果所选择的节点是标量属性的,那么在方框755处确定标量属性的数据类型。在实施例中,通过将半结构化数据格式数据类型映射到DBMS数据类型来确定数据类型。使用半结构化数据的数据指南154,去规范化器134确定所选择的标量属性节点的列定义的数据类型。在一些实施例中,数据指南154包含已经被映射到DBMS数据类型定义中的数据类型信息,并且可以用在去规范化布置中的列定义中。在方框760处,去规范化器134为去规范化布置156定义所确定的数据类型的列。
在图4中的数据指南154的示例中,每个标量属性被定义为对应的DBMS类型的列。数据指南154的“最小”列和“最大”列提供关于标量属性的附加信息,诸如串的长度或数字的精度和比例。这种附加信息可以用在去规范化布置中的对应列的定义中。图8描绘了具有已使用图4中描绘的数据指南154生成的JSON_TABLE运算符的去规范化布置156的示例。
在相关的实施例中,从数据指南154生成多个去规范化布置156。去规范化布置156可以基于关于每个布置包含的半结构化数据的层级信息量而彼此不同。该量是基于查询优化器126针对特定去规范化布置选择的细节级别来确定的。
统计数据收集器128可以基于为输入半结构化数据收集到的统计数据来选择不同级别的细节。细节级别数据可以通过包括关于为每个去规范化布置进行去规范化的层级的宽度和深度的信息来指示细节的级别。特别地,细节级别数据可以为去规范化器134指示去规范化的层级的节点。去规范化器134根据本文描述的技术(特别地在图7中的技术)来选择与细节级别数据中指示的节点对应的数据指南154的部分以生成去规范化布置156。例如,如果细节级别数据指示“add_items”对象是在图2的输入半结构化数据中最多被查询的,那么去规范化器134可以单独处理图4的数据指南154的行17-24以生成如图9所描绘的针对“add_items”对象的单独的去规范化数据布置156。
在一些实施例中,如果细节级别数据指定用于去规范化的父节点但排除父节点的子节点,那么去规范化器134可以将父节点去规范化为将包含子节点的半结构化数据的通用类型列(诸如大对象类型或串类型列)。例如,如果细节级别数据指示图6的“$.items.parts[]”的子节点不经常被查询,那么去规范化器134可以将“$.items.parts[]”去规范化为标量属性而不是具有两个标量属性的数组对象。图10示出了具有“$.items.parts[]”对象作为单个列的去规范化布置156的示例。
在又一个实施例中,将关于要去规范化的细节级别的确定推迟到查询执行的运行时阶段。为了对评估接收到的查询(诸如查询140)所需的半结构化数据进行去规范化,由查询优化器126提取包含关于评估路径表达所需的节点的信息的细节级别数据。去规范化器134使用细节级别数据来仅选择与提取出的节点对应的数据指南154的一部分以生成特定于查询140的去规范化布置156。
物化(materializing)去规范化数据布置
在实施例中,去规范化布置被物化为PF数据或MF数据或两者。为了进行物化,数据生成器124将去规范化布置156应用于输入半结构化数据:例如,应用于半结构化数据文档集合150或半结构化数据分区152。在实施例中,DBMS通过执行与去规范化布置156对应的关系语句来应用去规范化布置156。该执行从输入半结构化数据生成布置在列值集合,虚拟表160中的数据。图11A和图11B示出了如基于图8中的去规范化布置156的关系语句所生成的虚拟表160的示例。
在实施例中,虚拟表160作为PF虚拟表108存储在持久性存储器110中。使用在“镜像数据应用”和“选择性镜像应用”中描述的技术,PF虚拟表108可以被镜像到MF数据104中作为MF虚拟表105,如图1A所描绘的。PF虚拟表108可以处于不同的格式,诸如行为主的格式,而MF虚拟表105可以处于列状格式。
在一些实施例中,MF虚拟表105可以是PF虚拟表108数据的分区。可以基于“选择性镜像应用”中描述的技术来确定分区。如在“镜像数据应用”和“选择性镜像应用”中所描述的,可以针对PF虚拟表108或MF虚拟表106两者执行接收到的查询。
在实施例中,虚拟表160在查询140的运行时执行期间生成。一旦数据生成器124生成虚拟表160,就可以针对虚拟表160执行查询140,而无需在持久性存储装置110中持久性地存储虚拟表160。相反,虚拟表可以被保存在易失性存储器102中,例如在存储器高速缓存106中,同时作为查询140的执行的一部分被操作。
处理半结构化数据查询
在其中接收到的查询(查询140)具有对于输入半结构化数据的路径表达的实施例中,查询优化器126的查询转换器122将查询140转换为如图1B所描绘的要针对虚拟表160执行的关系查询。查询转换器122基于查询140中指定的半结构化数据运算符和处理数据所需的半结构化数据的细节级别来转换查询140。根据实施例,查询140中的非半结构化数据运算符被保留在关系查询中;但是,指定的数据源被转换为引用虚拟表160。
在实施例中,查询140 1)基于半结构化数据中一个或多个值的存在从半结构化数据中选择数据(例如,查询140在WHERE子句中包含JSON_EXISTS()运算符);2)基于半结构化数据的指定布置从半结构化数据中选择数据(例如,查询140在FROM子句中包含JSON_TABLE运算符);和/或3)从半结构化数据中选择标量值。
下面的表1示出了根据一个或多个实施例的基于半结构化数据中的一个或多个值的存在来从半结构化数据中选择数据的查询的转换示例。在一个实施例中,查询140中的条件排除了半结构化数据文档集合150的层级中兄弟数组/对象节点的标量属性上的条件。查询140中的这些条件被转换为针对去规范化布置156的虚拟表160的关系查询的WHERE子句中的谓词。查询140中的每个标量属性节点上的条件被转换为与标量属性节点对应的虚拟表160的列上的谓词。
在一些实施例中,转换后的关系查询进一步将虚拟表160与半结构化数据文档集合150接合,以确保可以在关系查询中查询半结构化数据文档集合150中的所有节点。
表1的Q1-Q3查询描绘了具有路径表达的SQL/JSON查询被转换为具有如图10中所描绘的虚拟表160的列上的谓词的关系SQL查询的示例。与表1的“SQL/JSON查询”列的查询中所描述的层级的遍历不同,表1的“转换后的SQL查询”中的查询可以使用具有对谓词中指定的列进行过滤的扫描操作来高效地执行。
在其中存在一个或多个值的条件包括关于半结构化数据层级的兄弟数组/对象节点的标量属性上的条件的实施例中,条件被转换为虚拟表160的完全自接合。利用虚拟表160的完全自接合,包含兄弟节点的非空值的行可独立地用于在转换后的关系查询中应用谓词。例如,表1的Q4查询具有“item[]”和“add_items[]”的标量属性上的条件,其兄弟数组如图6的层级中所描绘的。因此,在图11的虚拟表中,具有“rowids”0-6的行和具有“rowids”7-8的行被单独地过滤。因此,虚拟表160(JSON_COLLECTION_MD_JTAB)使用“v1”和“v2”标签进行自接合。
在相关的实施例中,如果兄弟数组具有也是数组的祖先节点,那么祖先节点数组的序数列被指定为用于自接合的接合键以确保祖先节点数组的相同实例被比较。在表1兄弟数组的Q5 SQL/JSON查询中,查询了同一父“items[]”数组的“parts[]”和“parts2[]”(如图6所描绘的)。因此,在Q5转换后的SQL关系查询中,虚拟表160基于“item_seq”列进行自接合以确保“parts[]”和“parts2[]”的标量属性的行来自相同的“items[]”数组入口。
表1-JSON_EXISTS()查询转换示例
下面的表2示出了基于半结构化数据的指定布置从半结构化数据中选择数据的查询的转换示例。在实施例中,查询转换器122将指定要查询的半结构化数据文档集合的特定数据布置的查询140转换为使用虚拟表160的关系查询。对于查询140的指定布置中的每个所选择的列,查询转换器122识别虚拟表160中的对应列。对应的列是数据布置156中具有与查询140中的特定数据布置中所选择的列相同的定义的列。查询140的谓词还可以通过识别与查询140的谓词中的列对应的虚拟表160中的列类似地被转换为关系查询中的谓词。
在相关的实施例中,虚拟表160包含除查询140中指定的那些列之外的列。当在虚拟表160中选择与指定列对应的列时,所选择的列的行值可以是重复的。重复行可能是由于表示所选择的列的节点具有与虚拟表160中未被查询选择的其它列对应的多个子节点。为了移除重复行,“DISTINCT”聚合函数被应用于转换后的关系查询中的指定列。在一些实施例中,转换后的关系查询进一步将虚拟表160与半结构化数据文档集合150接合,以确保可以在关系查询中查询半结构化数据文档集合150中的所有节点。
表2的Q6和Q7 SQL/JSON查询包含使用JSON_TABLE运算符的特定数据布置。特定数据布置仅包含图8的数据布置中去规范化的节点的子集。因此,为了过滤由于数据布置156中被排除的节点的子集而存在的虚拟表160中的重复行,将DISTINCT聚合函数分别添加到转换后的Q6、Q7、Q12和Q13 SQL关系查询的SELECT子句。
在另一个实施例中,接收到的查询140指定数组节点的选择。通过依次为每个兄弟数组产生行来完成去规范化的兄弟数组节点;在为兄弟产生非空行时,为所有其它兄弟数组节点的列产生空值。因此,选择兄弟数组节点列可以产生多行空值。因此,可以为这样的列添加NULL过滤谓词。例如,在Q8 SQL/JSON查询中,“items[]”数组节点具有兄弟数组节点“parts2[]”和“add_items”,并且对于兄弟数组列的非空值行可以具有空值行。因此,谓词“v.item_seq is NOT NULL”被添加到Q8转换后的SQL关系查询的WHERE子句中。类似地,生成Q9-Q11和Q13转换后的关系SQL查询,以在WHERE子句中包含相应所选择的数组列的序数列上的“is NOT NULL”谓词。此外,表1的Q13查询是基于半结构化数据的指定布置以及基于半结构化数据中存在的一个或多个值来从半结构化数据中选择数据的查询的转换示例。
表2-JSON_TABLE()查询转换示例
下面的表3示出了从半结构化数据中选择标量属性值的转换示例。在实施例中,查询140通过引用半结构化数据的标量属性节点从半结构化数据文档集合150中选择数据,而无需半结构化数据特定的运算符。查询转换器122将查询140中的每个标量属性节点转换为与去规范化布置156中的标量属性节点对应的虚拟表160的列。
表3的Q14-Q17 SQL/JSON查询包括对半结构化数据文档集合150的标量属性节点的直接引用,如图6中的层级所示。Q14和Q15SQL/JSON查询包含这样的引用作为WHERE子句中的谓词的一部分。Q16 SQL/JSON查询在“ORDER BY”子句中包含这样的引用,而Q17 SQL/JSON查询在“GROUP BY”子句中包含这样的引用。在Q14-Q17转换后的关系查询中,对标量属性节点的引用基于去规范化布置156由对应的列替代,如图8所描绘的。
在实施例中,查询140指定返回所引用的标量属性节点的标量值的半结构化数据运算符。查询转换器122通过将所引用的标量属性节点上的这样的运算符转换为对与去规范化布置156中所引用的标量属性节点对应的虚拟表160的列的引用来生成关系查询。在一些实施例中,转换后的关系查询进一步将虚拟表160与半结构化数据文档集合150接合,以确保可以在关系查询中查询半结构化数据文档集合150中的所有节点。
表3的Q18和Q19 SQL/JSON查询包含JSON_VALUE()函数调用,该JSON_VALUE()函数调用采用到为其返回值的标量属性节点的路径作为输入。查询转换器122将Q18和Q19SQL/JSON查询转换为Q18和Q19 SQL/JSON转换后的SQL关系查询,其中JSON_VALUE()函数调用被对虚拟表160的关系列的引用所替代。虚拟表160的关系列基于去规范化布置156对应于被指定为到函数的参数的路径,如图8所描绘的。
表3-JSON_QUERY(ASIS)和JSON_VALUE()查询转换示例
在实施例中,通过由查询转换器122转换查询140而生成的关系查询由DBMS 100针对虚拟表160执行。执行产生结果集165,该结果集165被返回给查询140的请求者。
查询优化器126、统计数据收集器128、查询转换器122、数据优化器130、数据生成器124、数据指南生成器132和去规范化器134中的每一个是DBMS 100的一个或多个计算机系统的一部分,并且可以用软件、硬件、或软件和硬件的组合来实现。例如,可以使用存储的程序逻辑来实现查询优化器126、统计数据收集器128、查询转换器122、数据优化器130、数据生成器124、数据指南生成器132、去规范化器134中的一个或多个。
数据库管理系统
数据库管理系统(DBMS)管理数据库。DBMS可以包括一个或多个数据库服务器。数据库包括存储在持久性存储器机制(诸如一组硬盘)上的数据库数据和数据库字典。数据库数据可以存储在一个或多个数据容器中。每个容器包含记录。每个记录内的数据被组织成一个或多个字段。在关系DBMS中,数据容器被称为表,记录被称为行,并且字段被称为列。在面向对象的数据库中,数据容器被称为对象类,记录被称为对象,并且字段被称为特性。其它数据库体系架构可以使用其它术语。
在实施例中,DBMS可以连接到或包括可以存储一个或多个表的计算节点的集群。DBMS可以管理存储在计算节点的集群上的表,类似于管理存储在持久性存储装置中的表。
用户通过向数据库服务器提交使数据库服务器对存储在数据库中的数据执行操作的命令与DBMS的数据库服务器进行交互。用户可以是运行在客户端计算机上与数据库服务器进行交互的一个或多个应用。本文中多个用户也可以被统称为用户。
如本文所使用的,“查询”是指数据库命令,并且可以处于数据库语言的数据库语句的形式。在一个实施例中,用于表达查询的数据库语言是结构化查询语言(SQL)。存在许多不同版本的SQL,一些版本是标准的,并且一些是专有的,并且存在各种扩展。数据定义语言(“DDL”)命令被发布到数据库服务器以创建或配置数据库对象,诸如表、视图或复杂数据类型。SQL/XML是在对象-关系数据库中操纵XML数据时使用的SQL的常见扩展。虽然本文使用术语“SQL”描述本发明的实施例,但是本发明不仅仅限于该特定的数据库查询语言,并且可以与其它数据库查询语言和构造结合使用。
客户端可以通过建立数据库会话(本文中被称为“会话”)向数据库服务器发出一系列请求,诸如对执行查询的请求。会话包括为客户端建立的到数据库服务器(诸如数据库实例)的特定连接,客户端可以通过该连接发出一系列请求。数据库服务器可以维护关于会话的会话状态数据。会话状态数据反映会话的当前状态,并且可以包含为其建立会话的用户的身份、由用户使用的服务、对象类型的实例、语言和字符集数据、关于会话的资源使用的统计数据、由会话内执行软件的进程生成的临时变量值、以及光指针(cursor)和变量以及其它信息的存储。会话状态数据还可以包含为会话配置的执行计划参数。
多节点数据库管理系统由共享对相同数据库的访问的互连计算节点组成。通常,计算节点经由网络互连并且以变化的程度共享对共享存储装置的访问,例如,对一组盘驱动器和存储在该组盘驱动器上的数据块的共享访问。多节点DBMS中的计算节点可以是经由网络互连的一组计算机(例如,工作站、个人计算机)的形式。可替代地,该计算节点可以是网格的计算节点,其中网格由计算节点组成,这些计算节点以服务器刀片的形式与机架上的其它服务器刀片互连。
多节点DBMS中的每个计算节点托管数据库服务器。诸如数据库服务器的服务器是计算资源的分配和集成软件组件的组合,其中计算资源诸如存储器、计算节点和用于在处理器上执行集成软件组件的计算节点上的处理,软件和计算资源的组合专用于代表一个或多个客户端执行特定的功能。
可以将来自多节点DBMS中的多个计算节点的资源分配为运行特定数据库服务器的软件。软件和来自计算节点的资源分配的每个组合是在本文中被称为“服务器实例”或“实例”的服务器。数据库服务器可以包括多个数据库实例,这些数据库实例中的一些或全部在包括单独服务器刀片的单独计算机上运行。
存储半结构化数据文档集合
使用各种类型的存储机制来存储半结构化数据,诸如XML或JSON文档。一种类型的存储机制将半结构化数据存储为文件系统中的一个或多个文本文件。如前所述,用于存储半结构化数据的另一种类型的机制是DBMS。在DBMS中,半结构化数据可以存储在表的行中,并且半结构化数据的节点存储在行中的单独列中。半结构化数据的全部内容也可以存储在列中的lob(大对象)中。半结构化数据可以被分解并作为对象的层级存储在数据库中;每个对象是对象类的实例并存储半结构化数据的层级节点的一个或多个元素。保持层级节点的数据库系统的表和/或对象在本文中被称为基表或对象。
二进制令牌编码是其中可以在数据库中存储半结构化数据的另一种形式。二进制令牌编码生成被设计为减少层级数据对象的大小的半结构化数据的紧凑二进制表示。二进制令牌编码对层级数据对象进行编码的方式之一是通过用固定值表示串。
硬件概述
根据一个实施例,本文所描述的技术由一个或多个专用计算设备实现。专用计算设备可以是硬连线的以执行该技术,或者可以包括诸如被持久性地编程以执行该技术的一个或多个专用集成电路(ASIC)或现场可编程门阵列(FPGA)的数字电子设备,或者可以包括被编程为按照固件、存储器、其它存储装置或者组合中的程序指令来执行该技术的一个或多个通用硬件处理器。这种专用计算设备还可以合并定制的硬连线逻辑、ASIC或FPGA与定制的编程来实现该技术。专用计算设备可以是台式计算机系统、便携式计算机系统、手持式设备、联网设备或者结合硬连线和/或程序逻辑来实现该技术的任何其它设备。
例如,图12是图示本发明的实施例可以在其上实现的计算机系统1200的框图。计算机系统1200包括总线1202或者用于传送信息的其它通信机制,以及与总线1202耦合用于处理信息的硬件处理器1204。硬件处理器1204可以是例如通用微处理器。
计算机系统1200还包括耦合到总线1202用于存储信息和要由处理器1204执行的指令的主存储器(本文中也被称为“易失性存储器”)1206,诸如随机存取存储器(RAM)或其它动态存储设备。主存储器1206还可以用于在要由处理器1204执行的指令的执行期间存储临时变量或其它中间信息。当这种指令被存储在处理器1204可访问的非暂态存储介质中时,这种指令使计算机系统1200成为被定制以执行指令中所指定的操作的专用机器。
计算机系统1200还包括耦合到总线1202以用于为处理器1204存储静态信息和指令的只读存储器(ROM)1208或者其它静态存储设备。提供了诸如磁盘、光盘或固态驱动器的存储设备1210,并且存储设备1210耦合到总线1202以用于存储信息和指令。
计算机系统1200可以经总线1202耦合到诸如阴极射线管(CRT)的显示器1212以用于向计算机用户显示信息。包括字母数字和其它键的输入设备1214耦合到总线1202,用于向处理器1204传送信息和命令选择。另一种类型的用户输入设备是光标控件1216,诸如鼠标、轨迹球或者光标方向键,用于向处理器1204传送方向信息和命令选择并且用于控制显示器1212上的光标移动。这种输入设备通常具有在两个轴(第一个轴(例如x)和第二个轴(例如y))中的两个自由度,这允许设备在平面内指定位置。
计算机系统1200可以使用定制硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑来实现本文所描述的技术,定制硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑与计算机系统结合,使得计算机系统1200成为或者将计算机系统1200编程为专用机器。根据一个实施例,由计算机系统1200响应于执行被包含在主存储器1206中的一条或多条指令的一个或多个序列的处理器1204而执行本文的技术。可以从诸如存储设备1210的另一个存储介质将这种指令读取到主存储器1206中。执行被包含在主存储器1206中的指令的序列使得处理器1204执行本文所述的处理步骤。在替代实施例中,硬连线的电路系统可以代替软件指令或者与软件指令组合使用。
如在本文所使用的,术语“存储介质”是指存储使机器以特定方式操作的数据和/或指令的任何非暂态介质。这种存储介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如光盘、磁盘或固态驱动器,诸如存储设备1210。易失性介质包括动态存储器,诸如主存储器1206。存储介质的常见形式包括例如软盘、柔性盘、硬盘、固态驱动器、磁带,或者任何其它磁性数据存储介质、CD-ROM、任何其它光学数据存储介质、具有孔图案的任何物理介质、RAM、PROM和EPROM、FLASH-EPROM、NVRAM、任何其它存储器芯片或盒式磁带。
存储介质与传输介质截然不同但是可以与传输介质结合使用。传输介质参与在存储介质之间传送信息。例如,传输介质包括同轴线缆、铜线和光纤,包括包含总线1202的引线。传输介质还可以采取声波或光波的形式,诸如在无线电波和红外线数据通信中产生的那些波。
各种形式的介质可以参与把一条或多条指令的一个或多个序列携带到处理器1204以供执行。例如,最初可以在远端计算机的磁盘或固态驱动器上携带指令。远端计算机可以将指令加载到该远端计算机的动态存储器中并且使用调制解调器经电话线发送指令。位于计算机系统1200本地的调制解调器可以在电话线上接收数据并且使用红外线发射器将数据转换成红外线信号。红外线检测器可以接收在红外线信号中携带的数据并且适当的电路系统可以将数据放在总线1202上。总线1202将数据携带到主存储器1206,处理器1204从该主存储器1206检索并执行指令。由主存储器1206接收的指令可以可选地在被处理器1204执行之前或之后被存储在存储设备1210上。
计算机系统1200还包括耦合到总线1202的通信接口1218。通信接口1218提供耦合到网络链路1220的双向数据通信,其中网络链路1220连接到本地网络1222。例如,通信接口1218可以是综合业务数字网络(ISDN)卡、线缆调制解调器、卫星调制解调器或者提供到对应类型的电话线的数据通信连接的调制解调器。作为另一个示例,通信接口1218可以是提供到兼容的局域网(LAN)的数据通信连接的LAN卡。也可以实现无线链路。在任何这种实现中,通信接口1218发送和接收携带表示各种类型信息的数字数据流的电信号、电磁信号或光信号。
网络链路1220通常通过一个或多个网络向其它数据设备提供数据通信。例如,网络链路1220可以通过本地网络1222提供到主机计算机1224或者到由互联网服务提供商(ISP)1226操作的数据装置的连接。ISP 1226进而通过现在通常被称为“互联网”1228的全球分组数据通信网络提供数据通信服务。本地网络1222和互联网1228两者都使用携带数字数据流的电信号、电磁信号或光信号。通过各种网络的信号以及在网络链路1220上并通过通信接口1218的信号是传输介质的示例形式,其中该信号将数字数据携带到计算机系统1200或者从计算机系统1200携带数字数据。
计算机系统1200可以通过(一个或多个)网络、网络链路1220和通信接口1218发送消息和接收数据,包括程序代码。在互联网示例中,服务器1230可以通过互联网1228、ISP1226、本地网络1222和通信接口1218传送对于应用程序的所请求的代码。
接收到的代码可以在其被接收时由处理器1204执行,和/或存储在存储设备1210或其它非易失性存储装置中以供以后执行。
在前述说明书中,已经参考许多具体细节描述了本发明的实施例,这些具体细节可以因实施而异。因此,说明书和附图被认为是说明性的而不是限制性的意义。本发明的范围的唯一且排他的指示以及申请人所预期作为本发明的范围的内容,是从本申请产生的一组权利要求的以该组权利要求产生的具体形式的书面范围和等效范围,该组权利要求包括任何后续的校正。
Claims (14)
1.一种方法,包括:
由数据库服务器在持久性存储装置上维护半结构化层级数据;
其中所述半结构化层级数据的模式包括层级关系中的节点树,所述节点树中的每个节点与所述节点树中的至少一个其它节点具有直接层级关系;
生成去规范化布置,所述去规范化布置定义由所述数据库服务器管理的包括行的表的列集合,其中所述列集合中的一个或多个列与所述节点树中的相应一个或多个节点对应,所述生成包括:
基于所述节点树中的相应一个或多个节点的一个或多个数据类型来确定所述一个或多个列的数据类型,以及
基于所述节点树中的所述相应一个或多个节点相对于所述节点树中的其它节点的层级位置来确定所述一个或多个列的列值与所述列集合中的其它列的列值的关系;
其中所述关系是以下中的至少一个:
多对一关系,其中在所述一个或多个列的第一列中的多个值与在所述其它列的第二列中的特定值相对应,
一对一关系,其中所述第一列中的单个值与所述第二列中的至多一个值相对应,或者
多对多关系或无关系,其中所述第一列中没有值与所述第二列中的任何值相对应;以及
基于所述去规范化布置将所述半结构化层级数据的至少一部分存储到所述表中。
2.如权利要求1所述的方法,其中所述关系被确定为多对一关系,并且所述方法还包括:
对于所述表中的行集合中的每一行:
将所述多个值中的每个值存储在所述第一列中;
将所述特定值的副本存储在所述表的所述第二列的所述每一行中。
3.如权利要求1所述的方法,其中所述关系被确定为多对多关系或无关系,并且所述方法还包括:
对于在所述第一列中存储非空值的行子集中的每一行,将空值存储在所述表的所述第二列的所述每一行中;以及
对于所述第二列中的非空值的每一行,将空值存储在所述表的所述第一列的所述每一行中。
4.如权利要求1所述的方法,其中所述关系被确定为一对一关系,并且所述方法还包括:
对于在所述第一列中存储所述单个值的特定行,将所述至多一个值存储在所述表的所述第二列的特定行中。
5.如权利要求1所述的方法,还包括:
由所述数据库服务器在所述持久性存储装置上维护包括所述半结构化数据的半结构化层级数据文档集合;
基于从对文档集合的查询的先前执行中提取出的统计数据,从所述半结构化层级数据文档集合中选择所述半结构化层级数据。
6.如权利要求1所述的方法,还包括:
由所述数据库服务器在持久性存储装置上维护半结构化层级数据文档集合;
接收对文档集合的查询;
从所述查询中提取关于在所述查询中使用的所述半结构化层级数据文档集合中的对象的对象信息;
基于所述对象信息从所述半结构化层级数据文档集合中选择所述半结构化层级数据。
7.如权利要求1所述的方法,还包括:
从所述半结构化层级数据生成数据指南;
基于所述数据指南:
确定所述节点树中的相应一个或多个节点的一个或多个数据类型;以及
确定所述节点树中的相应一个或多个节点相对于所述节点树中的其它节点的层级位置。
8.如权利要求1所述的方法,其中所述生成还包括:
接收对所述半结构化层级数据文档集合的查询;
从所述查询中提取关于在所述查询中使用的所述半结构化层级数据文档集合中的对象的对象信息;以及
基于所述对象信息,选择要为其生成所述去规范化布置的所述列集合中的所述一个或多个列的节点树中的相应一个或多个节点。
9.如权利要求1所述的方法,还包括:
基于从对文档集合的查询的先前执行中提取出的统计数据,选择要为其生成所述去规范化布置的所述列集合中的所述一个或多个列的节点树中的相应一个或多个节点。
10.如权利要求1所述的方法,其中所述一个或多个节点是标量属性节点。
11.如权利要求1所述的方法,还包括:
对于节点树中的被确定为数组的每个节点,生成所述去规范化布置的所述列集合的一个或多个特定列。
12.如权利要求1所述的方法,还包括:
针对所述节点树中具有多个子节点并且被确定为数组的每个节点,在所述去规范化布置的所述列集合中生成数字类型的列定义。
13.如权利要求1所述的方法,其中基于所述去规范化布置将所述半结构化层级数据的至少一部分存储到所述表中还包括:以镜像数据格式来存储所述半结构化层级数据的所述部分,这包括在所述数据库服务器的易失性存储器中压缩所述半结构化层级数据的所述部分。
14.存储指令的一种或多种非暂态计算机可读介质,所述指令在由一个或多个计算设备执行时使得如权利要求1-13中任一项所述的方法被执行。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201562245890P | 2015-10-23 | 2015-10-23 | |
US62/245,890 | 2015-10-23 | ||
US15/078,713 US10191944B2 (en) | 2015-10-23 | 2016-03-23 | Columnar data arrangement for semi-structured data |
US15/078,713 | 2016-03-23 | ||
PCT/US2016/057767 WO2017070251A1 (en) | 2015-10-23 | 2016-10-19 | Columnar data arrangement for semi-structured data |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108369598A true CN108369598A (zh) | 2018-08-03 |
CN108369598B CN108369598B (zh) | 2021-11-09 |
Family
ID=57206459
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680073840.8A Active CN108369598B (zh) | 2015-10-23 | 2016-10-19 | 对于半结构化数据的列状数据布置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10191944B2 (zh) |
EP (1) | EP3365804B1 (zh) |
CN (1) | CN108369598B (zh) |
WO (1) | WO2017070251A1 (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109637602A (zh) * | 2018-11-23 | 2019-04-16 | 金色熊猫有限公司 | 医疗数据存储和查询方法、装置、存储介质及电子设备 |
CN110879854A (zh) * | 2018-09-06 | 2020-03-13 | Sap欧洲公司 | 使用超集树数据结构搜索数据 |
CN110955714A (zh) * | 2019-12-03 | 2020-04-03 | 中国银行股份有限公司 | 一种将非结构化文本转化为结构化文本的方法及装置 |
CN112100316A (zh) * | 2020-09-16 | 2020-12-18 | 北京天空卫士网络安全技术有限公司 | 一种数据管理方法和装置 |
CN113228002A (zh) * | 2018-09-13 | 2021-08-06 | 西格玛计算机有限公司 | 使用图形用户界面内的维度层次结构生成数据库查询 |
CN114357054A (zh) * | 2022-03-10 | 2022-04-15 | 广州宸祺出行科技有限公司 | 一种基于ClickHouse的非结构化数据的处理方法和装置 |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10430406B2 (en) * | 2012-08-13 | 2019-10-01 | Aria Solutions, Inc. | Enhanced high performance real-time relational database system and methods for using same |
US9864816B2 (en) | 2015-04-29 | 2018-01-09 | Oracle International Corporation | Dynamically updating data guide for hierarchical data objects |
US10437564B1 (en) * | 2016-09-16 | 2019-10-08 | Software Tree, LLC | Object mapping and conversion system |
WO2019029808A1 (en) | 2017-08-09 | 2019-02-14 | Symrise Ag | 1,2-ALKANEDIOLS AND PROCESSES FOR PRODUCING THE SAME |
US10719508B2 (en) * | 2018-04-19 | 2020-07-21 | Risk Management Solutions, Inc. | Data storage system for providing low latency search query responses |
CN109933692B (zh) * | 2019-04-01 | 2022-04-08 | 北京百度网讯科技有限公司 | 建立映射关系的方法和装置、信息推荐的方法和装置 |
US11423001B2 (en) * | 2019-09-13 | 2022-08-23 | Oracle International Corporation | Technique of efficiently, comprehensively and autonomously support native JSON datatype in RDBMS for both OLTP and OLAP |
US11347732B1 (en) * | 2019-10-01 | 2022-05-31 | Software Tree, LLC | JSON persistence service |
US11467775B2 (en) | 2019-10-15 | 2022-10-11 | Hewlett Packard Enterprise Development Lp | Virtual persistent volumes for containerized applications |
US11687267B2 (en) | 2020-04-14 | 2023-06-27 | Hewlett Packard Enterprise Development Lp | Containerized application manifests and virtual persistent volumes |
US11693573B2 (en) | 2020-06-18 | 2023-07-04 | Hewlett Packard Enterprise Development Lp | Relaying storage operation requests to storage systems using underlying volume identifiers |
US11960773B2 (en) * | 2020-07-31 | 2024-04-16 | Hewlett Packard Enterprise Development Lp | Modifying virtual persistent volumes based on analysis of performance metrics |
US11816157B2 (en) | 2021-05-05 | 2023-11-14 | Google Llc | Efficient storage and query of schemaless data |
CN114860997A (zh) * | 2022-05-05 | 2022-08-05 | 阿里巴巴(中国)有限公司 | 数据查询方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1987866A (zh) * | 2005-12-21 | 2007-06-27 | 国际商业机器公司 | 用于组织数据的方法和系统 |
CN102662997A (zh) * | 2012-03-15 | 2012-09-12 | 北京播思软件技术有限公司 | 一种存储xml数据到关系数据库的方法 |
WO2015109250A1 (en) * | 2014-01-20 | 2015-07-23 | Alibaba Group Holding Limited | CREATING NoSQL DATABASE INDEX FOR SEMI-STRUCTURED DATA |
Family Cites Families (43)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5870761A (en) | 1996-12-19 | 1999-02-09 | Oracle Corporation | Parallel queue propagation |
US6119145A (en) | 1997-02-28 | 2000-09-12 | Oracle Corporation | Multithreaded client application storing a separate context for each transaction thus allowing threads to resume transactions started by other client threads |
US5951695A (en) | 1997-07-25 | 1999-09-14 | Hewlett-Packard Company | Fast database failover |
US6370622B1 (en) | 1998-11-20 | 2002-04-09 | Massachusetts Institute Of Technology | Method and apparatus for curious and column caching |
US6122630A (en) | 1999-06-08 | 2000-09-19 | Iti, Inc. | Bidirectional database replication scheme for controlling ping-ponging |
US6611898B1 (en) | 2000-12-22 | 2003-08-26 | Convergys Customer Management Group, Inc. | Object-oriented cache management system and method |
US7548898B1 (en) | 2001-02-28 | 2009-06-16 | Teradata Us, Inc. | Parallel migration of data between systems |
US7031994B2 (en) | 2001-08-13 | 2006-04-18 | Sun Microsystems, Inc. | Matrix transposition in a computer system |
US8738568B2 (en) | 2011-05-05 | 2014-05-27 | Oracle International Corporation | User-defined parallelization in transactional replication of in-memory database |
US6993631B2 (en) | 2002-05-15 | 2006-01-31 | Broadcom Corporation | L2 cache maintaining local ownership of remote coherency blocks |
US7210006B2 (en) | 2002-06-28 | 2007-04-24 | Sun Microsystems, Inc. | Computer system supporting read-to-write-back transactions for I/O devices |
US7337214B2 (en) | 2002-09-26 | 2008-02-26 | Yhc Corporation | Caching, clustering and aggregating server |
US7292585B1 (en) | 2002-12-20 | 2007-11-06 | Symantec Operating Corporation | System and method for storing and utilizing routing information in a computer network |
US20040143581A1 (en) | 2003-01-15 | 2004-07-22 | Bohannon Philip L. | Cost-based storage of extensible markup language (XML) data |
US20040199552A1 (en) | 2003-04-01 | 2004-10-07 | Microsoft Corporation | Transactionally consistent change tracking for databases |
US7032089B1 (en) | 2003-06-09 | 2006-04-18 | Veritas Operating Corporation | Replica synchronization using copy-on-read technique |
US7426522B2 (en) | 2003-09-23 | 2008-09-16 | International Business Machines Corporation | Object oriented query path expression to relational outer join translator method, system, article of manufacture, and computer program product |
US7200718B2 (en) | 2004-04-26 | 2007-04-03 | Broadband Royalty Corporation | Cache memory for a scalable information distribution system |
GB0414291D0 (en) | 2004-06-25 | 2004-07-28 | Ibm | Methods, apparatus and computer programs for data replication |
US20060010130A1 (en) | 2004-07-09 | 2006-01-12 | Avraham Leff | Method and apparatus for synchronizing client transactions executed by an autonomous client |
US7395258B2 (en) | 2004-07-30 | 2008-07-01 | International Business Machines Corporation | System and method for adaptive database caching |
US7496589B1 (en) | 2005-07-09 | 2009-02-24 | Google Inc. | Highly compressed randomly accessed storage of large tables with arbitrary columns |
US20070008890A1 (en) | 2005-07-11 | 2007-01-11 | Tseitlin Eugene R | Method and apparatus for non-stop multi-node system synchronization |
US7962566B2 (en) | 2006-03-27 | 2011-06-14 | Sap Ag | Optimized session management for fast session failover and load balancing |
US7716517B2 (en) | 2006-12-21 | 2010-05-11 | Telefonaktiebolaget Lm Ericsson (Publ) | Distributed platform management for high availability systems |
US20080209009A1 (en) | 2007-01-18 | 2008-08-28 | Niraj Katwala | Methods and systems for synchronizing cached search results |
US8868504B2 (en) | 2007-03-07 | 2014-10-21 | Oracle International Corporation | Database system with active standby and nodes |
US7570451B2 (en) | 2007-12-12 | 2009-08-04 | Seagate Technology Llc | Servo architecture for high areal density data storage |
US8037110B2 (en) | 2007-12-27 | 2011-10-11 | Microsoft Corporation | Business data access client for online/offline client use |
US8306951B2 (en) | 2009-09-18 | 2012-11-06 | Oracle International Corporation | Automated integrated high availability of the in-memory database cache and the backend enterprise database |
US7912051B1 (en) | 2008-12-19 | 2011-03-22 | Emc Corporation | Techniques for port virtualization |
US20100306234A1 (en) | 2009-05-28 | 2010-12-02 | Microsoft Corporation | Cache synchronization |
US8832142B2 (en) * | 2010-08-30 | 2014-09-09 | Oracle International Corporation | Query and exadata support for hybrid columnar compressed data |
US20110289118A1 (en) * | 2010-05-20 | 2011-11-24 | Microsoft Corporation | Mapping documents to a relational database table with a document position column |
US8612487B2 (en) * | 2011-09-07 | 2013-12-17 | International Business Machines Corporation | Transforming hierarchical language data into relational form |
US8977882B2 (en) * | 2012-11-21 | 2015-03-10 | Free Scale Semiconductor, Inc. | System for data transfer between asynchronous clock domains |
US9087138B2 (en) * | 2013-01-15 | 2015-07-21 | Xiaofan Zhou | Method for representing and storing hierarchical data in a columnar format |
US8949224B2 (en) * | 2013-01-15 | 2015-02-03 | Amazon Technologies, Inc. | Efficient query processing using histograms in a columnar database |
US8972337B1 (en) * | 2013-02-21 | 2015-03-03 | Amazon Technologies, Inc. | Efficient query processing in columnar databases using bloom filters |
US9292564B2 (en) | 2013-09-21 | 2016-03-22 | Oracle International Corporation | Mirroring, in memory, data from disk to improve query performance |
US10311154B2 (en) * | 2013-09-21 | 2019-06-04 | Oracle International Corporation | Combined row and columnar storage for in-memory databases for OLTP and analytics workloads |
WO2015062035A1 (zh) * | 2013-10-31 | 2015-05-07 | 华为技术有限公司 | 一种列式数据库处理方法及装置 |
US9864816B2 (en) | 2015-04-29 | 2018-01-09 | Oracle International Corporation | Dynamically updating data guide for hierarchical data objects |
-
2016
- 2016-03-23 US US15/078,713 patent/US10191944B2/en active Active
- 2016-10-19 WO PCT/US2016/057767 patent/WO2017070251A1/en active Application Filing
- 2016-10-19 CN CN201680073840.8A patent/CN108369598B/zh active Active
- 2016-10-19 EP EP16787700.0A patent/EP3365804B1/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1987866A (zh) * | 2005-12-21 | 2007-06-27 | 国际商业机器公司 | 用于组织数据的方法和系统 |
CN102662997A (zh) * | 2012-03-15 | 2012-09-12 | 北京播思软件技术有限公司 | 一种存储xml数据到关系数据库的方法 |
WO2015109250A1 (en) * | 2014-01-20 | 2015-07-23 | Alibaba Group Holding Limited | CREATING NoSQL DATABASE INDEX FOR SEMI-STRUCTURED DATA |
Non-Patent Citations (2)
Title |
---|
HUI XU: "Extract list data from semi-structured document using clustering", 《IEEE》 * |
仇伟涛: "一种基于HBase的高效半结构化数据查询策略", 《福建电脑》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110879854A (zh) * | 2018-09-06 | 2020-03-13 | Sap欧洲公司 | 使用超集树数据结构搜索数据 |
CN110879854B (zh) * | 2018-09-06 | 2023-06-30 | Sap欧洲公司 | 使用超集树数据结构搜索数据 |
CN113228002A (zh) * | 2018-09-13 | 2021-08-06 | 西格玛计算机有限公司 | 使用图形用户界面内的维度层次结构生成数据库查询 |
CN113228002B (zh) * | 2018-09-13 | 2023-02-14 | 西格玛计算机有限公司 | 使用图形用户界面内的维度层次结构生成数据库查询 |
CN109637602A (zh) * | 2018-11-23 | 2019-04-16 | 金色熊猫有限公司 | 医疗数据存储和查询方法、装置、存储介质及电子设备 |
CN110955714A (zh) * | 2019-12-03 | 2020-04-03 | 中国银行股份有限公司 | 一种将非结构化文本转化为结构化文本的方法及装置 |
CN110955714B (zh) * | 2019-12-03 | 2023-05-02 | 中国银行股份有限公司 | 一种将非结构化文本转化为结构化文本的方法及装置 |
CN112100316A (zh) * | 2020-09-16 | 2020-12-18 | 北京天空卫士网络安全技术有限公司 | 一种数据管理方法和装置 |
CN114357054A (zh) * | 2022-03-10 | 2022-04-15 | 广州宸祺出行科技有限公司 | 一种基于ClickHouse的非结构化数据的处理方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
WO2017070251A1 (en) | 2017-04-27 |
EP3365804B1 (en) | 2020-08-05 |
US10191944B2 (en) | 2019-01-29 |
EP3365804A1 (en) | 2018-08-29 |
CN108369598B (zh) | 2021-11-09 |
US20170116273A1 (en) | 2017-04-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108369598A (zh) | 对于半结构化数据的列状数据布置 | |
JP6617117B2 (ja) | 半構造データのためのスケーラブルな分析プラットフォーム | |
US20230342358A1 (en) | Optimized data structures of a relational cache with a learning capability for accelerating query execution by a data system | |
Karnitis et al. | Migration of relational database to document-oriented database: structure denormalization and data transformation | |
JP6416194B2 (ja) | 半構造データのためのスケーラブルな分析プラットフォーム | |
CN105989150B (zh) | 一种基于大数据环境的数据查询方法及装置 | |
CN108431804A (zh) | 将多个容器数据库分组为单个容器数据库集群的能力 | |
CN108369587A (zh) | 创建用于交换的表 | |
CN102822819A (zh) | 管理数据查询 | |
WO2011146452A1 (en) | Data storage and processing service | |
CA2287030A1 (en) | Method and apparatus for accessing multidimensional data | |
US20130097151A1 (en) | Transformation of complex data source result sets to normalized sets for manipulation and presentation | |
US10936539B2 (en) | Source data assignment based on metadata | |
Das et al. | A study on big data integration with data warehouse | |
Schreiner et al. | Bringing SQL databases to key-based NoSQL databases: a canonical approach | |
Botoeva et al. | Ontology-based data access–Beyond relational sources | |
Parmar et al. | MongoDB as an efficient graph database: An application of document oriented NOSQL database | |
Özsu et al. | NoSQL, NewSQL, and polystores | |
US10528538B2 (en) | Leveraging SQL with user defined aggregation to efficiently merge inverted indexes stored as tables | |
KR20190005578A (ko) | 인메모리 기반의 분산 데이터베이스 관리 방법 및 시스템 | |
Stonebraker et al. | What Goes Around Comes Around... And Around... | |
Mitreva et al. | NoSQL solutions to handle big data | |
Pal | SQL on Big Data: Technology, Architecture, and Innovation | |
Badia et al. | Databases and Other Tools | |
Aggoune | An Overview on the Mapping Techniques in NoSQL Databases |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |