用于高速搜索或过滤大数据集的系统、方法和数据结构与流程

文档序号:18031135发布日期:2019-06-28 22:40阅读:279来源:国知局
用于高速搜索或过滤大数据集的系统、方法和数据结构与流程

本申请要求发明人roy.w.ward于2016年8月10日提交的名称为“用于高速搜索或过滤大数据集的系统、方法和数据结构(systems,methods,anddatastructuresforhigh-speedsearchingorfilteringoflargedatasets)”的美国非临时申请no.15/233,047的优先权,所述非临时申请通过引用如在本文中完全阐明的那样并入本文中。

本发明的领域涉及电子数据存储、搜索、过滤、列表、枚举或检索。具体地,本文中公开了用于高速搜索或过滤大数据集的系统、方法和数据结构。



背景技术:

本申请涉及以下申请中所公开的主题:(i)由royw.ward于2011年12月15日提交的美国非临时申请no.13/326,326(现在专利号为9,002,859);(ii)由royw.ward和davids.alavi于2012年1月10日提交的美国非临时申请13/347,646(现在专利号为8,977,656,其被授予ward);(iii)由royw.ward于2013年1月4日提交的美国非临时申请no.13/733,890(现在专利号为9,171,054)。所述申请和专利中的每一个通过引用如在本文中完全阐明的那样并入本文中,并且所述申请和专利在下文中统称为“内联树专利”。

存在着许多生成或采集大量数据(例如,104、106、108或更多条数据记录,每条数据记录包括几个、数十个或数百个或更多的数据字段)的情况。对于数据集中有任何实际用途的数据,根据所排列的数据结构来存储表示数据集的标记,以使得可以搜索、过滤、列表、枚举、定位或检索数据集中的信息。在前数字时代,这种数据结构通常包括在合适的介质上打印的字母数字标记(通常包括附带的打印索引),并且数据搜索和数据检索是由人执行的手动功能。在上个世纪中叶引入电子数据存储和搜索功能彻底改变了存储大数据集的能力,以及在所存储的数据集中搜索、过滤、列表、枚举、定位或检索信息的能力。

现如今,表示数据集的字母数字标记通常根据诸如电子表格或电子关系数据库之类的数字电子数据结构进行存储。电子表格(也称为平面文件数据库)可以被认为是具有行和列的单个表格,其中,每行对应于特定数据记录,每列对应于该数据记录的特定数据字段。在简单示例中(将在本说明书中重复使用的示例),每条数据记录可以对应于在所有已登记选民的数据集中在特定州(例如俄勒冈州)的已登记选民。每条数据记录中的数据字段可以包括:例如,姓氏、名字、中间名或姓名、年龄、性别、婚姻状况、种族、种族划分、宗教、其他人口统计信息、街道地址(可能分为街道号码、街道名称等多个数据字段)、城市、州、邮政编码、党派、投票历史、县、美国住宅区、州参议院或住宅区、学区、其他行政区等。

关系数据库通常包括多个表,每个表包括:具有多个字段的多条记录;以及在不同表中的各个字段之间限定的关系。在上面给出的已登记选民示例中,“选民”表可以包括在相应字段中的具有姓名和人口统计信息的选民记录,并且“地址”表可以包括在相应字段中的包括街道地址和地区信息的地址记录。选民表中的字段可以包括指向地址表中相应地址的指针,该指针限定了每个地址与一个或多个相应选民之间的一对多关系。可以限定其他表和关系(包括多对多关系和限定这些关系的所谓的数据透视表)。

电子表格和电子关系数据库已成为存储数字数据集的标准方法。电子表格和电子关系数据库在排列数据以用于更新数据、添加新数据以及分类、搜索、过滤或检索数据方面提供了几乎不受限制的灵活性。然而,已经发现的是,对于非常大的数据集(例如,>106或更多条记录,或甚至少至>104或>105条记录的数据集),电子表格和数据库往往变得难以存储、访问和搜索。特别地,从这样的大电子数据集中搜索和检索信息可能变得非常慢,以使得该大电子数据集对于某些数据检索应用而言基本上是无用的。

上面引用的内联树专利公开了用于高速搜索和过滤大数据集的替代系统和方法。如这些专利中所公开的,并且与传统的电子表格和关系数据库相比,数据集被存储为专用的、高度压缩的二进制数据结构,该二进制数据结构根据更传统的数据结构使用专用的、特别适合的转换程序来生成;使用专用的、特别适合的搜索和过滤程序来搜索和过滤该二进制数据结构。内联树数据结构通常可以存储在二进制文件中,该二进制文件在数字存储介质上每条记录每个字段占用小于约1个字节到2个字节(例如,一百万条记录(每条记录具有100个字段)的数据集可以以小于约100mb至200mb的形式存储)。相对于电子表格或关系数据库容量显著减小(通常大于1/10)通常能够使整个数据集被加载到随机存取存储器中以进行搜索和过滤,从而显著提高这些操作的速度。小容量和连续排列的内联树数据结构还加速了搜索和过滤过程,以便可以以每个处理器核每条记录小于约150纳秒至500纳秒来搜索和过滤大数据集(例如,106、108或更多条数据记录,每条数据记录包括100多个数据字段)。

在附加改型(如第二个内联树申请和第三个内联树申请中所公开的)中,可以采用所谓的群集报头表来指示共享大量数据字段值(例如,地理上受限制的诸如国家、城市、国会区、学区之类不能以任意组合出现的字段值)的数据记录组,并且将搜索和过滤程序引导向仅内联树数据结构中群集的数据字段值匹配搜索或过滤准则的部分。在另一改型(如第三个内联树申请中所公开的)中,可以采用辅助的并行数据结构与内联树数据结构来存储附加数据字段值或替换数据字段值。搜索和过滤程序可以适合于并行地询问内联树数据结构和辅助数据结构。辅助数据结构可以用于实现对某些数据字段值的修改而无需重新生成整个内联树数据结构,以使内联树数据结构的不同用户能够添加他们自己的附加数据字段,以有利于聚合某些数据记录用于许可或购买或其他目的。

如上所述,内联树专利的内联树数据结构具有高度专用的结构,该高度专用的结构必须由专用的、特别适合的转换程序生成并且必须由专用的、特别适合的搜索和过滤程序搜索和过滤。与电子表格或关系数据库不同的是,内联树数据结构难以修改以包括新数据或更新的数据。对于待插入现有数据字段中的新数据或替换数据,或者对于将完整的新记录添加到数据集的新数据或替换数据,通常执行转换程序以生成全新的内联树结构。对于待添加到数据集的新数据字段,转换程序必须适合于在生成新的内联树结构之前适应这些新字段,并且搜索和过滤程序必须适合于适应新的内联树数据结构。如在内联树专利中所描述的,这种灵活性和可更新性丧失所付出的代价是为了获得小容量和快速搜索的内联树数据结构。



技术实现要素:

数据集的电子标记包括内联树数据结构和一个或多个辅助数据结构。数据集包括多条数据记录,并且每条数据记录包括用于多个相应的定义数据字段的字段值字符串。该定义数据字段包括终端节点数据字段和第一级分支节点数据字段,并且可以进一步包括一级或多级的更高级分支节点数据字段;分支节点数据字段限定分支节点数据字段的字段值字符串的子界中的分层树关系,该子界对应于数据集的数据记录的一个或多个级的多个分支节点子集。

内联树数据结构仅包括有序排列的终端节点二进制字符串。终端节点二进制字符串与数据集的数据记录之间存在一对一的对应关系,并且终端节点二进制字符串彼此具有相同的长度。每个终端节点二进制字符串包括指示符字符串,针对每个终端节点二进制字符串,该指示符字符串指示以下:(i)有序排列的的终端节点二进制字符串和紧邻的终端节点二进制字符串对应于在同一第一级分支节点子集中的相应的数据记录;(ii)该相应的数据记录在彼此不同的第一级分支节点子集中;或者(iii)终端节点二进制字符串是内联树数据结构的最后一个终端节点二进制字符串。在一些示例中,对于除第一级分支节点二进制字符串之外的所有终端节点二进制字符串,毗邻的终端节点二进制字符串是紧邻在前的终端节点二进制字符串。在另一些示例中,对于除第一级分支节点二进制字符串之外的所有终端节点二进制字符串,毗邻的终端节点二进制字符串是紧邻在后的终端节点二进制字符串。

