CN107045535B - 数据库表索引 - Google Patents
数据库表索引 Download PDFInfo
- Publication number
- CN107045535B CN107045535B CN201710056864.9A CN201710056864A CN107045535B CN 107045535 B CN107045535 B CN 107045535B CN 201710056864 A CN201710056864 A CN 201710056864A CN 107045535 B CN107045535 B CN 107045535B
- Authority
- CN
- China
- Prior art keywords
- column
- database table
- value
- rows
- bitmap
- 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.)
- Active
Links
Images
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/23—Updating
-
- 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2237—Vectors, bitmaps or matrices
-
- 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2272—Management thereof
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及数据库表索引。提供用于数据库表的索引。索引包括用于数据库表的每一列的索引结构。每个索引结构包括针对出现在列中的每个值的指针元组阵列和指示没有值的单元格的位图。元组的第一个指针指示值并且第二个指针指示数据库表中具有该值的行。索引还指示数据库表的行的明确性次序。计算机系统通过使用索引结构的位图来处理请求,以维护数据库表中没有值的所有行和指针元组,以过滤数据库表中不包括相应输入值的所有行。剩余行中明确性次序最高的一行被选择并返回。
Description
技术领域
本发明一般而言涉及数据库技术。更具体而言,本发明针对用于响应于请求而访问数据库表的索引以及确定符合请求的数据库表的最明确的数据记录(行)。
背景技术
给数据库表加索引以便以直接或加速的方式访问数据记录是已知的。索引是一种元数据结构,它提高了对数据库表的数据检索操作的速度,但是以维护索引数据结构的存储空间为代价。索引被用来快速定位数据,而不必在每次数据库表被访问时搜索数据库表中的每一行。索引可以利用数据库表的一个或多个列来创建,从而为快速随机查找和有序记录的高效访问都提供基础。
各种数据库相关的应用中的特定任务是仅检索数据库表中作为满足检索请求的最明确行的行。因此,响应于请求,数据库应用以最明确的方式确定数据库表中对应于输入参数或标准的一行。为此,一般在数据库表中给出行之间明确性的层次结构。
用于确定数据库表中最明确的一行的已知做法使用Rete算法。 Rete算法是用于例如实现生产规则系统(例如,自动规划、专家系统和行动选择系统)的模式匹配算法。它的使用是为了确定与输入标准匹配的所有规则。之后,执行所谓的“冲突解决”,其使用所确定的规则中的次序来识别要返回的一个规则。
发明内容
本发明的目标是提供特别促进确定满足检索请求的输入参数的一个最明确的数据库表行的数据库表索引。另一个目标是提供具有特别紧凑的数据表示的数据库表索引,从而最小化存储器需求。另一个目标是提供明确地解决现有技术水平的计算机系统的内部体系架构和存储器维度并且被优化以在处理器高速缓存中维护的数据库表索引,从而促进最明确的数据库表行的高性能确定。还有一个目标是提供使得能够进行确定性响应处理的数据库表索引。
根据一方面,通过确定数据库表中最明确的一行的方法来解决这些目标。数据库表由计算机系统维护。数据库表由多行和多列形成。数据库表的行和列形成单元格。每个单元格包括至少一个值或者不包括值。计算机系统还维护用于数据库表的索引。
索引包括用于数据库表的每一列的相应索引结构。每个索引结构包括两种类型的子结构,即,用于在相应列中出现的每个值的相应指针元组阵列和与该列的没有值的单元格相关的位图。每个指针元组包括指示在列中出现的值之一的第一指针和指示该值在其中出现的数据库表的行的第二指针。位图指示相应列中没有值的所有单元格。索引还指示数据库表的行的明确性次序。
确定最明确的一行的方法包括以下活动:
计算机系统接收指示与相应输入值相关联的数据库表的列的请求。然后,计算机系统以递增方式针对请求中指示的每个列处理请求。对于每一列,计算机系统使用用于该列的索引结构的位图来维护数据库表中在所考虑列的单元格中不包含值的所有行。此外,对于每一列,计算机系统使用用于该列的索引结构的指针元组来过滤数据库表中不包括相应输入值的所有行。在已经处理了具有请求的相应输入值的所有列之后,计算机系统从剩余的行(即,在列的递增处理期间没有被过滤的行)中选择明确性次序中最高的一行。最后,计算机系统返回所确定的行的至少一个单元格的值。
根据另一方面,提供了一种布置成执行确定数据库表中最明确的一行的相应方法的计算机系统。
根据还有的另一方面,提供了一种用于指示计算机系统执行确定数据库表中最明确的一行的方法的计算机程序。
其它方面由从属权利要求阐述。
附图说明
本发明将参考附图进行描述。类似的标号一般指示完全相同或功能相似的元件。
图1示出了具有数据库表的数据库。
图2是数据库表和请求的通用例子。
图3示出了如本文所述的索引的结构。
图4示出了用于图2的数据库表的索引的通用例子。
图5给出了利用索引的请求处理的通用例子。
图6是示例性请求处理的流程图。
图7示出了存储器中的指针元组的阵列的示例性布置。
图8示出了指针元组的阵列上的二分搜索。
图9示出了示例性索引生成。
图10是包括索引生成和最明确行确定的整个过程的高级流程图。
图11示意性地示出了计算机系统的存储器中数据库表和索引的维护。
图12示出了作为数据库表的例子的路由表。
图13是实现数据库的计算机系统和/或请求客户端的内部体系架构的示例性示意图。
具体实施方式
本文描述的索引促进访问由数据库系统维护的数据库表。本文使用的术语“数据库”涵盖以表的形式保存静态或动态数据的所有种类的数据存储库。这些种类的数据存储库包括例如关系数据库系统(诸如Oracle数据库、Microsoft SQL Server、MicrosoftAccess),诸如PostgreSQL的对象关系数据库系统,诸如专家系统和动作选择系统引擎的生产规则系统(例如,维护用于技术设备的修复和维护动作的专家系统),网络和控制元件,诸如路由器(具有路由表),网络管理节点(具有在表中维护的日志和/或控制数据)或SCADA系统 (也以表的形式维护日志和/或控制数据),以及在诸如Microsoft Excel电子表格或制表符文本文件(例如,csv文件)等简单表中保存数据的专有系统。
一般而言,数据库在诸如数据库服务器或网络节点的计算机系统上实现。数据库被布置成接收指定搜索标准(下文中称为“输入值”) 的检索请求(下文中简称为“请求”),以通过对照至少一个数据库表检查输入值来处理请求、确定数据库表中满足输入值的数据记录并且返回这个数据记录的一个或多个值。为此,数据库使用任何类型的数据库语言并且配备有本领域中已知的任何类型的通信接口。请求的发起者是例如查询数据库1的局域网(LAN)中或远程网络中的客户端(计算机、移动站、应用等)。
如图1所示,数据库1维护至少一个数据库表2。数据库表2由多个行3和多个列4构成。数据库表的每个行3包括数据记录,数据库表的每个列4构成数据记录的属性,一般是根据数据模型(诸如关系数据库管理模型)。行3和列4的组合形成单元格5。一般而言,数据库表2中可以存在任何数量的行3和列4。由于可以添加或删除数据记录,因此尤其是行3的数量是不固定,而且可能随时间变化。数据库2还可以包括重新定义或更改数据模型的机制,即,列的数量也可以改变。
数据库表的单元格5或者包含至少一个值或者不包含值(图2)。单元格中的值一般是根据如数据模型规定的为相应列定义的数据类型。数据类型包括例如布尔(即,值为“真”和“假”)、整数、浮点数、字符、字符串、指针以及复杂的功能数据类型,诸如日期。在单元格5中可以存在多于一个值,即,单元格5可以包括值的向量或列表,例如,根据数据类型,以值的数组、记录、集合、枚举或的对象的形式。
没有值的单元格5可以包括通配符,诸如NULL或*。这些通配符指定值不存在,即,相应的单元格被认为包括对于如数据模型规定的对应列的数据类型所允许的值范围的任何值。利用通配符的数据记录的例子是IP路由表中的标准路由,其在目的地地址列中利用网络地址“0.0.0.0”并在子网掩码列中利用子网掩码“0.0.0.0”作为用于任何可能的目的地IP地址的通配符(参见图12的路由表例子)。
图2示出了具有六个行3(即,六个数据记录)和七个列4(即,数据记录具有七个属性)的数据库表2的通用例子。这个示例性数据库表的列定义了由行保持的数据记录的任何类型的属性。第一列4A 定义数据记录的键属性。第一行3A定义例如在列4B至4F中具有通配符“*”的默认数据记录,并且最后一列4G中的“是”是布尔数据类型。因此,第一行3A指定“是”作为默认响应。其它行定义更明确的数据记录。例如,第二行3B指定值“A,B”的元组作为第二列4B中的属性,并且“否”作为数据记录的最后一个属性,而所有其它单元格包含通配符(忽略键列4A),即,用于这些属性的任何值都落在行3B的数据记录内。例如,数据模型可以定义值F、G、H、 I、J和K作为第三列4C的允许数据范围。因此,第二数据记录的第三单元格(行3B,列4C)中的通配符代表第二数据记录的这个属性的所有可能的值F、G、H、I、J和K.
数据库表2一般存储在计算机系统的存储器中,例如存储在主存储器(RAM)中。
如开头所阐述的,本文描述的数据库表索引尤其被布置成允许确定对应于请求的最明确行。一般而言,比其它行包含更多通配符(即,更多单元格没有值,更少单元格有值)的行被认为比包括更少通配符 (即,更少单元格没有值,更多单元格有值)的行更不明确。换句话说,包括更一般数据记录的行被定义为比具有更明确内容的行更不明确,后者被定义为更明确。为了促进确定与请求的输入值匹配的最明确行,给出或建立数据库表2的行之间的明确性次序。可选地,明确性次序在行的排序中是隐含的。例如,如在图2所示的数据库表的例子中,在表内从不明确到非常明确对行进行排序。在一些实施例中,明确定义明确性次序,例如,通过指示行的明确性的相应级别的明确性列,诸如图2中的数据库表2的键列4A中的键值。可选地,明确性次序严格单调,即,数据库表的每一行具有唯一的明确性次序。在其它例子中,定义明确性类,并且多行可以共享共同的明确性级别。在后面的例子中,给出一种机制,以确保作为具有相同明确性级别的成员的多行中仅一行满足请求中的输入值,例如,行定义互斥的数据记录,并且在请求中指示用于数据库表的最小行数的值。
响应于接收指示至少列和相应输入值的请求,数据库1利用包括在请求中的输入值来处理请求,并将该输入值与数据库表2进行比较,以便确定满足输入值的最明确行。返回去参考图2,接收通用示例性请求9。在图2的例子中,明确性次序由列4A根据键值对行的排序来明确定义,行3A是最不明确的行(因为它包含五个通配符,并且仅在列4G中有一个值),而行3F是最明确的值(因为它不包含任何通配符,所有单元格都具有值)。在图2的例子中,请求9指示五个列4B、4C、4D、4E和4F以及相应的输入值。数据库1确定最后一行3F是对应于请求9的最明确行,因为单元格4B/3F中的值“A”与用于列4B的输入值A匹配,单元格4C/3F中的值“F”与用于列 4C的输入值F匹配,单元格4D/3F中的值“P,R”与用于列4D的输入值P匹配,单元4E/3F中的值“W”与用于列4E的输入值W 匹配,并且单元4F/3F中的值“Z”与用于列4F的输入值Z匹配。也与请求9的输入值6相对应的另外两行3A和3B不如行3F明确,因为它们在数据库表2的隐式定义的明确性次序中排名较低。
在确定最明确行3之后,返回最明确行的至少一个值(属性)。在图2的例子中,返回行3F的列4G的值,即,布尔值“否”。
与请求相对应的最明确行的确定利用本文描述的索引10(图3)。用于数据库表2的索引包括以下组成部分:
-对于数据库表的每一列4都有一个索引结构11,对于该索引结构,请求中的输入值是预期的。因此,索引结构11在下文中也被称为特定于列的索引结构。每个特定于列的索引结构11具有两个元素,即
o指针元组12的阵列,及
o位图13(如技术人员通常理解的,位图是连续位的集合,即,位阵列)。
-指针元组12的阵列具有参考由相应特定于列的索引结构11 所参考的列的列的单元格中的所有值的功能。阵列12中的每个指针元组14包括第一指针15和第二指针16。
o第一指针15参考(reference)包括在列中的值之一。该值存储在托管数据库1的计算机系统的存储器中的某个特定位置。第一指针参考这个存储器位置。
o第二指针16指示数据库表2中出现该值的行。例如,该行由键值识别,键值也存储在托管数据库1的计算机系统的存储器中的特定存储器位置。第二指针参考这个存储器位置。
因此,包括在阵列12中的指针元组14的数量对应于由相应特定于列的索引结构11参考的列中出现的值的数量。
-位图13指定由相应特定于列的索引结构11参考的列中那些不具有值(即,包括通配符)的单元格。因此,位图13 也被称为“无值位图”。无值位图13中的位数对应于数据库表2的行3的数量。
图4示出了索引10的例子。图4所示的示例性索引涉及图2的通用数据库表例子。图4所示的索引10由对应于图2的数据库表2 的列4B至4F的五个索引结构11组成,对这些列预期输入值6(在图2的例子中具有布尔数据类型的列4G不能被请求–这个列的值是返回值)。每个索引结构11包含指针元组的阵列12和无值位图 13。
每一个特定于列的索引结构11中的指针元组的阵列12构成包括在数据库表2的相应列中的所有值的紧凑列表。例如,索引结构11B 中的阵列12B列出出现在列4B中的所有值A、B和C的存在。值A 出现在具有键值R2、R4和R6的行中,值B出现在具有键值R2和 R5的行中,值C出现在具有键值R3和R4的行中(参见图2)。如上面所提到的,指针元组中的第一指针参考计算机存储器中的值A、 B和C的相应存储器地址,而指针元组中的第二指针指示对应的行,即,在这个例子中参考行键值。对于索引结构11C至11F中的其它阵列12C至12F也是如此。
可选地,阵列12中的指针元组14通过由第一指针参考的值排序。在图4中,例如,阵列12B中的指针元组通过出现在列4B中的值A、 B和C排序。因此,阵列12B中的前三个指针元组定义值A在列4B 中的出现,接下来的两个指针元组定义值B在列4B中的出现,并且两个最后指针元组定义值C在列4B中的出现。当利用索引10例如对指针元组执行线性搜索时,对阵列12内的指针元组14进行排序促进了高效的存储器访问,因为当处理定义值的出现的第一指针元组时,相应的值仅需要从存储器加载一次,然后在例如处理器高速缓存中可用于仍然与相同的值相关的后续指针元组。对指针元组14进行排序还促进对在一些实施例中使用的指针元组的二分搜索(下面参考图8 进一步解释)。
位图13提供了数据库表2中没有值的单元格的出现的紧凑表示。每个位图13包括六个位,与图2的例子中的数据库表2中的行3的数量一致。通过定义,相应位图中的位的序列对应于具有键值R1至 R6的行的序列,即,每个位图13中的第一位指的是具有键值R1的行,每个位图中的第二位指的是具有键值R2的行,依此类推,并且每个位图13中的最后一位指的是具有键值R6的最后一行。在图4 的例子中,被设置为“1”的位表示相应列中没有值(即,具有通配符)的所有行,而被设置为“0”的位表示相应列中具有值(即,没有通配符)的行。例如,位图13B指示列4B中仅第一行(键值R1) 不包括值,而其它行(键值R2至R6)包括值。这以类似的方式适用于对于列4C至4F中的无值单元格的其它位图13C至13F。
如上所述的索引10表示特别紧凑的元数据结构(当与当前已知的现有技术索引相比时)。没有值的单元格的位置不被存储为指针元组14,而是以减少指针元组14的数量的位图13的形式存储。一个指针元组14的尺寸总是2的幂。例如,在现代64位存储器体系架构中指针具有8字节的尺寸,相当于一个指针元组14是16字节的尺寸。由于对于2的幂大小的数字的整数乘法比对于不是2的幂大小的数字更加高效,因此索引10中的随机访问是高效的。对于某些类别的数据库表(例如,具有1000个条目或更少条目的表),索引10将适合放在L1和/或L2CPU高速缓存中,并且因此可以使其在非常快速访问的存储器中永久可用,并且因此有总体改进的请求处理和行确定的性能。此外,索引10促进用于确定最明确行的二分搜索算法,如下面(参考图8)将进一步描述的。
索引10还指示数据库表2的行3的明确性次序。为这种指示设想了各种方式。例如,如上面参考图2所提到的,数据库表2本身已经根据其明确性次序进行了排序,例如,从最低到最高明确性(也参见图9中的活动38和图10中的活动17)。在此类实施例中,数据库表行的明确性次序隐含地存在于无值位图13内的索引10中。如上面所解释的,无值位图13包括用于数据库表2的每一行3的位并且位图13中的位的次序对应于数据库表2的行3的次序。因此,位图 13中相应的第一位指的是第一行(例如,图2中的行3A),该行是例如最不明确的行,并且无值位图13中相应的最后一位指的是最后一行(例如,图2中的行3F),该行是例如数据库表2的最明确行。在其它实施例中,数据库表2的行不是通过明确性排序,而是索引10包括定义行3的明确性次序的单独数据结构。例如,当生成索引 10(参见图9中的活动44)时,权重值7(参见图3)与行3相关联,并且作为定义索引7内行3的明确性次序的元数据被明显地维持。
响应于接收到请求9,托管数据库1的计算机系统利用索引10 如下确定最明确行。一般而言,对于在请求9中指示的每一列(以及相应的输入值6),执行按列处理请求的递增过程。
从请求9中指示的第一列4(图2的例子中具有输入值“A”的列4B)开始,计算机系统使用用于第一列的索引结构11的位图13 (在图2的例子中具有位图13B的索引结构11B),以确保数据库表2中不包含值的所有行3不被丢弃,因为这些行包括涵盖任何输入值的通配符。因此,在图2和4的例子中,行R1(在位图13B中由“1”指示)被明确地维持。就此,不关于位图13B中标记有“0”的其它行做出维持或丢弃的决定。
接下来,除了根据无值位图利用来维持行之外,用于第一列的索引结构11(在图2的例子中具有指针元组12B的阵列的索引结构 11B)的指针元组14被用来维护包括相应输入值(图2的例子中的输入值“A”)的所有行3并且过滤掉数据库表1中不包括输入值6 的所有行3。在图2和4的例子中,维持在列4B中包括值“A”的所有行(即,行R2、R4和R6),而丢弃不包含输入值“A”的其余行(行R3和R5)。
在一些实施例中,贯穿这个递增过程簿记(Book-keeping)维持和丢弃决定是基于指示仍然维持的行和已经丢弃的行的附加临时位图 (被称为结果位图,在下面进一步详细描述)的。
对于在请求9中指示的每个列4,重复这个过程。在每次迭代时,丢弃数据库表2的零个、一个或多个行3。在请求9中指示的所有列 4都已经被处理之后,符合请求中指示的输入值的一个或多个行3保留。然后计算机系统通过利用索引10从剩余行中选择明确性次序最高的一行3。在图2和4的例子中,行3A、3B和3F(即,具有键值 R1、R2和R6的行)满足图2中所示的示例性请求9的输入值6。最明确行是行3F(键值R6)。在图2和4的例子中,明确性次序通过也在索引10中(在位图13中,以及在下面描述的结果位图中)反映的行的排序来给出。因此,在图2和4的例子中,计算机系统挑选具有最高键值的剩余行(其在位图13中和下面描述的结果位图中位于最右侧)。
接下来,参考图5描述递增请求处理和行确定过程的实现例。这个例子再次重新使用图2的示例性数据库表2和如图4中所示的对应索引10,后者在图5的左手侧绘出。一般而言,请求处理例基于两个附加位图来利用指针元组14和无值位图,即,列位图23和结果位图25。列位图23和结果位图25都包括对应于数据库表2中的行数的位数。列位图23的目的是在通过列4和请求9中指示的对应输入值6的每次迭代期间指示数据库表2中包括相应输入值的那些行3。结果位图25的目的是贯穿整个递增请求处理指示数据库表中仍然是有可能满足包括在请求9中的所有输入值6的候选行的剩余行3并且,同时,指示数据库表2中已经被过滤掉的所有行3,因为它们不与一个或多个输入值6相对应。
请求处理开始于初始化结果位图25,例如,将结果位图25的所有位设置成“1”,而每个“1”指示与结果位图25中的相应位相关联的行3尚未被过滤掉,即,仍然是有可能满足包括在请求9中的所有输入值6的候选行。因此,在请求处理开始时,数据库表2的所有行3都是有效候选。
接下来,通过关于第一列和相应输入值6(在图2和4的例子中:具有输入值6B=“A”的列4B)的第一次迭代,这由利用相应索引结构(在这里:索引结构11B)的两个活动形成。第一活动涉及确定数据库表2的哪些行3满足当前输入值6B。第二活动涉及贯穿所有迭代被维持的剩余候选行的簿记。
关于第一活动,列位图23B利用在当前迭代期间考虑的列4的无值位图13(在这里:列4B,无值位图13B)的位值来初始化。因此,在该例中,列位图23B被设置成1-0-0-0-0-0并且因此指示行3A (键值R1)被明确地维持(因为它在列4B中包括通配符)。接下来,对于包括输入值“A”的所有行,搜遍指针元组12B的阵列。在一些实施例中,这个搜索是二分搜索(以下参考图8进一步解释)。关于其它实施例,这个搜索是线性搜索。在该例中,在指针元组12B的阵列中的搜索产生具有键值R2、R4和R6的行在当前考虑的列4B 中包括“A”。因此,对应于已经被确定为包括输入值6B的行的列位图23B中的位也被设置成“1”,因为它们满足第一输入值6B并且因此被维持。因此,在该例中,列位图23B的第二、第四和第六位被设置成“1”,现在列位图23B被设置成1-1-0-1-0-1,意味着第一、第二、第四和第六行(键值R1、R2、R4和R6)仍然是候选行,而第三和第五行(键值R3和R5)被过滤掉。就此,列位图23B对于当前迭代指示满足包括在请求9中的第一输入值6B的所有行。
关于第二活动,所建立的列位图23B与结果位图25的当前版本组合,以便将当前迭代的行确定结果包括到候选行的整体簿记中。在该例中,所有剩余候选行都由设置成“1”的位指示,而所有过滤掉的行由设置成“0”的位指示。因此,在列位图23B与结果位图25 的当前版本之间执行逻辑按位AND操作,从而导致结果位图的更新版本25B。因此,在该例中,结果位图的更新版本25B被设置成1-1- 0-1-0-1。
这结束了关于请求9中指示的第一列和对应的输入值6的第一次迭代。以相同的方式执行后续的迭代。再次,在每次后续迭代期间,列位图23利用相应无值位图的位值(在该例中,无值位图13C至 13F,列位图的初始化版本23C至23F)被重新初始化。然后,搜索指针元组的相应阵列(在该例中,阵列12C至12F)包括在请求9 中的相应输入值(在该例中,输入值6C至6F)的出现。在列位图 23中将与包括相应输入值6的行相对应的相应位设置成“1”。列位图的相应结果版本23C-23F通过按位AND运算与结果位图的相应当前版本25C-25F组合。
在该例中,结果位图25F的最终版本指示第一行、第二行和第六行满足包括在请求9中的所有输入值6。请求处理的最后活动涉及在迭代结束之后选择剩余行中的最明确行。为此,利用索引10中明确性次序的指示。在该例中,明确性次序是通过数据库表2的行3的排序给出的,这在无值位图13中、列位图23中和结果位图25中的位(对应于行)的序列中反映。因此,在该例中,剩余候选行中最明确行由结果位图的最终版本25F中最右边的“1”(标号27)给出。
虽然这个请求处理涉及具有复杂度O(n)的多个操作,但是它具有若干有利的技术特性。仅需要有限量的存储器空间来执行操作。两个附加位图(列位图23和结果位图25)包括与数据库表2的行数相对应的多个位。因此,对于具有1024行的数据库表,列位图23和结果位图25各自具有128字节的尺寸。此外,请求处理是确定性的,因为数据库列迭代的次数分别由数据库表的列和请求中指示的列的数量来预定。因此,对于具有一定数量的行的数据库表,每个请求处理的响应时间是确定性的。
此外,减少了用于从指针元组12的阵列搜索输入值6的存在的查找操作和值比较操作(将输入值与由相应的第一指针15参考的值进行比较)的次数,这有利于位图操作(诸如逻辑按位AND运算)。虽然位图操作涉及O(n)次操作,但是n相对较小(对应于行3的数量),并且位图操作一般充分利用现代计算机硬件的能力。例如,64 位体系架构的各个汇编指令一次处理64位。此外,本请求处理具体地适用于配备有OOO(无序)计算单元的CPU,其具有在单个核心上每个时钟周期执行若干计算的能力,只要那些计算之间没有依赖性。后一条件适用于位图操作,因为在列位图23和结果位图25之间的整个AND操作内每位的每个单独AND操作彼此独立。
为了位图操作的增加部分而减少搜索和查找操作的部分也具体地针对CPU的向量扩展布置,尤其是CPU配备了SSE2(流SIMD扩展,SIMD=单指令多数据)指令集以便提供在一条汇编指令中处理 128位的能力,配备了AVX2(高级向量扩展)指令集以便在一条汇编指令中处理256位,或者AVX-512(例如,Intel的“Knights Landing”一代)以便在一条汇编指令中启用512位处理。例如,对于后一指令集,对于具有1000行的数据库表2,在列位图23和结果位图25之间的按位AND操作可以在两个CPU周期内执行。
这个请求处理的操作通过图6的流程图可视化。首先,在20,托管数据库1的计算机系统接收请求9。响应于请求接收,在22初始化结果位图25。然后,执行递增过程24。在针对每一列和在请求 9中指示的相应输入值6的逐列迭代中,基于相应的无值位图13,在 24A初始化列位图23。然后,在24B,搜索指针元组的阵列12,以寻找包括相应输入值6的当前列4的所有行3,并且相应地更新列位图23。然后,在24C,列位图23和结果位图25的当前版本被组合,例如,通过逻辑按位AND运算,以便获得更新的结果位图。在以这种递增方式处理了请求9中指示的所有列4和相应输入值6之后,在 26选择在结果位图25的最终版本中指示的剩余行中的最明确行。最后,在35,返回所确定的最明确行的至少一个值。还有可能结果位图在请求处理的最后一次迭代之后仅包含“0”位。在这种情况下,数据库表的所有行都不满足请求,因此返回值是“不匹配”值。
在一些实施例中,无值位图13中的位指派是相反的(与图4的例子相比),即,设置成“0”的位表示相应列中没有值(即,具有通配符)的所有行,而设置成“1”的位表示相应列中具有值(即,没有通配符)的行。在这些实施例中,列位图23和结果位图25中的位指派也被反转,即,列位图23中设置成“0”的所有位指示所考虑的列包括相应输入值6的行3,并且结果位图25中的每个“0”指示与相应位相关联的行3尚未被过滤掉,即,仍然是有可能满足包括在请求9中的所有输入值6的候选行。因此,在这些实施例中,列位图 23和结果位图25通过按位逻辑OR运算组合。
在一些实施例中,递增请求处理(图6中的活动24)以及,特别地,搜索指针元组的阵列12以寻找输入值的存在(图6中的活动 24B)包括在指针元组14内的二分搜索被连续地存储在托管数据库1 (图7和8)的计算机系统的存储器中。图7示出了指针元组14的通用例子,其在托管数据库1的计算机系统的存储器28中的某个位置处连续存储。如由图7的示意性表示可视化的,每个单指针元组 14被连续地布置在存储器28中指针元组12的阵列内,其间没有间隙。指针元组14在存储器28中的这种布置促进对第n个指针元组 (即,关于阵列12的任何任意指针元组)的直接访问,并因此促进对请求9的每次按列迭代的二分搜索。
图8示出了用于图6的活动24B的通用二分搜索例。如上面参考图4所提到的,阵列12内的指针元组14通过由第一指针15参考的值排序(对于列4的相应数据类型排序,例如,对于字符和字符串的字母次序),从而使得能够对指针元组14执行二分搜索。根据分治原则,二分搜索算法进入阵列12的中间并且检查由位于阵列12中间的指针元组14D的第一指针15D参考的值是否对应于输入值6。因此,在图8的例子中,输入值“A”与由第一指针15D参考的值“D”进行比较。如果输入值6低于由所考虑的第一指针15参考的值,则在上半部分(图8中的阵列12的左半部分,即,具有第一指针15B)中重复相同的过程。如果输入值6大于由所考虑的第一指针 15参考的值,则在阵列12的下半部分中(图8中的阵列12的右半部分,即,具有第一指针15F)重复相同的过程。
如由图4和5的例子所示,有可能多个第一指针15参考相同的值。在图7和8的例子中,第一指针15A和15B都参考值“A”。因此,如果输入值6与由当前在二分搜索的特定阶段所考虑的第一指针15参考的值之间的比较示出两个值相等,则二分搜索在该点处尚未终止。相反,二分搜索继续确定也参考输入值6的潜在的另外的指针元组14和第一指针15。因此,在发现输入值6与由第一指针15 参考的值之间的匹配之后,检查位于当前考虑的指针元组的左边和右边的相邻指针元组14(只要它们存在),直到确定输入值6与由相应的第一指针参考的值之间的不匹配,或者算法到达之前已经考虑过的指针元组14。在图8的例子中,第一指针15B的检查(在检查第一指针15D之后执行)产生输入值“A”与由第一指针15B参考的值“A”之间的匹配。在这种情况下,然后确定第一指针15A和15C 是否也参考值“A”。这对于第一指针15A是肯定的,而对于第一指针15C是否定的。因此,图8的例子中的二分搜索8在已经发现值“A”存在于所考虑的列4的行R1和R4中之后终止。在二分搜索的执行期间已经检查了第一指针15D、15B、15A和15C。
由一些实施例采用的二分搜索具有O(log n)的计算复杂度,因此一般而言更高效,因为例如线性搜索具有复杂度O(n)。在一些实施例中,二分搜索以递归方式实现。在其它实施例中,二分搜索以迭代方式实现。
在一些实施例中,托管数据库1的计算机系统被布置成从数据库表2生成索引10。索引在数据库表2第一次建立之后生成并且随后响应于数据库表2的变化(诸如单元格5中的一个或多个值的改变、一个或多个值被通配符替换或者反过来、添加或删除行3或列4,等等)生成。
一般而言,索引生成包括为数据库表2的每一列4建立索引结构 11,对于这些列,请求9可以包括输入值6。与索引10的结构相对应,这个过程主要包括两个活动,即,每个索引结构11的无值位图 13的初始化和建立,并且利用指针元组14中相应的第一指针15和第二指针16建立指针元组的阵列12。
索引生成的例子由图9示出。可选地,对于具有通过使数据库表 2的行3根据明确性次序排序而给出的明确或隐含明确性次序的实施例,在38,数据库表2的行被排序(如果这没有预先完成的话)。一般而言,数据库表的行的排序取决于每一行3中没有值(即,具有通配符)的单元格的数量和/或行3的单元格5中的值的明确性。更具体而言,在一些实施例中,数据库表2的行3被加权。每个单元格有助于行的权重,其中没有值的行添加比具有至少一个值的每个单元格更少的权重,并且在一些更具体的实施例中,具有更大量的值/更明确的值的单元格将向行添加比具有更少量的值/更不明确的值的单元格更少的权重。具有完全相同权重值的行的序列以任意方式选择。在一些实施例中,明确性次序的指示由指示经排序的行的唯一行次序给出,诸如在图2的例子中(列4A)。这种行次序指示可以充当数据库表2的主键。
然后,实际的索引生成以可以由请求9参考的第一无值位图13 (例如,回头参考图4的例子,涉及列4B的位图13B)的初始化开始。位图初始化涉及在例如托管数据库1的计算机系统的主存储器中例如分配所需的存储器量并且例如将位图13中的所有位最初设置成指示列4中没有单元格没有值的“0”。然后,在40,用指针元组填充指针元组的阵列12(例如,图4的阵列12B)。对于出现在所考虑的列4的行3中的每个值,有一个指针元组14被添加到阵列12。在41,无值位图13被更新,以便反映列中没有值的所有单元格。例如,对应于没有值的单元格的所有位被设置成“1”。可选地,在42,通过由相应的第一指针15参考的值来对阵列12中的指针元组14进行排序。在那时,用于第一列的索引结构11(即,例如,在图4的例子中的索引结构11B)完全生成。在43,检查数据库表2是否具有要为其建立索引结构11的另一列。如果这是肯定的,则以相同的方式对这个另一列4(例如,图4的例子中的列4C)重复活动39至 42,直到已经为在请求9中指示的数据库表的所有列4生成索引结构 11。
可选地,在没有经排序的行3的实施例中(即,未执行活动 38),在44创建明确指示行3的明确性次序的权重值7的阵列。在允许若干行共享相同权重值并且具有相同权重的若干行与请求9相对应的实施例中,具有相同权重的行中的任意一行被选择为最明确行,或者给出仅允许具有相同权重的行的不相交的(disjoint)值组合的机制,其效果是在特定权重级别总是只有一行与请求9相对应。
图10给出由托管具有至少一个数据库表2的数据库1的计算机系统执行的整个过程的示例性高级流程。在17,数据库表的行被排序,以便构成在索引10中反映的行的明确性次序。在18,生成索引 10(参见图9的例子)。在稍后的时间点,计算机系统接收请求9,该请求指示用于数据库表2的列4的至少一个输入值6。在19,基于索引10来处理请求,以便确定与请求9的(一个或多个)输入值相对应的数据库表2的所有行3,例如,通过图6中所示的活动22和递增活动24。在34,通过利用在索引10中反映的明确性次序,从作为活动19的输出的剩余行中选择最明确行,例如,以图6所示的活动26的方式。在21,返回所选择的最明确行的一个或多个值。
图11绘出了在托管数据库1的计算机系统100的存储器内的数据库1的各种数据的布置。计算机系统100具有可寻址存储器30,其包括例如计算机系统100的主存储器或操作存储器(RAM)。计算机系统100在可寻址存储器30中维持数据库表2,在一些实施例中是在RAM中。请求处理和最明确行的确定由中央处理单元(CPU) 31执行。CPU 31包括至少一级处理器高速缓存32,在一些实施例中包括具有不同尺寸和访问速度的至少三级(L1高速缓存、L2高速缓存、L3高速缓存)。具有用于数据库表2的列4的索引结构11的索引10也位于计算机系统100的可寻址存储器30中,在一些实施例中位于至少一个处理器高速缓存级别之一当中。
本文给出的索引实现就存储器要求/紧凑性而言优于其它索引机制,如从以下与现有技术的索引实现的比较将变得清楚的。比较是基于具有1024行和5列的数据库表2,其可以经受具有任意值的请求9。被用于比较的数据库表包括66%无值单元格数量、10%具有多于一个值的单元格数量的典型比率,以及这些值的平均尺寸。相同的数据库表2被用于要比较的所有实现。本文给出的索引实现与给数据库表行加索引的两种其它已知方式进行比较:
-红黑树(Red-Black Tree),这是一种已知的用于加索引的相关数据结构。实现基于C++std::map,具有GCC 4.3.2 STL。
-B-树(B-Tree),这是用于加索引的另一个相关数据结构,被用来改善存储器中或盘上的数据位置。实现是基于“klib”的有吸引力的混乱(attractive chaos),已知其具有良好的性能(参见 https://github.com/attractivechaos/klib/blob/master/kbtree.h)。选择256个项的聚集因子,这是效率和紧凑性之间的良好折衷。
这三种做法示出用于不同索引的以下存储器占用(所有值以字节表示)(1字节的精度):
当前技术发展水平的Intel CPU的L1高速缓存的尺寸为32KB。因此,如本文针对具有1024及更多的数据库表2给出的索引10的每个索引结构适合这个尺寸的L1高速缓存,而对于红黑树和B树实现不是这种情况。
当前可用的L2高速缓存的尺寸是256KB。因此,本文针对具有 1024及更多的数据库表2给出的索引10的所有索引结构一起适合这个尺寸的L2高速缓存,而对于红黑树实现不是这种情况。虽然具有 1024行的数据库表2的基于B树的索引适合这个尺寸的L2高速缓存,但是在L2高速缓存中实际上没有剩余空间用于数据库表2的值和簿记数据结构(诸如列位图23和结果位图25)。
虽然对于上面比较的所有三种索引实现,完整的索引元数据和完整的数据库表2都适合L3高速缓存(几MB,取决于CPU模型),但是应当指出,L3高速缓存在CPU核心之间共享并且经受同步开销。因此,对L3高速缓存的访问一般比对L1高速缓存的访问(一般慢 10至20倍)和对L2高速缓存的访问(一般慢4至8倍)慢得多。因此,本文给出的索引10中固有的存储器紧凑性允许在L1和/或L2 高速缓存中维持完整的索引或至少索引的显著增加的部分(与上面提到的其它两个已知的索引实现相比),这构成请求处理机制的实质上增加的性能,以便确定与请求9相对应的数据库表2的最明确行。
本文给出的索引10和基于索引10的请求处理机制可以应用到各种不同的数据库和类似数据库的系统,例如具有路由表的路由器。图 12示出了IP路由器(即,位于OSI参考模型的网络层的路由器)的示例性路由表33,但是本索引10也可应用到任何其它或更明确类型的路由器,诸如逻辑路由器和软件路由器(例如,企业服务总线, ESB)、硬件路由器和主干路由器、高端交换机、DSL路由器、 WiFi路由器等。
图12的路由表33是数据库表2的简单例子,具有五行五列。列从左到右定义目的地地址、子网掩码、下一跳(例如,下一个路由器)、路由器的输出网络接口以及度量指示。如技术人员所知,目的地地址和子网掩码一起形成网络地址(子网掩码指示构成网络地址的前缀位范围,而其余位形成主机地址)。传入的要路由到目的地的 IP分组形成请求9。路由器检查传入的IP分组的目的地IP地址并对照路由表33对其进行检查。在这点上,路由器确定路由表中具有涵盖传入的IP分组的目的地地址的网络地址(即,第一列中的目的地地址与第二列中的子网掩码重叠)的最明确行33。具有至少一个表示目的地网络地址(由与路由表33的第二列中的子网掩码重叠的第一列的目的地地址形成)的索引结构11的索引10和上面详细描述的请求处理被用来执行与传入的请求中的目的地IP地址相对应的最明确行的这种确定。例如,具有目的地地址192.168.1.23的IP分组被辨别为指向网络192.168.1.0/24(24=子网掩码225.225.225.0),即,第四行是与这个请求9相对应的路由表33的最明确行。另一方面,对于具有目的地号为123.123.123.123的IP分组,指定标准路由的路由表33的第一行将被确定为与这个请求9相对应的路由表33的最明确行。因此,这个IP分组将经由输出网络接口192.168.1.2被路由到下一跳192.168.1.1。
本文给出的索引10和基于索引10的请求处理机制也适用于其它数据库或类似数据库的系统,诸如具有过滤表(例如,具有或不具有状态检查的分组过滤器、代理过滤器、内容过滤器)的防火墙、生产引擎、规则引擎(例如,指定用于技术设备的任何种类的错误症状的修复过程的修复存储库)、流引擎、事务验证引擎等。
因此,计算机系统100是例如托管防火墙的网络节点,在这种情况下,数据库表2是过滤表,请求9是传入的数据分组,并且过滤表的每一行构成用于允许或防止传入的数据分组朝目的地被转发的过滤规则。传入的数据分组(例如,携带TCP或UPD片段的IP分组,其携带应用层分组,诸如HTTP请求)的值(诸如源和目的地IP地址、源和目的地端口地址)以及数据分组的特性(诸如数据分组是否属于现有连接)对照由过滤表的行定义的过滤规则进行检查。过滤表包括例如具有可能的目的地地址(诸如IP地址和/或端口地址)的至少一个目的地列,例如具有可能的源地址(诸如IP地址和/或端口地址)的一个或多个源列,例如具有指定传入的数据分组的特性的值 (诸如“已建立”指的是属于已建立的连接的分组)的一个或多个列以及具有指示传入数据分组是要转发还是要丢弃的布尔值的列。最适用的(即,最明确的)过滤规则(即,行)是基于数据分组中的输入值6确定的并且最后提及的列的对应值(即,是或否=接受或拒绝) 被返回。
在计算机系统100是例如规则引擎的情况下,数据库表2是规则表并且规则表的每一行构成回答请求的规则。规则表的列定义规则的标准。定义特定规则标准的请求的输入值6对照规则表进行检查,确定符合输入值6的最明确的规则并返回所确定的规则表的最明确行的所请求的返回值。
最后,图13是计算机系统100的图解表示,其提供具有至少一个数据库表2的数据库1的功能。数据库1可以包括指令集,以使计算机系统执行如上所述由数据库表1执行的任何方法和活动。计算机系统100包括处理器101、主存储器102和网络接口设备103,它们经由总线104彼此通信。处理器101包括保持索引10的至少一部分的至少一个CPU高速缓存,如图11和图13中所示。主存储器102 包括数据库1(即,实现数据库系统的执行软件以及至少一个数据库表2),并且可选地,数据库表2的部分也被保持在处理器101的 CPU高速缓存中。可选地,计算机系统100还可以包括静态存储器 105和盘驱动单元106。视频显示器107、字母数字输入设备108和光标控制设备109构成人机接口,以便操作计算机系统100。网络接口设备103是将数据库1连接到向数据库1发出请求9的任何数量和种类的客户端设备和应用的有线和/或无线接口。客户端可以驻留在互联网和/或任何其它网络上。网络接口设备103利用诸如 HTTP/TCP/IP协议栈、IEEE 802.11和/或专用通信协议之类的标准通信协议。体现上述方法中任何一个或全部的指令集(即,软件) 110完全或至少部分地驻留在机器可读介质中或机器可读介质上,例如主存储器102和/或具有至少一个CPU高速缓存的处理器101。除其它之外,指令尤其可以实现数据库1处理传入的请求9的功能,以确定与请求9相对应的数据库表2的最明确行3,如图6中所示,以及图9的索引生成。软件110驻留在其上的机器可读介质还可以是作为盘驱动单元106的一部分的非易失性数据载体111(例如,不可移动磁性硬盘或者光学或磁性可移动盘)。软件110还可以经由互联网通过网络接口设备103作为传播信号112被发送或接收。
虽然本文已经描述了根据本发明的教导构造的某些产品和方法,但是本专利的覆盖范围不限于此。相反,本专利覆盖字面上或按等同原则完全落入所附权利要求书的范围内的本发明的教导的所有实施例。
Claims (18)
1.一种确定由计算机系统维护的数据库表内满足检索请求的最明确的一行的方法,
数据库表包括多行和多列,数据库表的行和列形成单元格,其中每个单元格包括至少一个值或者不包括值;
计算机系统还维护用于数据库表的索引;
索引包括用于数据库表的每一列的相应索引结构;
每个索引结构包括用于在相应列中出现的每个值的相应指针元组阵列和位图,其中每个指针元组包括指示在列中出现的值之一的第一指针和指示该值在其中出现的数据库表的行的第二指针,并且其中位图指示相应列中没有值的单元格;
索引指示数据库表的行的明确性次序;
该方法包括:
由计算机系统接收指示与相应输入值相关联的数据库表的至少一列的请求;
对于每一列,计算机系统递增地:
使用用于该列的索引结构的位图来维护数据库表中在所考虑列的单元格中不包含值的所有行,及
使用用于该列的索引结构的指针元组来过滤数据库表中不包括相应输入值的所有行;
由计算机系统从剩余行中选择明确性次序最高的一行;
由计算机系统返回所确定的行的至少一个单元格的值。
2.如权利要求1所述的方法,还包括:
响应于接收到请求,初始化指示剩余行的结果位图;
其中对请求中指示的每一列使用索引结构的指针元组和位图包括:
建立列位图,指示满足用于相应列的相应输入值的所有行,及
通过将结果位图与列位图组合来更新结果位图。
3.如权利要求1所述的方法,其中相应的指针元组阵列在计算机系统的存储器中连续存储。
4.如权利要求1至3中任何一项所述的方法,其中对请求中指示的每一列使用索引结构的指针元组和位图还包括对相应的指针元组阵列执行二分搜索。
5.如权利要求2所述的方法,其中满足相应输入值的所有行由列位图中的“1”指示,所有剩余行在结果位图中由“1”指示,并且组合结果位图与列位图包括按位AND运算。
6.如权利要求1至5中任何一项所述的方法,还包括:
通过以下步骤生成索引:
初始化指示相应列中没有值的单元格的位图,
对于列中的每个值,将指针元组添加到相应索引结构的指针元组阵列,
更新相应索引结构的位图,以反映没有值的所有单元格。
7.如权利要求6所述的方法,其中生成索引还包括:
通过由第一指针指向的值对每个索引结构的指针元组进行排序。
8.如权利要求1至7中任何一项所述的方法,其中,通过取决于每行中没有值的单元格的数量和/或行的单元格中的值的明确性来对数据库表的行进行排序,实现数据库表的行的明确性次序的指示。
9.如权利要求8所述的方法,其中明确性次序的指示由指示经排序的行的唯一行次序给出。
10.如权利要求1至7中任何一项所述的方法,其中明确性的指示由包括在数据库表的索引中的权重值给出。
11.如权利要求1至10中任何一项所述的方法,其中计算机系统是路由器,数据库表是路由表,路由表的每一行构成用于将传入的请求朝目的地路由的路由规则,该路由表包括具有可能的目的地值的目的地列和具有指示朝目的地的路线的对应值的路线列。
12.如权利要求1至10中任何一项所述的方法,其中计算机系统是防火墙,数据库表是过滤表,请求是传入的数据分组并且过滤表的每一行构成用于允许或防止传入的数据分组朝目的地转发的过滤规则,其中过滤表包括具有可能的目的地地址的至少一个目的地列、具有指定传入的数据分组的特性的值的至少一个列以及具有指示传入的数据分组要被转发还是丢弃的布尔值的列。
13.如权利要求1至10中任何一项所述的方法,其中计算机系统是规则引擎,数据库表是规则表,规则表的每一行构成回答请求的规则,规则表的列定义规则标准。
14.如权利要求1至13中任何一项所述的方法,其中索引存储在计算机系统的处理器高速缓存中,并且在所确定的行的至少一个单元格的值已经被返回以便可用于处理进一步的请求之后保持存储在处理器高速缓存中。
15.一种用于确定由计算机系统维护的数据库表内满足检索请求的最明确的一行的计算机系统,
数据库表包括多行和多列,数据库表的行和列形成单元格,其中每个单元格包括至少一个值或者不包括值;
计算机系统还维护用于数据库表的索引;
索引包括用于数据库表的每一列的相应索引结构;
每个索引结构包括用于在相应列中出现的每个值的相应指针元组和位图,其中每个指针元组包括指示在列中出现的值之一的第一指针和指示该值在其中出现的数据库表的行的第二指针,并且其中位图指示相应列中没有值的单元格;
索引指示数据库表的行的明确性次序;
计算机系统被配置为:
接收指示与相应输入值相关联的数据库表的至少一列的请求;
对于请求中指示的每一列,递增地:
使用用于该列的索引结构的指针元组来过滤数据库表中不包括相应输入值的所有行,及
使用用于该列的索引结构的位图来维护数据库表中在所考虑列的单元格中不包含值的所有行;
从剩余行中选择明确性次序最高的一行;
返回所确定的行的至少一个单元格的值。
16.如权利要求15所述的计算机系统,被布置成执行如权利要求2至14中任何一项所述的方法。
17.一种在其上存储有计算机程序的计算机可读介质,所述计算机程序用于指示计算机系统执行确定数据库表内的满足检索请求的最明确行的方法,数据库表包括多行和多列,数据库表的行和列形成单元格,其中每个单元格包括至少一个值或者不包括值;
计算机系统维护用于数据库表的索引;
索引包括用于数据库表的每一列的相应索引结构;
每个索引结构包括用于在相应列中出现的每个值的相应指针元组和位图,其中每个指针元组包括指示在列中出现的值之一的第一指针和指示该值在其中出现的数据库表的行的第二指针,并且其中位图指示相应列中没有值的单元格;
索引指示数据库表的行的明确性次序;
计算机程序配置计算机系统来:
接收指示与相应输入值相关联的数据库表的至少一列的请求;
对于请求中指示的每一列,递增地:
使用用于该列的索引结构的指针元组来过滤数据库表中不包括相应输入值的所有行,及
使用用于该列的索引结构的位图来维护数据库表中在所考虑列的单元格中不包含值的所有行;
从剩余行中选择明确性次序最高的一行;
返回所确定的行的至少一个单元格的值。
18.如权利要求17所述的计算机可读介质,其中所述计算机程序被布置成配置计算机系统来执行如权利要求2至14中任何一项所述的方法。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
FR1650922 | 2016-02-05 | ||
US15/017,102 | 2016-02-05 | ||
US15/017,102 US10095720B2 (en) | 2016-02-05 | 2016-02-05 | Database table index |
FR1650922A FR3047580B1 (fr) | 2016-02-05 | 2016-02-05 | Index de table de base de donnees |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107045535A CN107045535A (zh) | 2017-08-15 |
CN107045535B true CN107045535B (zh) | 2021-09-17 |
Family
ID=57868019
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710056864.9A Active CN107045535B (zh) | 2016-02-05 | 2017-01-26 | 数据库表索引 |
Country Status (3)
Country | Link |
---|---|
EP (1) | EP3203388B1 (zh) |
CN (1) | CN107045535B (zh) |
ES (1) | ES2930440T3 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10817504B2 (en) * | 2018-03-29 | 2020-10-27 | Sap Se | Constraint satisfaction software tool for database tables |
US11386089B2 (en) | 2020-01-13 | 2022-07-12 | The Toronto-Dominion Bank | Scan optimization of column oriented storage |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1304849A2 (en) * | 2001-09-21 | 2003-04-23 | Stonesoft Corporation | Data packet filtering |
CN1759397A (zh) * | 2004-03-08 | 2006-04-12 | 微软公司 | 对数据的函数应用的结果进行结构化索引 |
CN101127034A (zh) * | 2006-08-18 | 2008-02-20 | 国际商业机器公司 | 面向变化的电子表格应用 |
CN103314377A (zh) * | 2011-01-12 | 2013-09-18 | 国际商业机器公司 | 稀疏索引表组织 |
CN103797520A (zh) * | 2011-09-07 | 2014-05-14 | 艾玛迪斯简易股份公司 | 用于访问地方的方法及系统 |
US9129037B2 (en) * | 2010-11-11 | 2015-09-08 | International Business Machines Corporation | Disappearing index for more efficient processing of a database query |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5951651A (en) * | 1997-07-23 | 1999-09-14 | Lucent Technologies Inc. | Packet filter system using BITMAP vector of filter rules for routing packet through network |
US20050246301A1 (en) * | 2004-03-18 | 2005-11-03 | Peter Lin | System and Method to distribute reasoning and pattern matching in forward and backward chaining rule engines |
US8751542B2 (en) * | 2011-06-24 | 2014-06-10 | International Business Machines Corporation | Dynamically scalable modes |
-
2017
- 2017-01-25 EP EP17000126.7A patent/EP3203388B1/en active Active
- 2017-01-25 ES ES17000126T patent/ES2930440T3/es active Active
- 2017-01-26 CN CN201710056864.9A patent/CN107045535B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1304849A2 (en) * | 2001-09-21 | 2003-04-23 | Stonesoft Corporation | Data packet filtering |
CN1759397A (zh) * | 2004-03-08 | 2006-04-12 | 微软公司 | 对数据的函数应用的结果进行结构化索引 |
CN101127034A (zh) * | 2006-08-18 | 2008-02-20 | 国际商业机器公司 | 面向变化的电子表格应用 |
US9129037B2 (en) * | 2010-11-11 | 2015-09-08 | International Business Machines Corporation | Disappearing index for more efficient processing of a database query |
CN103314377A (zh) * | 2011-01-12 | 2013-09-18 | 国际商业机器公司 | 稀疏索引表组织 |
CN103797520A (zh) * | 2011-09-07 | 2014-05-14 | 艾玛迪斯简易股份公司 | 用于访问地方的方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN107045535A (zh) | 2017-08-15 |
EP3203388A1 (en) | 2017-08-09 |
ES2930440T3 (es) | 2022-12-13 |
EP3203388B1 (en) | 2022-08-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10095720B2 (en) | Database table index | |
US11811660B2 (en) | Flow classification apparatus, methods, and systems | |
Qiao et al. | Fast Bloom filters and their generalization | |
US6061679A (en) | Creating and searching a data structure ordered by ranges of key masks associated with the data structure | |
US9390134B2 (en) | Regular expression matching method and system, and searching device | |
US8468220B2 (en) | Methods of structuring data, pre-compiled exception list engines, and network appliances | |
US8042112B1 (en) | Scheduler for search engine crawler | |
Quan et al. | TB2F: Tree-bitmap and bloom-filter for a scalable and efficient name lookup in content-centric networking | |
US9269411B2 (en) | Organizing data in a hybrid memory for search operations | |
US7624105B2 (en) | Search engine having multiple co-processors for performing inexact pattern search operations | |
US7539032B2 (en) | Regular expression searching of packet contents using dedicated search circuits | |
US7644080B2 (en) | Method and apparatus for managing multiple data flows in a content search system | |
US10572442B2 (en) | Systems and methods for providing distributed tree traversal using hardware-based processing | |
US9595003B1 (en) | Compiler with mask nodes | |
US20160335296A1 (en) | Memory System for Optimized Search Access | |
CN108287840A (zh) | 一种基于矩阵哈希的数据存储和查询方法 | |
US8015195B2 (en) | Modifying entry names in directory server | |
Pak et al. | High performance and high scalable packet classification algorithm for network security systems | |
CN111817978A (zh) | 一种流分类方法及装置 | |
CN107045535B (zh) | 数据库表索引 | |
Bercea et al. | Fully-dynamic space-efficient dictionaries and filters with constant number of memory accesses | |
CN113946587A (zh) | 句柄标识解析缓存方法、查询方法及其句柄标识解析系统 | |
Kuo et al. | A memory-efficient TCAM coprocessor for IPv4/IPv6 routing table update | |
CN115086221B (zh) | 一种报文处理方法、装置、转发设备和存储介质 | |
US9824105B2 (en) | Adaptive probabilistic indexing with skip lists |
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 |