对于每个第一级分支节点子集,相应的终端节点二进制字符串在内联树数据结构内形成单个连续的字符串序列。对于每个更高级分支节点子集(如果存在更高级分支节点子集的话),相应的终端节点二进制字符串在内联树数据结构内形成单个连续的字符串序列。一个或多个辅助数据结构包括数据集的数据记录的字段值字符串的电子标记,该字段值字符串以与内联树数据结构中的有序排列的终端节点二进制字符串相同的顺序被布置、被索引或可访问。

一种计算机实现的方法包括:(a)在计算机系统处接收或从一个或多个计算机可读存储介质读取数据集的第一电子标记;(b)使用计算机系统的被编程并可操作地耦接到一个或多个存储介质的一个或多个电子处理器,生成数据集的第二电子标记,该第二电子标记包括内联树数据结构和一个或多个辅助数据结构;以及(c)将内联树数据结构和一个或多个辅助数据结构存储在可操作地耦接到计算机系统的一个或多个电子处理器的一个或多个计算机可读存储介质上。

一种计算机实现的方法包括:(a)在计算机系统处接收对数据集的数据记录的搜索查询,对于在数据集的定义数据字段中的一个或多个选定的查询数据字段中的每一个,该数据记录包括落入相应的查询字段值子界内的相应字段值;(b)利用被编程的计算机处理器按顺序自动询问内联树数据结构中的有序排列的终端节点二进制字符串,以识别相应的指示符字符串;(c)作为在部分(b)中询问的每个终端节点二进制字符串,在一个或多个辅助数据结构中利用被编程的计算机处理器自动询问仅在相应的数据记录的选定的查询数据字段中的字段值字符串,以识别满足部分(a)的搜索查询的数据记录,其中,在部分(c)中针对每条数据记录询问的字段值字符串部分地由在部分(b)中识别的相应的指示符字符串来确定;(d)对于不满足部分(a)的搜索查询的每个第一级分支节点字段值,省略部分(c)的对数据记录的相应的第一级分支节点子集的终端节点数据字段的询问;(e)对于不满足部分(a)的搜索查询的每个更高级分支节点字段值(如果存在更高级分支节点字段值的话),省略部分(c)的对数据记录的相应的更高级分支节点子集的终端节点数据字段的询问;以及(f)使用被编程的计算机处理器自动生成在部分(c)中被识别为满足在部分(a)中接收到的搜索查询的数据记录的列表或枚举。

参照附图中所示出的以及在以下书面描述或所附权利要求中所公开的示例性实施例,关于电子数据搜索、过滤或检索的目的和优势将变得明显。提供本发明内容是为了以简化的形式介绍一些概念,这些概念将在以下详细描述中进一步说明。本发明内容不旨在识别所要求保护主题的关键特征或基本特征,也不旨在被用于帮助确定所要求保护的主题的范围。

提供本发明内容是为了以简化的形式介绍一些概念,这些概念将在以下详细描述中进一步说明。本发明内容不旨在识别所要求保护主题的关键特征或基本特征,也不旨在被用于帮助确定所要求保护的主题的范围。

附图说明

图1示意性地示出了通用的示例数据集的三级分层布置。

图2示意性地示出了对应于图1的示例数据集的以传统的平面文件数据库的示例布置的标记的示例。

图3示意性地示出了对应于图1的示例数据集的以传统的关系数据库的示例布置的标记的示例。

图4示意性地示出了对应于图1的示例数据集的以内联树专利的内联树数据结构的示例布置的标记的示例。

图5示意性地示出了用于图1的示例数据集的本发明的存储布置的条带状内联树数据结构的示例。

图6a至图6c示意性地示出了用于图1的示例数据集的本发明的存储布置的辅助数据结构的示例。

图7是用于查询根据图5、图6a、图6b和图6c的示例性的本发明的布置存储的数据集的示例方法的流程图。

图8是用于查询根据图5、图6b和图6c的示例的本发明的布置所存储的数据集的示例性方法的流程图。

仅示意性地示出了所描述的实施例:所有特征可能不是完整显示或以适当比例显示;为清楚起见,某些特征或结构可相对于其他特征或结构被放大;并且附图应当被理解为并非按比例会制。示出的实施例仅是示例:这些实施例不应该被理解为限制本公开或所附权利要求的范围。

具体实施方式

在电子数据集的许多示例中,数据包括多条字母数字数据记录,并且这些数据记录中的每一个又包括多个数据字段中的每一个中的相应的字母数字字段值字符串(即,字段值)。在许多情况下,可以根据分层的多级树结构来组织数据集。树结构的最低级包括对应于数据集的单独的数据记录的所谓的终端节点(又称为“叶”节点,与树类比(treeanalogy)保持一致);与终端节点相关联的数据字段被称为终端节点数据字段。从终端节点开始的层级是第一级分支节点,以及可能是第二级分支节点或甚至更高级分支节点;与第一级分支节点相关联的那些数据字段被称为第一级分支节点数据字段,与第二级分支节点相关联的那些数据字段(如果存在第二级分支节点的话)被称为第二级分支节点数据字段,如此类推,与更高级分支节点(如果存在更高级分支节点的话)相关联的那些数据字段被称为更高级分支节点数据字段。

这种树结构的每个第一级分支节点通常表示以下两者之间的一对多关系:(i)一个或多个第一级分支节点数据字段中的每一个中的单个子界(subrange)值,以及(ii)一个或多个终端节点,针对该一个或多个终端节点的相应的数据记录包括落入相应的子界内的那些第一级分支节点数据字段的字段值。对应于那些终端节点的数据记录形成数据记录的第一级分支节点子集,所有这些数据记录具有在相应的子界内的第一级分支节点数据字段中的值。每条数据记录仅属于一个第一级分支节点子集,与多级树分层结构的布置一致;因此,可以说每个终端节点仅“属于”一个第一级分支节点。类似地,如果存在第二级分支节点,则树结构的每个第二级分支节点通常表示以下两者之间的一对多关系:(i)一个或多个第二级分支节点数据字段中的每一个中的单个子界值,以及(ii)一个或多个终端节点,针对该一个或多个终端节点的相应数据记录包括落入相应子界内的那些第二级分支节点数据字段的字段值。对应于那些终端节点的数据记录形成数据记录的第二级分支节点子集,所有这些数据记录具有在相应子界内的第二级分支节点数据字段中的值。每个第一级分支节点子集是仅一个第二级分支节点子集的子集,与多级树分层结构的布置一致;因此,可以说每个第一级分支节点仅“属于”一个第二级分支节点。如果层级结构中存在其他更高级,则可以类似地限定更高级分支节点数据字段和更高级分支节点子集。

俄勒冈州所有已登记选民的数据记录的数据集将被重复使用作为本公开中的示例。然而,本文所公开或要求保护的系统和方法不限于该数据集或该一般类型的数据集,而可以应用于可根据本文示例性的数据结构来布置数据的任何数据集。俄勒冈州的已登记选民数据集包括在约1.0×106个不同地址(作为第一级分支节点)处的约1.9×106个个体选民(作为终端节点)的数据记录。图1示意性地示出了用于将数据组织成三级分层的通用树形结构的示例(图1中由a、b和c表示级别;“a”级节点是第二级分支节点,“b”级节点是第一级分支节点,“c”级节点是终端节点。针对每个选民有几十个可能的数据字段(即终端节点数据字段),而针对每个地址有大约100个可能的数据字段(即,第一级和第二级分支节点数据字段)。包含俄勒冈州的已登记选民的数据集的传统电子表格或平面文件数据库在存储在计算机硬盘上时大小约为2gb(千兆字节)。

虽然本文所公开的所有系统和方法都是关于三级示例来描述的,但是应理解那些所公开的系统和方法可以推广到根据包括任何必要的、期望的或合适数量的两个或更多个级别的分层树结构组织的数据,并且除非明确限制为特定数量的级别,否则权利要求应包含任意数量的级别。

用于已登记选民示例的三级数据层级结构的一个示例可以包括:作为第二级分支节点的街道a[x]、作为第一级分支节点的地址b[xy]和作为终端节点的选民c[xyz]。在该示例中存在包含整个数据集的街道a[1]、a[2]、...、a[x]等。对于每条街道a[x],存在包含该街道的地址b[x1]、b[x2]、...、b[xy]等。在每个地址b[xy]处,有选民c[xy1]、c[xy2]、...、c[xyz]等。每条数据记录包括在相应数据字段中的字母数字字段值字符串,该字母数字字段值字符串表示终端节点并指示该终端节点的相关属性(即,标记为fc1、fc2、fc3等的终端节点数据字段中的字段值);并且还可以包括在相应数据字段中的字段值字符串,该字段值字符串指代以下:(i)表示第一级分支节点,并且表示相应终端节点所连接的第二级或更高级分支节点(如果存在第二级或更高级分支节点的话),以及(ii)指示与那些更高级节点相关联的属性(即,标记为fb1、fb2、fb3等的第一级分支节点数据字段中的字段值;标记为fa1、fa2、fa3等的第二级分支节点数据字段(如果存在第二级分支节点数据字段的话)中的字段值;以及更高级别的分支节点数据字段(如果存在更高级别的分支节点数据字段的话)中的字段值)。给定数据记录的特定字段值由例如fa2(i)、fb4(i,j)、fc7(i,j,k)等来表示。

在图1的三级分层示例数据中,数据字段fa1、fa2等可以被称为第二级分支节点数据字段。可以通过为每个数据字段fan指定在一条或多条数据记录中的该字段中出现的字段值字符串(等效地,为数据值)的子界来限定每个第二级分支节点a[x]。注意的是,给定的子界可以包括单个字符串或空字符串(即,字段中不存储字符串)。因此,每个节点a[x]对应于数据集中的数据记录的第二级分支节点子集,其中,第二级分支节点子集仅包括每个第二级数据字段fan的字段值落在相应子界内的那些数据记录。类似地,数据字段fb1、fb2等可以被称为第一级分支节点数据字段。每个节点b[xy]可以通过为每个字段fbm指定在一条或多条数据记录中的该字段中出现的字段值字符串(等效地,为数据值)的子界来限定(再次重申,给定的子界可以包括单个字符串或空字符串)。因此,每个节点b[x]对应于相应第二级子集内的数据记录的第一级分支节点子集,其中,第一级分支节点子集仅包括每个第一级数据字段fbm的字段值落在相应子界内的那些数据记录。与分层树结构的性质一致,每条数据记录仅包含在一个第一级分支节点子集中,并且每个第一级分支节点子集仅是单个第二级分支节点子集的子集(即,给定的第一级分支节点子集的所有数据记录属于同一第二级分支节点子集)。前面的描述可以推广到第三级、第四级或甚至更高级别的分支节点、数据字段和数据记录子集。

分层数据树可以包括所需或所期望的尽可能多的级别(在某些情况下可以根据树的分支而变化),并且可以在任何给定级别包括所需或所期望的尽可能多的节点。在另一示例中,图1的整个分层数据布置本身可以构成更大树结构的终端节点。除了已登记选民的示例之外,根据分层树有利地组织的数据的其他具体示例可以包括以下数据:例如由州(a)、县(b)、街区(c)、人口普查区(d)和籍贯(e)组织的人口普查数据;例如由客户(a)、订单(b)和付款(c)组织的销售数据;例如由大陆(a)、国家(b)、州或省(c)和城市(d)组织的地理政治数据;例如由纬度和经度的度(a)、分(b)和秒(c)组织的地理空间数据;例如由年(a)、月(b)、日(c)、小时(d)和分钟(e)组织的时间序列数据;或不同层级的组合(例如,由不同地理空间位置的设备生成的时间序列数据)。那些和任何其他合适的示例应落入本公开或所附权利要求的范围内。

为了便于在本说明书和权利要求书中进行描述,可以互换地引用存储的电子标记(electronicindicia)及该电子标记代表的基础数据。应当注意的是,数据本身是抽象的,并且代表性标记是在本文公开或要求保护的方法和系统中被电子存储、被处理、被布置在数据结构中的对象,以及被搜索、被检索或以其他方式被操纵的对象。在本公开中使用的术语“数据”、“字段值”等应当被理解为在适当的情况下指示代表性标记。

如上所述,可用于存储图1中表示的数据的一种传统电子数据结构是电子表格,在该电子表格中,表示数据的电子标记被组织成行和列(即,具有以通常的方式限定的“行”和“列”的平面文件数据库)。在图2中示意性地示出了这种电子表格的几行。电子表格的每一行对应于数据集的一条数据记录,进而对应于图1的树的“叶节点”之一(例如,c[xyz])。电子表格的列对应于数据字段并且包括:数据记录c[xyz]的字段值fc1(x,y,z)、fc2(x,y,z)等;节点b[x,y](在层级结构中的对应的第一级分支节点)的字段值bf1(x,y)、bf2(x,y)等;以及节点a[x](在层级结构中的对应的第二级分支节点)的字段值af1(x)、af2(x)等。如果存在其他更高级别的分支节点,则将包括其他字段。注意的是,电子表格中会为每条数据记录的每个可能的数据字段保留空间,无论给定的数据记录是否包含该字段中的数据。还要注意的是,分支节点数据字段的数据在对应于连接到对应的分支节点的终端节点的每条数据记录中被重复。

可用于存储图1中表示的数据的另一种传统电子数据结构是电子关系数据库,在该电子关系数据库中,表示数据的电子标记被组织成表格,如图3中示意性所示。“c”表中的每个表记录表示相应的“叶节点”c[xyz],并且包括:标识符字段值id-c(x,y,z)、相应的数据字段值fc1(x,y,z)、fc2(x,y,z)等以及相应的第一级分支节点b[xy]的标识符字段值id-b(x,y)。“b”表中的每个表记录表示对应的第一级分支节点b[xyz],并且包括:标识符字段值id-b(x,y)、相应数据字段值fb1(x,y)、fb2(x,y)等以及相应的第二级分支节点a[x]的标识符字段值id-a(x,y)。“a”表中的每个表记录表示对应的第二级分支节点a[x],并且包括:标识符字段值id-a(x)和相应的数据字段值fa1(x)、fa2(x)等。如数据库管理领域的技术人员所理解的,图3的每个表格被理解为表示所示类型和内容的多个不同的表记录。连接不同表的特定字段的虚线表示在关系数据库结构内建立的一对多关系(例如,一个第二级分支节点a[x]对一个或多个第一级分支节点b[xy]、一个第一级分支节点b[xy]对一个或多个终端节点c[xyz])。注意的是,与图2的电子表格数据结构相同的是,为每条数据记录的每个可能字段保留空间。然而,与图1的电子表格示例不同的是,不需要为每个叶节点重复存储多条数据记录共有的数据字段。例如,“b”表和“c”表中的id-b字段之间的关系使得能够在“b”表中仅存储每个fbm(x,y)字段值一次。图3的示例是仅包括一对多关系的关系数据库结构的相对简单的示例;更复杂的示例可能包括需要所谓的“数据透视表”的更多表和多对多关系。

如上所述,传统的电子数据结构(例如电子表格和数据库)在以下方面提供了极大的灵活性:添加、删除或修改数据记录;建立不同记录中的数据字段之间的关系;以及实现数据集的各种分类、搜索、过滤或查询。然而,为了提供这种灵活性,随着数据集中记录数量的增加,数据结构变得非常大并且效率越来越低,原因在于:部分是由于限定数据结构所需的数据(即“开销”),部分是由于为空数据字段保留的空间。为了提高速度,关系数据库通常包括搜索索引,但这些会进一步增加数据结构的总体大小。大的数据结构对该结构可以分类或搜索的速度的影响的很大一部分来自如在内联树专利中所描述的计算机或服务器处理大数据结构的方式,在本文中对处理大数据结构的方式不再赘述。

在图4中示意性地示出了根据内联树专利中的一种或多种布置的内联树数据结构的示例。图4的数据结构的目标是:(i)能够显著减小所存储的数据结构的总体大小(除此之外,使得将数据结构完整地存储在ram中,即使该数据结构包括数百万、数千万或数亿条记录,或更多条记录);以及(ii)减少给定的数据段从ram被检索到处理器高速缓存或寄存器中的次数(优选地,减少为每个数据段进行单次这样的检索)。对于每条记录有100个字段的一百万条记录的数据集,相对于传统数据结构中的相同数据集,可以实现并且已经观察到大小减少到传统数据结构大小的约1/10至1/5,或者减少到更少。对于对该数据集的简单搜索、分类或过滤操作,相对于在传统数据结构中对相同数据集执行的类似操作,可以实现并且已经观察到速度增大到约5倍到100倍或更多倍。

图4的数据结构可以被称为“内联树”数据结构,在该结构中,图1的树的分支和叶子被分开并且按顺序布置。没有像电子表格中那样的行/列布置,也没有像关系数据库中那样的任何表布置。图4的数据结构可以被视为单个长的连续的有序排列的二进制字符串(即,单行二进制数字)。有序序列中的每个二进制字符串表示在基础数据集中的数据字段中的相应的字母数字字符串,以这样的方式可以减小二进制字符串的大小。二进制字符串还被布置成增加以下可能性:(i)当一个数据段被拉入处理器高速缓存中进行处理时,下一个待处理的段已与该数据段一起被拉入处理器高速缓存中;以及(ii)该数据段中的所有字段在该段首次被拉入处理器高速缓存后将得到处理,因此不需要再次将该段拉入处理器高速缓存中。

在图4中示意性地示出了如内联树申请中所公开的内联树数据结构的总体布置方式(尽管这些专利和本公开之间的术语存在一些变化)。图中的每个块对应于基本上连续的二进制字符串集,每个二进制字符串组表示基础数据记录的一个或多个分支节点数据字段值或终端节点数据字段值。例如,标记为c[xyz](即,c[111]、c[112]等)的终端节点二进制字符串集包括表示每个相应数据记录(即,每个相应终端节点)的一个或多个数据字段中的值fc1(x,y,z)、fc2(x,y,z)等。类似地,标记为b[xy](即,b[21],b[22]等)的第一级分支节点二进制字符串集包括表示数据记录的相应第一级分支节点子集的一个或多个数据字段中的值fb1(x,y)、fb2(x,y)等;以及标记为a[x](即,a[1]、a[2]等)的第二级分支节点二进制字符串集包括表示数据记录的相应第二级子集的一个或多个第二级数据字段fa1数据字段等中的值fa1(x)、fa2(x)等。

在图4的示例中,二进制字符串集a[x]、b[xy]和c[xyz]可以被布置成内联树,以便数据记录的每个第二级分支节点子集由二进制标记表示,该二进制标记包括对应的基本上连续的第二级分支节点二进制字符串序列,例如,所有二进制字符串集a[1]、b[1y]和c[1yz]一起形成表示数据记录的第一对应的第二级分支节点子集的第一基本上连续的第二级分支节点二进制字符串序列;所有二进制字符串集a[2]、b[2y]和c[2yz]一起形成表示数据记录的不同的第二对应的第二级分支节点子集的第二对应的基本上连续的第二级分支节点二进制字符串序列,依此类推。每个第二级分支节点二进制字符串集a[x]可以充当其对应的基本上连续的第二级分支节点二进制字符串序列的头。

在图4的示例中的每个第二级分支节点二进制字符串序列中,二进制字符串集b[xy]和c[xyz]被布置在内联树中,以便数据记录的每个第一级分支节点子集由二进制标记表示,该二进制标记包括对应的基本上连续的第一级二进制字符串序列,例如,所有二进制字符串集b[11]和c[11z]一起形成表示数据记录的对应的第一级子集的对应的基本上连续的第一级二进制字符串序列;所有二进制字符串集b[23]和c[23z]一起形成不同的表示数据记录的不同的相应的第一级子集的基本上连续的第二级二进制字符串序列,依此类推。每个第一级分支节点二进制字符串集b[xy]可以充当其对应的基本上连续的第一级二进制字符串序列的头。二进制字符串序列的连续排列的一些影响在内联树专利中进行进一步讨论,在本文中不再赘述。为了搜索或过滤数据集的数据记录,搜索或过滤程序将遍历部分或全部内联树,根据选定的搜索准则或过滤准则询问每个选定字段的二进制字符串。在内联树申请中公开了细节,在本文中不再赘述。

在图4的示例中,内联树可以包括编码多个字段的字段值的二进制字符串;因此,在一些示例中,对所有字段的字段值进行编码,而在其他示例中,对仅被选择为对该数据集可过滤的某些字段的值以二进制字符串进行编码。如前所述,大数据集可以包括每条数据记录的数十个或数百个字段(或更多)。在某些情况下,例如当给定的搜索或过滤查询中包括大量字段时,图4的布置可以是用于实现对大数据集的快速搜索和过滤的最佳布置。但是,询问图4的内联树以搜索或过滤数据记录包括:对于内联树中的每个二进制字符串,确定该二进制字符串的大小(基于该二进制字符串所代表的字段),以便该二进制字符串可以被正确地解译(如果相应的字段是查询的一部分)或被正确地跳过(如果相应的字段不是查询的一部分)。如果已经观察到在某些情况下(例如,当给定的搜索或过滤查询中仅包括一个或两个或少数字段时),必要的逐字符串确定大小会消耗所花费的大部分计算时间。换言之,当查询中仅包括几个字段时,搜索或过滤程序倾向于花费很多(可能是大部分)计算时间来确定如何跳过图4的二进制字符串,该二进制字符串编码与特定查询无关的字段的值。期望实现针对搜索或过滤查询的进一步的速度增益(例如,超过通过内联树专利的方法所实现的速度增益),其中,仅少数字段而非数十个或数百个字段包括在数据集中。本文中所公开的本发明的数据结构在上述情况下实现了这种速度增益。

图5示意性地示出了本发明的在说明书中被称为“条带状内联树”但在权利要求中被引用为“内联树数据结构”的数据结构,权利要求中采用附加限制来限定此处所描述的“条带状”性质。简而言之,本发明的内联树数据结构被称为“条带状”的数据结构的原因在于:(i)该内联树数据结构不包括对任何分支节点数据字段值的编码或表示,并且不包括分支节点二进制字符串;以及(ii)在该内联树数据结构的最基本的形式(即,最“条带状”的形式)中,该内联树数据结构不包括表示或编码任何终端节点数据字段值的终端节点二进制字符串。

条带状内联树包括有序排列的终端节点二进制字符串c[xyz],该终端节点二进制字符串c[xyz]表示分层树的终端节点,即表示数据集的数据记录。然而,与图4的内联树不同的是,图5的条带状内联树不包括对应于第一级、第二级或更高级别的分支节点的二进制字符串,并且不编码或不表示分支节点数据字段值。然而,终端节点二进制字符串c[xyz]以与图4的内联树中相同的顺序布置成图5的条带状内联树。更具体地,在图5的示例中,终端节点二进制字符串c[xyz]被布置成条带状内联树,以便数据记录的每个第二级分支节点子集由二进制标记表示,该二进制标记包括在条带状内联树内的对应的单个基本上连续的第二级分支节点二进制字符串序列,例如,所有终端节点二进制字符串c[1yz]一起形成表示数据记录的第一对应的第二级分支节点子集的第一基本上连续的第二级分支节点二进制字符串序列;所有终端节点二进制字符串c[2yz]一起形成表示数据记录的不同的第二对应的第二级分支节点子集的第二对应的基本上连续的第二级分支节点二进制字符串序列,依此类推。在图5的示例中的每个第二级分支节点二进制字符串序列中,终端节点二进制字符串集c[xyz]被不成成条带状内联树,以便数据记录的每个第一级分支节点子集由二进制标记表示,该二进制标记包括对应的基本上连续的第一级二进制字符串序列,例如,所有终端节点二进制字符串c[11z]一起形成表示数据记录的对应的第一级子集的对应的基本上连续的第一级二进制字符串序列;所有终端节点二进制字符串c[54z]一起形成表示数据记录的不同的对应的第一级子集的不同的基本上连续的第二级二进制字符串序列,依此类推。

省略表示分支节点数据字段值的分支节点二进制字符串是图5的本发明的条带状内联树与图4的内联树之间的一个区别点。另一个区别是二进制字符串不需要编码或表示终端节点数据字段的任何值。条带状内联树的主要目的不是编码或表示数据,而是作为数据的树结构的指南(guide);条带状内联树可以被视为对数据集的分层树结构的“拓扑结构”(当然,不严谨地使用术语“拓扑结构”)进行编码。每个给定的终端节点二进制字符串c[xyz]包括指示符二进制字符串(有时称为“标记(sentinel)”字符串),该指示符二进制字符串指示以下之一:(i)有序排列的终端节点二进制字符串和紧邻的终端节点二进制字符串对应于在同一第一级分支节点子集中的相应的数据记录;(ii)相应的数据记录在彼此不同的第一级分支节点子集中;或者(iii)终端节点二进制字符串是内联树数据结构的最后一个终端节点二进制字符串。如果存在更高级别的数据字段,则指示符字符串可以进一步指示:(ii′)相应的数据记录在彼此不同的第一级分支节点子集中,但不在不同的更高级别的分支节点子集中;或者(ii″)在分支节点子集中的高于第一级分支节点子集的最高级分支节点子集的各个数据记录也在彼此不同的更高级分支节点子集中。在一些示例中,对于除第一个终端节点二进制字符串之外的所有终端节点二进制字符串,相邻的终端节点二进制字符串是紧接在前的终端节点二进制字符串;在其他示例中,对于除了最后一个终端节点二进制字符串之外的所有终端节点二进制字符串,相邻的终端节点二进制字符串是紧接在后的终端节点二进制字符串。在前面的示例中(即,每个终端节点二进制字符串指的是在前的字符串),通常没有终端节点二进制字符串表示它是最后一个字符串;搜索程序设置有数据集中数据记录的总数以确定搜索的结束。在后面的示例中(即,每个终端节点二进制字符串指的是下一字符串),“laststring”字符串可以用作确定搜索结束的指示符;在下文中讨论讨论这种示例,但是除非明确地限于一个或另一个场景,否则本公开和所附权利要求应被解释为包含两个场景。

搜索或过滤程序的一部分包括遍历条带状内联树的有序排列的终端节点二进制字符串c[xyz],并且在每步骤中基于指示符字符串确定分层数据集中的哪个是由当前终端节点二进制字符串表示的数据记录。所有的终端节点二进制字符串c[xyz]具有相同的长度,因此搜索或过滤程序不需要包括对条带状内联树中的下一二进制字符串的大小的任何确定。由于终端节点二进制字符串的大小恒定,因此相对于图4的遍历内联树,图5的遍历条带状内联树消除了大量的计算负担。对于在任何单次搜索查询中仅查询少数数据字段而多个数据字段的搜索或过滤操作,根据相对于所存储的字段总数查询的字段数,计算时间可以减少到1/2或1/3,甚至减少到1/10或1/20或减少到更少。

与内联树专利和图4的数据结构相反,在本发明的数据结构中,数据记录的实际字段值被存储或被编码在一个或多个(通常更多)辅助数据结构中,该辅助数据结构通常是平面文件、电子表格或字母数字数组或二进制数组(例如,如图6a至图6c中的三级分层,或仅在图6b和图6c中的两级分层)。这里使用的术语“数组”或“辅助数组”应包括任何合适的辅助数据结构,包括用于存储、表示或编码数据集的数据记录的字段值所列出的那些辅助数据结构。在任何一个查询中仅包括少数数据字段的情况下,在相应的分离的平面文件或数组中存储每个数据字段的字段值或仅存储少数数据字段集可能是有利的。可以使用许多这样的数组来存储大量定义的数据字段的字段值。对于每次查询,只需要将与所查询的字段对应的那些数组加载到存储器中并进行询问。跳过与查询无关的字段值不需要处理器时间或计算资源;没有计算机存储器(ram或处理器缓存)被与查询无关的字段值占用。这两者都使得速度明显增大或或者用于提供对给定数据集的搜索的硬件要求降低。

终端节点数据字段的字段值在一组一个或多个终端节点辅助数组(图6c)中存储或编码,以及所述终端节点数据字段的字段值以与图5的条带状树中排序的相应的终端节点二进制字符串的相同顺序被布置、被索引或可访问。第一级分支节点数据字段的字段值在一组一个或多个第一级分支节点辅助数组(图6b)中存储或编码,以与图5的条带状树中排序的相应的连续第一级分支节点二进制字符串序列的相同顺序被布置、被索引或可访问。如果存在第二级或更高级别的分支节点数据字段,则相应的字段值在一个或多个第二级或更高级别的分支节点辅助数组(图6a)中存储或编码,以及以与图5的条带状树中排序相应的连续第二级或更高级别的分支节点二进制字符串序列的相同顺序被布置、被索引或被访问。每个数组可以存储仅单个数据字段的值,或者存储一组多个数据字段的值。如果多个数据字段的字段值一起被存储在单个数组中,则可以以任何合适的、所需的或必要的方式对这些字段值进行分组。在一些示例中,频繁被一起搜索的字段(例如,纬度和经度;年龄、性别和婚姻状况)可以一起存储在同一数组中。在一些示例中,可以采用一定程度上任意分组的数据字段来将数组条目“填充”为每个数组元素整数个字节(例如,可以将可能存在逻辑上彼此相关或在逻辑上彼此不相关的八个一比特字段值存储在一起,以便每个数组元素由一个完整的字节组成);这样的布置通常提高了存储数组、将数组加载到存储器(例如,ram或处理器高速缓存)或在搜索期间询问数组的速度或效率。

在任何情况下,在许多数组中划分字段值使得能够仅将特定搜索查询所需的那些数组选择性地加载到存储器中。根据搜索查询,速度明显增加且硬件需求减少是由于以下原因:由于选择性的加载从而用于针对每次搜索查询将“整个”数据集加载到存储器中(即,为每条数据记录加载字段值,但仅是针对包括给定搜索查询中所涉及的那些字段的数量减少的字段集)的存储器需求(ram或处理器高速缓存)减少。例如,如果对某个年龄范围(俄勒冈州选民示例中的终端节点数据字段)内、某个国会区(第一级分支节点数据字段)和特定政党关系(另一终端节点数据字段)内的选民进行搜索,则只需要将编码这三个数据字段的数组加载到存储器中执行搜索。不需要加载其他数十个(甚至数几百个)字段。

可以根据任何合适的、期望的或必要的格式或协议来存储或编码数据字段值;这些格式或协议对于所有数组可以是相同的,或者在多个数组之间可以是不同的。在一些示例中,数据字段值的原始字母数字表示或其编码(例如ascii编码)可以存储在数组中。在其他示例中,诸如字符串索引或字符串驻留之类的标准技术可以用来将字母数字数据字段值编码为二进制数字索引。通常,采用某种主字符串表来将存储在数组中的字符串索引与这些字符串索引所代表的数据字段值相关联。在其他示例中,来自相对受约束的多个数据字段的字段值(例如,在选民示例中的多个地址相关的数据字段(诸如城市,国会区,学区之类)不能以任意组合出现)可以被所谓的集群索引取代,使得存储空间需求大幅减少。通常,采用某种集群索引表来将存储在数组中的集群索引与对应的字段值集相关联。这两种技术(字符串索引和数据集群)在内联树专利中被广泛地描述,并且这些描述在本文中不再赘述。

利用被编程的计算机处理器对本发明的数据结构执行搜索或过滤可以如下操作:(i)接收一组选定的查询数据字段;(ii)接收一组一个或多个搜索准则(即,为每个选定的查询数据字段选择相应的查询字段子界);(iii)按顺序询问条带状内联树的终端节点二进制字符串,并且并行地以相同的顺序询问与选定的查询数据字段对应的一个或多个辅助数据结构;以及(iv)基于对一个或多个辅助数据结构的询问,识别符合、满足或匹配搜索准则的数据记录。

图7的流程图示出了搜索方法的示例。在该示例中,数据集被组织成三级树结构,该三级树结构包括第二级分支节点和第一级分支节点(即,分别为a级分支节点和b级分支节点)以及终端节点(即,c级节点,其对应于各个数据记录)。可以根据需要将图7的搜索方法修改或推广到具有任意数量的两级或更多级别的分层树数据集(例如,图8的流程图示出了两级示例,并且图7的以下描述也适用于图8)。在以三级数据集执行图7所示的方法的示例中,搜索查询可以包括在层级结构的所有三个层级处的选定的查询数据字段。换言之,最常用的搜索查询指定了以下:(i)一个或多个选定的第二级查询数据字段(即,a级数据字段)和针对每个选定的第二级查询数据字段的相应字段值查询子界;(ii)一个或多个选定的第一级查询数据字段(即,b级数据字段)和针对每个选定的第一级查询数据字段的相应字段值查询子界;(iii)一个或多个选定的终端节点查询数据字段(即,c级数据字段)和针对每个选定的终端节点查询数据字段的相应字段值查询子界。响应于搜索查询,对应于选定的查询数据字段的终端节点、第一级数组和第二级数组被加载到存储器中。在其他示例方法中,搜索查询可能不包括在层级结构的所有层级处的查询数据字段。一些示例搜索查询可以仅包括终端节点查询数据字段、仅包括第一级分支节点查询数据字段、仅包括更高级别的分支节点查询数据字段、仅在层次结构的两个层级处的查询数据字段等等。

在接收到查询时,使用被编程的计算机处理器来自动询问内联树数据结构的有序排列的终端节点二进制字符串(例如,在图7的流程图中的115、125和135,或者在图8的流程图中的125和135),以确定相应的指示符字符串。在此示例中,指示符字符串表示:(i)下一数据记录在同一第一级分支节点子集中(例如,在图7的115/125/135处或在图8的125/135处的“c”分支);(ii)下一条数据记录位于不同的第一级分支节点子集中但不在不同的更高级别的分支节点子集中(这包括不存在更高级子集的情况;例如,在图7的115/125/135处或图8的125/135处的“b”分支);或(iii)下一数据记录不同的更高级分支节点子集中的最高级别(例如,在图7的115/125/135处的“a”分支;不适用于图8)。

与询问内联树并且以相应的顺序并行进行的是,使用被编程的计算机处理器,仅在包括选定的查询数据字段的字段值字符串的那些一个或多个辅助数据结构中自动询问字段值字符串(例如,在图7的流程图中的110、120或130处,或者在图8的流程图中的120或130处)。满足(即,符合、满足或匹配)搜索查询的数据记录通过询问一个或多个辅助数据结构来识别,并在140处将满足搜索查询的数据记录添加到搜索结果中(即,将满足搜索查询的数据记录添加到数据记录的列表或枚举中)。通过仅询问包括与搜索查询相关的数据字段值的那些辅助数据结构,可以实现所使用的存储器(例如,ram或处理器高速缓存)或所需搜索时间的显著减少。对每条数据记录询问哪些字段值(如果不是全部的话)部分地由从内联树结构读取的指示符字符串确定。例如,在图7的135处,根据内联树数据结构的指示符字符串确定询问下一数据记录中的哪些字段,即“a”分支引起a级查询字段值被询问,“b”分支引起b级查询字段值被询问,而“c”分支引起c级查询字段值被询问。

注意的是,如果给定的搜索查询不包括层级结构的给定级别的查询数据字段,则认为所有数据记录与层级结构的该级别的查询字段匹配,并且术语“询问”相应的字段值包括确定在层级结构的该级别处没有查询数据字段。在一些示例中,不包括a级查询数据字段的搜索查询将始终遵循图7的110处的“是”分支;在一些示例中,不包括b级查询数据字段的搜索查询将始终遵循图7或图8中的120处的“是”分支;在一些示例中,不包括c级查询数据字段的搜索查询将始终遵循图7或图8中的130处的“是”分支。在这些示例的前两个示例中,如果响应于给定的搜索查询而按需求生成相应的动态程序代码,则可以从生成的程序代码中完全省略相应的决策点115或125中的一个或多个。

可以进一步实现减小所需的搜索时间。对于不满足搜索查询的每个第一级分支节点字段值(即,图7或图8中的120处的“否”分支),数据记录的相应第一级分支节点子集的终端节点数据字段(c字段)可以从询问中省略(图7或图8中的125处的“c”分支)。搜索程序循环通过125但不询问任何字段值,直到到达指示不同的第一级分支节点子集的指示符字符串(图7或图8中的125处的“b”分支)。搜索程序通过在120处询问下一b级查询数据字段来继续。类似地,对于不满足搜索查询的每个更高级分支节点字段值(即,图7的110处的“否”分支;不适用于图8),数据记录的相应第二级分支节点子集的第一级数据字段和终端节点数据字段(b字段和c字段)可以从询问中省略(图7的115处的“b”分支和“c”分支)。搜索程序循环通过115但不询问任何字段值,直到到达内联树中指示不同的第二级分支节点子集的指示符字符串(图7的115处的“a”分支)。搜索程序通过在110处询问下一a级查询数据字段来继续。省略这些询问可以节省大量的计算时间。在采用对所谓的搜索查询及时编译的一些示例中,如果在层级结构的相应级别处没有数据字段被选择用于查询,则可以完全省略图7或图8的流程图的相应部分。

如上所述,由搜索程序使用内联树数据结构的指示符字符串(在图7的115、125和135处;在图8的125和135处)来适当地导航通过数据记录的分层组织并减少对数据字段值的不必要的询问。注意的是,在115/125/135的任何一处,如果遇到“最后一个(last)”指示符字符串,则搜索完成(即,已搜索整个数据集)。搜索程序利用被编程的计算机处理器自动生成在上述各种询问过程中被识别为符合、满足或匹配搜索查询的数据记录的列表或枚举。该列表或枚举构成搜索结果。

可以通过以下方式控制搜索程序的进程:例如,简单地通过在辅助数据结构中从一个数组元素移动到下一数组元素,或者在内联树数据结构中从一个二进制字符串移动到下一二进制字符串。替代地或另外地,任何合适的一个或多个计数器、指示符、索引或指针可以以任何合适的方式使用,并且随着搜索程序进展通过内联树和辅助数据结构而递增或移动。

搜索(有时也被称为过滤)过程通常体现为在一个或多个计算机、计算机系统或服务器(包括一个或多个处理器并包括以其他方式可操作地被耦接到任何合适类型的一个或多个计算机可读介质)上运行的计算机程序。执行搜索或过滤功能的计算机、系统或服务器不必(通常不会)与执行根据原始数据集生成内联树和辅助数据结构的数据转换过程的计算机、系统或服务器相同。在这两种情况下(转换和搜索/过滤),计算机、服务器或系统可以是独立的机器,或者可以包括由局域网或广域网(lan或wan)或因特网连接的一台或多台机器。可以采用任何合适的硬件或硬件加软件实现方式来进行搜索或过滤。

对于原始数据集的转换,检查该原始数据集的数据字段以确定数据结构的合适的分层布置。在某些情况下,合适的选择将是显而易见的,例如,如果原始数据集被布置成一系列数据表中,这些数据表被布置为一系列一对多关系(如图3所示)。在其他情况下,针对合适的分层结构的若干选择是可能的,并且可以基于待执行的搜索的性质来选择一个分层结构(例如,选择街道作为选民数据示例中的最高级别节点本身有助于地理搜索或过滤)。在示例性销售数据集中,将客户组织为最高级节点的数据集有利于基于客户相关的数据字段的搜索和过滤,而将产品组织为最高级节点的数据集有利于基于产品相关的数据字段的搜索或过滤。一旦选择并限定了层级结构,就可以使用任何合适的、期望的或必要的存储格式或编码方案(例如,字符串驻留、数据集群集),在一个或多个辅助数据结构中以任何合适的、期望的或必要的方式来分配数据字段。与内联树专利的数据集存储布置相比,根据本公开的数据集存储布置的优点在于,可以更容易地将新数据记录添加到数据集,或者可以将附加数据字段添加到数据集的现有记录。因为条带状的内联树的所有二进制字符串具有相同的长度,所以可以容易地确定插入新数据记录的位置。类似地,可以容易地确定辅助数组中的位置以插入新数据记录的字段值。只需添加另一辅助数据结构,即可将新数据字段添加到现有数据记录中。

在数据结构的最“条带状”的形式中,内联树数据结构的每个终端节点二进制字符串仅包括指示符字符串。然而,在一些示例中,每个终端节点二进制字符串可以与指示符字符串一起包括对相应数据记录的一个或多个数据字段值进行编码的数据字符串。为了保留条带状内联树所提供的速度优势,必须通过数据字符串为所有数据记录编码相同的数据字段,并且必须编码相应的字段值,以使生成的数据字符串(以及终端节点二进制字符串)的长度彼此相同。换言之,在条带状的内联树中编码的附加数据字段值不需要任何逐字符串确定每个字符串的长度或如对每个字符串的内容那样的决策。在条带状的内联树中编码的数据字段值对于几乎总是出现在数据集的搜索中的数据字段(例如,空间链接数据的空间坐标或时间序列数据的时间索引)是有利的。

在准备搜索或过滤时,条带状的内联树数据结构和被确定为与给定搜索查询相关的一个或多个辅助数据结构可以被加载到计算机处理器可直接访问的一个或多个计算机可读介质(例如,计算机或服务器ram或处理器高速缓存)中。可以构造和连接任何合适类型或配置的计算机系统以执行任何前述方法。包括有形介质的产品可以编码计算机可读指令,当应用于计算机系统时,该计算机可读指令指示计算机系统执行任何前述方法。包括一个或多个有形计算机可读介质的产品可以被编码为存储内联树数据结构和由任何前述方法生成的一个或多个辅助数据结构。包括有形计算机可读介质的产品可以被编码为存储由任何前述方法生成的列表或枚举的电子标记。

本文中所公开的系统和方法可以通过以下方式实现:通用或专用的计算机或服务器,或通过软件编程的其他可编程硬件设备,或者通过硬连线“编程”的硬件或设备或这两者的组合。“计算机”或“服务器”可以包括单个机器或者可以包括多个交互机器(位于一个位置或多个远程位置)。计算机程序或其他软件代码(如果使用的话)可以通过在临时或永久存储中或在可替换介质中例如通过包括在微代码、机器代码、一起运行的基于网络或基于web的或分布式的软件模块、ram、rom、cd-rom、cd-r、cd-r/w、dvd-rom、dvd±r、dvd±r/w、硬盘驱动器、拇指驱动器、闪存、光学介质、磁介质、半导体介质或任何其他一种或多种合适的当前存在的或未来开发的、有形的非暂时性存储介质中的编程来实现。实现内联树数据结构或一个或多个辅助数据结构的一个或多个二进制数据文件也可以存储在任何一个或多个合适的当前存在的或未来开发的、有形的非暂时性计算机可读存储介质上,包括上面列出的那些。

除前述示例之外,以下示例落入本公开或所附权利要求的范围内:

示例1:一种产品,包括被编码为存储数据集的电子标记的一个或多个有形的非暂时性计算机可读存储介质,所述电子标记包括内联树数据结构和一个或多个辅助数据结构,其中:(a)数据集包括多条数据记录,并且每条数据记录包括多个相应的定义数据字段的字段值字符串;(b)定义数据字段包括终端节点数据字段和第一级分支节点数据字段,并且第一级分支节点数据字段定义第一级分支节点数据字段的字段值字符串的子界中的分层树关系,该子界对应于数据集的数据记录的多个第一级分支节点子集;(c)每个第一级分支节点子集包括第一级分支节点数据字段的字段值字符串落在相应的子界内的数据记录;(d)内联树数据结构仅包括有序排列的终端节点二进制字符串,其中,(1)终端节点二进制字符串与数据集的数据记录之间存在一对一的对应关系;(2)终端节点二进制字符串彼此具有相同的长度;以及(3)每个终端节点二进制字符串包括指示符字符串,针对每个终端节点二进制字符串,该指示符字符串指示以下:(i)有序排列的终端节点二进制字符串和紧邻的终端节点二进制字符串对应于在同一第一级分支节点子集中的相应的数据记录;(ii)相应的数据记录在彼此不同的第一级分支节点子集中;或者(iii)终端节点二进制字符串是内联树数据结构的最后一个终端节点二进制字符串;(e)对于每个第一级分支节点子集,相应的终端节点二进制字符串在内联树数据结构内形成单个连续的字符串序列;以及(f)一个或多个辅助数据结构包括数据集的数据记录的字段值字符串的电子标记,所述字段值字符串以与内联树数据结构中的有序序列的所述终端节点二进制字符串相同的顺序被布置、被索引或可访问。

示例2:示例1的产品,其中,对于每个终端节点二进制字符串,指示符字符串指示以下:(i)有序序列的终端节点二进制字符串和紧接在后的终端节点二进制字符串对应于同一第一级分支节点子集中相应的数据记录;(ii)相应的数据记录在彼此不同的第一级分支节点子集中;或者(iii)终端节点二进制字符串是内联树数据结构的最后一个终端节点二进制字符串。

示例3:根据权利要求1所述的示例,其中,对于每个终端节点二进制字符串,指示符字符串指示以下:(i)有序序列的终端节点二进制字符串和紧接在前的终端节点二进制字符串对应于同一第一级分支节点子集中相应的数据记录;或(ii)相应的数据记录在彼此不同的第一级分支节点子集中,但不在不同的更高级别的分支节点子集中。

示例4:示例1至示例3中任一示例所述的产品,其中,内联树数据结构的每个终端节点二进制字符串仅包括相应的指示符字符串,并且不包括对相应的数据记录的字段值进行编码的任何数据字符串。

示例5:示例1至示例3中任一示例所述的产品,其中,内联树数据结构的每个终端节点二进制字符串仅包括对相应的数据记录的一个或多个字段值进行编码的数据字符串。

示例6:示例5的产品,其中,每个数据字符串包括通过字符串驻留编码的一个或多个数据字段值。

示例7:示例1至示例6中任一示例所述的产品,其中,辅助数据结构中的一个或多个包括通过字符串驻留编码的一个或多个数据字段值。

示例8:示例1至示例7中任一示例所述的产品,其中,辅助数据结构中的一个或多个包括由一组多个群集的数据字段值编码的一个或多个集群数据字段值。

示例9:示例1至示例8中任一示例所述的产品,其中,内联树数据结构被存储在计算机随机存取存储器或处理器高速缓存存储器中。

示例10:一种用于生成示例1至示例9中任一示例所述的产品的计算机实现的方法,该方法包括:(a)在计算机系统处接收或从一个或多个计算机可读存储介质读取数据集的第一电子标记;(b)使用计算机系统的被编程并可操作地耦接到一个或多个存储介质的一个或多个电子处理器,生成数据集的第二电子标记,该第二电子标记包括:(1)内联树数据结构;以及(2)一个或多个辅助数据结构;以及(c)将内联树数据结构和一个或多个辅助数据结构存储在可操作地耦接到计算机系统的一个或多个电子处理器的一个或多个有形的非暂时性计算机可读存储介质上。

示例11:一种计算机系统,被构造、连接并编程为执行示例10的方法。

示例12:一种产品,包括编码计算机可读指令的一个或多个有形的非暂时性计算机可读存储介质,当所述计算机可读指令应用于计算机系统时,该计算机可读指令指示计算机执行示例10的方法。

示例13:一种计算机实现的方法,用于询问在示例1至示例9中任一示例所述的产品上编码的内联树数据结构和一个或多个辅助数据结构,其中,该方法包括:(a)在计算机系统处接收对数据集的数据记录的搜索查询,对于数据集的定义数据字段中的一个或多个选定的查询数据字段中的每一个,该数据集包括落入相应的查询字段值子界的相应字段值;b)利用被编程的计算机处理器按顺序自动询问内联树数据结构的有序排列的终端节点二进制字符串,以识别相应的指示符字符串;(c)作为在部分(b)中询问的每个终端节点二进制字符串,在一个或多个辅助数据结构中利用被编程的计算机处理器自动询问仅在相应数据记录的选定的查询数据字段中的字段值字符串,以识别满足部分(a)的搜索查询的数据记录,其中,在部分(c)中针对每条数据记录询问的字段值字符串部分地由在部分(b)中所识别的相应的指示符字符串来确定;(d)对于不满足部分(a)的搜索查询的每个第一级分支节点字段值,省略部分(c)的对数据记录的相应的第一级分支节点子集的终端节点数据字段的询问;以及(e)使用被编程的计算机处理器自动生成在部分(c)中被识别为满足在部分(a)中所接收的搜索查询的数据记录的列表或枚举。

示例14:一种计算机系统,被构造、连接并编程为执行示例13的方法。

示例15:一种产品,包括编码计算机可读指令的一个或多个有形的非暂时性计算机可读存储介质,当所述计算机可读指令应用于计算机系统时,该计算机可读指令指示计算机执行示例13的方法。

示例16:示例1至示例9中任一示例所述的产品,其中:(b′)定义数据字段进一步包括一个或多个级别的更高级分支节点数据字段,并且第一级分支节点数据字段和更高级分支节点数据字段限定分支节点数据字段的字段值字符串的子界中的分层树关系,该子界对应于数据集的数据记录的多个第一级分支节点子集和一个或多个级别的更高级分支节点子集;(c′)对于所述更高级分支节点数据字段中的每一级,每个更高级分支节点子集包括数据记录,针对所述数据记录,该级的更高级分支节点数据字段的字段值字符串落入相应的子界内;(d′)对于每个终端节点二进制字符串,指示符字符串指示以下:(i)有序排列的终端节点二进制字符串和紧邻的终端节点二进制字符串对应于同一第一级分支节点子集中的相应的数据记录;(ii)相应的数据记录位于彼此不同的第一级分支节点子集中,但不在不同的更高级别的分支节点子集中;(iii)相应的数据记录位于彼此不同的第一级分支节点子集中,并且在一个或多个级的更高级分支节点子集中的最高级分支节点子集中,其中,相应的数据记录也在彼此不同的更高级别的分支节点子集中;或者(iv)终端节点二进制字符串是内联树数据结构的最后一个终端节点二进制字符串;以及(e′)对于每个更高级分支节点子集,相应的终端节点二进制字符串在内联树数据结构内形成单个连续的字符串序列。

示例17:示例16的产品,其中,对于每个终端节点二进制字符串,指示符字符串指示以下:(i)有序排列的终端节点二进制字符串和紧接在后的终端节点二进制字符串对应于同一第一级分支节点子集中的相应的数据记录;(ii)相应的数据记录位于彼此不同的第一级分支节点子集中,但不在不同的更高级分支节点子集中;(iii)相应的数据记录位于彼此不同的第一级分支节点子集中,并且在一个或多个级的更高级分支节点子集中的最高级分支节点子集中,其中,相应的数据记录也在彼此不同的更高级分支节点子集中;或者(iv)终端节点二进制字符串是内联树数据结构的最后一个终端节点二进制字符串。

示例18:示例16的产品,其中,对于每个终端节点二进制字符串,指示符字符串指示以下:(i)有序排列的终端节点二进制字符串和紧接在前的终端节点二进制字符串对应于同一第一级分支节点子集中相应的数据记录;(ii)相应的数据记录位于彼此不同的第一级分支节点子集中,但是不在不同的更高级分支节点子集中;或者(iii)相应的数据记录位于彼此不同的第一级分支节点子集中,并且在所述一个或多个级的更高级分支节点子集中的最高级分支节点子集中,其中,相应的数据记录也在彼此不同的更高级分支节点子集中。

示例19:一种计算机实现的方法,用于生成示例16至示例18中任一示例所述的产品,该方法包括:(a)在计算机系统处接收或从一个或多个计算机可读存储介质读取数据集的第一电子标记;(b)使用被编程并可操作地耦接到一个或多个存储介质的计算机系统的一个或多个电子处理器,生成数据集的第二电子标记,该第二电子标记包括:(1)内联树数据结构;以及(2)一个或多个辅助数据结构;以及(c)将内联树数据结构和一个或多个辅助数据结构存储在可操作地耦接到计算机系统的一个或多个电子处理器的一个或多个有形的非暂时性计算机可读存储介质上。

示例20:一种计算机系统,被构造、连接并编程为执行示例19的方法。

示例21:一种产品,包括编码计算机可读指令的一个或多个有形的非暂时性计算机可读存储介质,当所述计算机可读指令应用于计算机系统时,该计算机可读指令指示计算机执行示例19的方法。

示例22:一种计算机实现的方法,用于询问在示例16至示例18中任一示例所述的产品上编码的内联树数据结构和一个或多个辅助数据结构,其中,该方法包括:(a)在计算机系统处接收对数据集的数据记录的搜索查询,对于数据集的定义数据字段中的一个或多个选定的查询数据字段中的每一个,所述数据记录包括落入相应的查询字段值子界内的相应的字段值;(b)利用被编程的计算机处理器按顺序自动询问内联树数据结构的有序排列的终端节点二进制字符串,以识别相应的指示符字符串;(c)作为在部分(b)中询问的每个终端节点二进制字符串,在一个或多个辅助数据结构中利用被编程的计算机处理器自动询问仅在相应的数据记录的选定的查询数据字段中的字段值字符串,以识别满足部分(a)的搜索查询的数据记录,其中,在部分(c)中针对每条数据记录询问的字段值字符串部分地由在部分(b)中所识别的相应的指示符字符串来确定;(d)对于不满足部分(a)的搜索查询的每个第一级分支节点字段值,省略部分(c)的对数据记录的相应的第一级分支节点子集的终端节点数据字段的询问;(e)对于不满足部分(a)的搜索查询的每个更高级分支节点字段值,省略部分(c)的对数据记录的相应的更高级分支节点子集的终端节点数据字段的询问;以及(f)使用被编程的计算机处理器自动生成在部分(c)中被标识为满足在部分(a)中所接收的搜索查询的数据记录的列表或枚举。

示例23:一种计算机系统,被构造、连接并编程为执行示例22的方法。

示例24:一种产品,包括编码计算机可读指令的一个或多个有形的非暂时性计算机可读存储介质,当所述计算机可读指令应用于计算机系统时,该计算机可读指令指示计算机执行示例22的方法。

示例25:一种产品,包括一个或多个有形的非暂时性计算机可读存储介质,该一个或多个有形的非暂时性计算机可读存储介质被编码为存储由示例13或示例22中任一示例所述的方法所产生的列表或枚举的电子标记。

所公开的示例性实施例和方法的等价物旨在落入本公开或附属权利要求书的范围内。可在不超出本公开或所附权利要求书的范围的情况下对所公开的示例性实施例和方法以及这些示例性实施例和方法的等价物进行修改。

在前述的具体实施方式中,出于简化本公开的目的,不同的特征可以在数个示例性实施例中被组合在一起。本公开的方法不应该被理解为反映任何所要求保护的实施例需要有比相应的权利要求中明确叙述的特征更多的特征的意图。相反地,如所附权利要求书所反映的,发明的主题的特征可以少于单个所公开的示例性实施例的所有特征。因此,这里将所附的权利要求合并到具体实施方式中,每个权利要求作为一个单独公开的实施例。然而,本公开还应该被理解为隐含地公开了下述任何实施例,该实施例具有一个或多个出现在本公开或附属权利要求中的被公开或要求保护的特征的任何适当的组合(即,一组既不兼容也不排斥的特征),该组合包括那些可能在本文中没有明确公开的组合。此外,为了公开起见,所附的每一项从属权利要求应解释为似乎是以多种从属形式写成的,并且依赖于与之没有抵触的所有先前的权利要求。应该进一步指出,所附权利要求书的范围不一定包括本文所公开的整个主题。

为了本公开和所附权利要求的目的,连接词“或”被解释为包含性地(例如,“一只狗或一只猫”应该被解释为“一只狗,或一只猫,或者两者”;例如,“一只狗,一只猫,或一只老鼠”应该被解释为“一只狗,或一只猫,或一只老鼠,或任何两只,或所有三只”),除非:(i)另有声明,例如,使用“要么…要么…”、“只有其中之一…”或相似语言;或(ii)列出的两个或两个以上的备选方案在特定情境中相互排斥,在这种情况下“或”应该仅包括那些涉及不互相排斥的备选方案的组合。为了本公开和所附权利要求的目的,单词“包括(comprising)”、“包括(including)”、“具有(having)”及其变型无论它们出现在哪里,都应该被解释为开放式的术语,如同在每个示例之后附加短语“至少”时所具有的含义,除非另有声明。为了本公开和所附权利要求的目的,当使用与数量有关的诸如“约等于”、“基本等于”、“约大于”、“约小于”之类的术语时,除非明确阐述了不同的解释,否则,与测量精度和有效数字有关的标准惯例应适用。对于由诸如“基本上防止”、“基本上不存在”、“基本上消除”、“约等于零”、“可忽视的”等等的短语描述的空数量,每个这种短语应该表示以下情况,其中,所讨论中的量被减少或减弱到下述程度,就所公开或要求保护的装置或方法的预定操作或使用而言,该装置或方法的总体行为或性能与事实上完全消除、确切地等于零或以其他方式完全设置为零所会发生的行为或性能并无不同。

在所附权利要求书中,元件、步骤、限定或权利要求的其他部分的任何标记(例如,第一、第二、第三等等,(a)、(b)、(c)等等,或(i)、(ii)、(iii)等等)仅时为了清楚目的,并且不应被解释为暗示如此标记的权利要求部分的任何种类的分类或优先级。如果意图进行任何这种排序或优先级,则将在权利要求中明确地进行叙述,或者在一些实例中,排序或优先级基于权利要求的具体内容将是暗含的或固有的。在所附权利要求中,如果希望在装置权利要求中调用35usc§112(f)的规定,则词语“装置”将出现在所述装置权利要求中。如果期望在方法权利要求中引用这些法条,则词语“用于…的步骤”将出现在该方法权利要求中。相反地,如果词语“装置”或“用于…的步骤”没有出现在权利要求中,则35usc§112(f)的法条不适用于所述权利要求。

如果任何一个或多个公开通过引用并入本文中,并且如此并入的公开与本公开部分或全部冲突,或者与本公开的范围不同,使本公开更宽泛或使术语的限定更宽泛的程度时,则以本公开为准。当如此并入的公开彼此之间部分或者全部冲突到矛盾的程度时,则按照最新的公开。

提供摘要是为了辅助在专利文献中搜索特定主题的那些人。然而,摘要不旨在暗示其中所列举的任何元件、特征或限定都必然包含在任何特定的权利要求中。每个权利要求所包含的主题的范围应该仅由该权利要求的详述来确定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1