CN118103829A - 硬件实现的管线化数据库查询处理 - Google Patents
硬件实现的管线化数据库查询处理 Download PDFInfo
- Publication number
- CN118103829A CN118103829A CN202280069202.4A CN202280069202A CN118103829A CN 118103829 A CN118103829 A CN 118103829A CN 202280069202 A CN202280069202 A CN 202280069202A CN 118103829 A CN118103829 A CN 118103829A
- Authority
- CN
- China
- Prior art keywords
- record
- memory
- command
- database
- key
- 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.)
- Pending
Links
- 238000012545 processing Methods 0.000 title claims abstract description 89
- 230000015654 memory Effects 0.000 claims abstract description 156
- 238000000034 method Methods 0.000 claims description 61
- 230000008569 process Effects 0.000 claims description 20
- 230000002776 aggregation Effects 0.000 claims description 11
- 238000004220 aggregation Methods 0.000 claims description 11
- 238000005192 partition Methods 0.000 claims description 7
- 238000003780 insertion Methods 0.000 description 22
- 230000037431 insertion Effects 0.000 description 22
- 238000010586 diagram Methods 0.000 description 13
- 230000006870 function Effects 0.000 description 7
- 239000004744 fabric Substances 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000005055 memory storage Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 206010009944 Colon cancer Diseases 0.000 description 1
- 230000004931 aggregating effect Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- ZPUCINDJVBIVPJ-LJISPDSOSA-N cocaine Chemical compound O([C@H]1C[C@@H]2CC[C@@H](N2C)[C@H]1C(=O)OC)C(=O)C1=CC=CC=C1 ZPUCINDJVBIVPJ-LJISPDSOSA-N 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 229920006344 thermoplastic copolyester Polymers 0.000 description 1
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/24537—Query rewriting; Transformation of operators
-
- 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/2282—Tablespace storage structures; 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)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种用于将数据库命令应用于一个或更多个数据库表的装置,包括存储器(24)和硬件实现的管线(10、170)。该硬件实现的管线包括一个或更多个表处理电路(12),并且被配置为接收从一个或更多个数据库表提取的一连串输入记录,将来自输入记录中的第一记录解析为键和除该键以外的一个或更多个字段,并将第一记录的至少部分存储在存储器中,以便能使用键访问,以及通过根据键将来自输入记录中的第二记录的至少部分与存储在存储器中的第一记录的至少部分进行匹配来应用数据库命令。
Description
发明领域
本发明总体上涉及数字硬件和微处理器设计,且尤其涉及硬件实现的数据库查询处理。
发明背景
关系数据库和关系数据库管理系统(RDBMS)通常使用高级语言,诸如SQL,其具有操纵表的命令,例如连接(Join)和分组(Group-by)。连接命令连接两个或更多个表的选定列以创建新表。连接是根据公共值或值的组合(称为键)来执行的。SQL连接命令有几种变体,例如内连接(inner Join)、全连接(full Join)(或外连接(outer Join))、左连接(leftJoin)和右连接(Right Join)。分组命令根据指定的键将表中的行分组在一起。
例如,考虑下表:
名字 | 姓氏 | 工资 |
John | Smith | 100 |
Alice | Jones | 110 |
Bob | Jones | 210 |
John | Doe | 200 |
表1
名字 | 姓氏 | 城市 |
John | Smith | 纽约 |
Alice | Jones | 纽约 |
Bob | Jones | 伦敦 |
John | Doe | 伦敦 |
Charlie | Brown | 巴黎 |
表2
城市 | 人口 | 海拔高度 |
纽约 | 100 | 1300 |
伦敦 | 230 | 405 |
表3
根据“名字”和“姓氏”对表1和表2应用连接,产生下表:
名字 | 姓氏 | 城市 | 工资 |
John | Smith | 纽约 | 100 |
Alice | Jones | 纽约 | 110 |
Bob | Jones | 伦敦 | 210 |
John | Doe | 伦敦 | 200 |
根据“城市”对表2和表3应用连接,产生下表:
名字 | 姓氏 | 城市 | 海拔高度 |
John | Smith | 纽约 | 1300 |
Alice | Jones | 纽约 | 1300 |
Bob | Jones | 伦敦 | 405 |
John | Doe | 伦敦 | 405 |
根据“名字”将分组应用于表1,并对工资进行平均,产生下表:
名字 | 平均(工资) |
John | 150 |
Alice | 110 |
Bob | 210 |
发明概述
本文中描述的本发明的实施例提供了一种用于将数据库命令应用于一个或更多个数据库表的装置。所述装置包括存储器和硬件实现的管线(pipeline)。所述硬件实现的管线包括一个或更多个表处理电路,并且被配置为接收从所述一个或更多个数据库表提取的一连串输入记录,将来自所述输入记录中的第一记录解析为键和除所述键以外的一个或更多个字段,将所述第一记录的至少部分存储在所述存储器中,以便能使用所述键访问,以及通过根据所述键将来自所述输入记录中的第二记录的至少部分与存储在所述存储器中的所述第一记录的至少部分进行匹配来应用数据库命令。
在一些实施例中,所述数据库命令是连接命令,所述连接命令连接来自第一输入数据库表和第二输入数据库表中的匹配的记录的至少部分,所述第一记录从所述第一输入数据库表中提取,并且所述第二记录从所述第二输入数据库表中提取。
在实施例中,所述表处理电路中的至少一个被配置为通过执行插入阶段和在所述插入阶段之后的查找阶段来应用所述连接命令,所述插入阶段将所述第一输入记录的至少部分存储在所述存储器中,所述查找阶段将匹配的所述第一记录的至少部分和所述第二记录的至少部分连接起来。
在另一个实施例中,对于给定的第二记录,所述表处理电路中的至少一个被配置为从所述存储器中检索具有与所述给定的第二记录的键匹配的键的一个或更多个第一记录的至少部分,并通过将所述给定的第二记录的至少部分和所述一个或更多个第一记录的相应的至少部分连接起来以产生一个或更多个输出记录。
在一些实施例中,所述数据库命令是分组命令,所述分组命令将单个数据库表的匹配的记录的至少部分进行分组,并且所述第一记录和所述第二记录都是从所述单个数据库表中提取的。在示例实施例中,所述表处理电路中的至少一个被配置为通过执行聚合阶段和在所述聚合阶段之后的输出阶段来应用所述分组命令,所述聚合阶段将所述存储器中的匹配的记录进行分组,所述输出阶段输出分组的记录。在所公开的实施例中,在应用所述分组命令时,所述表处理电路中的至少一个被配置为对于每个输入记录,检查所述存储器是否已经保存了具有与所述输入记录的键匹配的键的匹配的条目,当所述存储器尚未保存匹配的条目时,在所述存储器中创建新条目,并在所述新条目中存储所述输入记录的至少部分,以及当所述存储器已经保存了匹配的条目时,在所述存储器中更新所述匹配的条目以考虑到(account for)所述输入记录。在实施例中,所述表处理电路中的至少一个被配置为原子地(atomically)更新所述匹配的条目。在实施例中,所述表处理电路中的至少一个被配置为通过以第一顺序扫描所述单个数据库表,并以第二顺序更新所述存储器中的匹配的条目来应用所述分组命令,所述第二顺序并不限于遵循所述第一顺序。
在一些实施例中,当所述第一记录中的两个或更多个第一记录对应于相同的键值时,所述表处理电路中的至少一个被配置为在所述存储器中存储两个或更多个条目,所述两个或更多个条目包括所述两个或更多个第一记录的至少部分并且能通过所述相同的键值来访问。在示例实施例中,所述表处理电路中的至少一个被配置为产生与匹配所述相同的键值的所述两个或更多个第一记录对应的两个或更多个输出记录。
在一些实施例中,对于每个第一记录,所述表处理电路中的至少一个被配置为计算所述第一记录的键的签名,并且除了所述第一记录的所述至少部分之外,还将所述签名的至少部分存储在所述存储器中。在所公开的实施例中,所述表处理电路中的至少一个被配置为通过以下方式将第二记录的至少部分与第一记录的至少部分进行匹配:(i)从所述存储器中读取所述第一记录的所述至少部分的键的第一签名的至少部分,并将所读取的所述签名的至少部分与所述第二记录的所述至少部分的键的第二签名进行匹配,以及(ii)仅在所述第二签名与所述第一签名的所述至少部分匹配时,从所述存储器中读取所述第一记录的所述至少部分的键,并将所读取的键与所述第二记录的所述至少部分的键进行匹配。
在一些实施例中,对于每个第一记录,所述表处理电路中的至少一个被配置为对所述第一记录的键计算基本上无错误的散列(hash),除了所述第一记录的所述至少部分之外,还将所述基本上无错误的散列存储在所述存储器中,并且通过将所述第二记录的基本上无错误的散列与所述第一记录的所述基本上无错误的散列进行匹配来将所述第二记录的所述至少部分与所述第一记录的所述至少部分进行匹配。在实施例中,所述表处理电路中的至少一个被配置为将所述基本上无错误的散列和所述键都存储在所述存储器中。在另一个实施例中,所述表处理电路中的至少一个被配置为将所述基本上无错误的散列存储在所述存储器中,但不将所述键存储在所述存储器中。
在一些实施例中,对于每个第一记录,所述表处理电路中的至少一个被配置为对所述第一记录的键计算散列,并且将所述第一记录的所述至少部分存储在所述存储器中以便根据所述散列和所述键两者的组合能访问。在示例实施例中,在将第二记录的至少部分与所述第一记录的所述至少部分进行匹配时,所述表处理电路中的至少一个被配置为通过所述散列访问所述存储器,然后从匹配所述散列的所述第一记录的所述至少部分中识别也匹配所述键的所述第一记录的所述至少部分。
在一些实施例中,所述数据库命令是分区(Partition-by)命令,并且所述表处理电路中的一个或更多个被配置为执行分组命令,然后对所述分组命令的结果执行连接命令。在其他实施例中,所述数据库命令是应用于三个或更多个数据库表的多维连接命令,并且所述表处理电路中的一个或更多个被配置为通过执行多个连接命令来执行所述多维连接命令,每个所述连接命令应用于两个数据库表。在又一些其他实施例中,所述数据库命令是左连接命令、右连接命令和外连接命令中的一个,并且所述表处理电路中的至少一个被配置为标记在所述数据库命令的执行中保持不匹配的输入记录,并且输出所标记的输入记录。
在一些实施例中,所述装置还包括控制器,所述控制器被配置为通过在两个或更多个阶段中经由所述管线流式传输所述输入记录来执行所述数据库命令,并且在连续的阶段之间重新配置所述管线中的所述表处理电路中的至少一个。在一些实施例中,所述数据库命令是非重复计数(Count-Distinct)命令。在一些实施例中,所述表处理电路中的至少一个包括粗粒度可重构阵列(CGRA)处理器。在一些实施例中,所述装置还包括控制器,所述控制器被配置为将所述存储器的资源动态地分配给所述表处理电路。
在实施例中,所述输入记录中的至少两个输入记录的大小或至少两个键的大小彼此不同。在另一个实施例中,所述表处理电路中的至少一个被配置为经由间接表访问所述存储器,所述间接表通过对所述键计算的散列值来访问。在又一实施例中,所述表处理电路中的两个或更多个被配置为访问同一存储器。在又一实施例中,给定的表处理电路被配置为基于所述键将所述数据库表中的一个划分为多个桶(bucket),并且将所述数据库命令分别应用于所述桶中的每一个。
在一些实施例中,给定的表处理电路包括处理引擎(PE)和查找引擎(LE)。在实施例中,所述PE被配置为在将数据提供给所述LE之前对所述数据进行预处理,或者对由所述LE产生的数据进行后处理。在实施例中,所述表处理电路包括处理引擎(PE),所述处理引擎(PE)被配置为能够选择地从两个或更多个查找引擎(LE)接收输入或输出。典型地,所述表处理电路被配置为应用所述数据库命令,使得给定的表处理电路处理所述输入记录中的每一个不超过一次。
根据本发明的实施例,还提供了一种用于将数据库命令应用于一个或更多个数据库表的方法。该方法包括在硬件实现的管线中接收从所述一个或更多个数据库表提取的一连串输入记录,所述硬件实现的管线包括一个或更多个表处理电路。使用所述硬件实现的管线(i)将来自所述输入记录中的第一记录解析为键和除所述键以外的一个或更多个字段,并将所述第一记录的至少部分存储在所述存储器中,以便能使用所述键访问,以及(ii)通过根据所述键将来自所述输入记录中的第二记录的至少部分与存储在所述存储器中的所述第一记录的所述至少部分进行匹配来应用数据库命令。
根据本发明的实施例的以下详细描述并结合附图,本发明将得到更充分的理解,附图中:
附图简述
图1是示意性地示出根据本发明实施例的查询处理管线的框图;
图2A和图2B是示意性地示出根据本发明实施例的执行连接命令的查找引擎(LE)的框图;
图3是示意性地示出根据本发明实施例的使用图2A和图2B的LE执行连接命令的方法的流程图;
图4和图5是示意性地示出根据本发明实施例的用于存储在图2A和图2B的LE的存储器中的数据结构的图;
图6是示意性地示出根据本发明实施例的执行SQL分组命令的查找引擎(LE)的框图;
图7是示意性地示出根据本发明实施例的用于使用图6的LE执行SQL分组命令的方法的流程图;
图8是示意性地示出根据本发明另一实施例的执行SQL分组命令的查找引擎(LE)的框图;以及
图9是示意性地示出根据本发明实施例的查询处理管线的框图。
具体实施方式
综述
本文中描述的本发明的实施例提供了用于执行数据库查询的改进的方法和系统。在一些实施例中,所公开的技术提供了用于执行操纵数据库表的命令(诸如连接、分组以及其他命令)的硬件电路。作为示例,本文中描述的实施例主要涉及使用结构化查询语言(SQL)制定的查询,但是所公开的技术不要求任何特定的查询格式。
本发明的一些实施例使用被称为表处理电路(TPC)的基本硬件构建块。TPC通常包括处理引擎(PE,也称为处理电路)和查找引擎(LE,也称为查找电路)。通常,尽管不是必须的,LE执行实际的数据库命令,并且PE在将数据提供给LE之前对数据进行预处理,和/或对LE产生的数据进行后处理。
TPC被配置为执行对两个数据库表进行操作(例如,连接)或对单个数据库表进行操作(例如,分组)的数据库命令或其部分。在一些实施例中,多个TPC在管线中级联以执行更复杂的操作,如下文将详细描述的。在管线配置中,给定的PE可以对用于同一TPC的LE的输入进行预处理(例如,通过对前面的TPC的输出进行操作),或者对同一TPC的LE的输出进行后处理(例如,为随后的TPC提供输出)。在一些实施例中,任何LE都可以将其查找结果添加到沿着管线流动的记录中,并且因此管线中的任何随后的PE(不一定是下一个PE)可以处理这些结果。管线中LE的数量不一定等于PE的数量。例如,管线可以以PE开始和结束。
在一些实施例中,TPC被配置为根据指定的键在两个表之间执行连接命令。该键包含两个表共有的一个或更多个字段(列),根据这些字段,表应该被连接起来。TPC分两个阶段执行连接命令——“插入”阶段,随后是“查找”阶段。在插入阶段(更准确地说,是“查找和条件插入”阶段),TPC扫描第一个表的记录(行),并将它们解析为(i)键和(ii)应该出现在连接的表中的一个或更多个其他字段(被称为“不透明(opaque)”)。TPC在存储器中查找该键,并且可选地在存储器中插入已解析的记录的相关字段,以便通过该键可以访问。在查找阶段,TPC扫描第二个表的记录。对于第二个表的每个记录,TPC将该记录解析为键和不透明,从存储器中检索第一个表的任何匹配记录(即,具有匹配的键的记录),并连接来自两个表的匹配的行中的适当字段以产生连接的记录。连接的记录作为输出提供。如所看到的,LE仅使用对数据的单次传递来执行连接命令。
附加地或替代地,TPC可以被配置为根据指定的键和指定的分组指令(directive)对表执行分组命令。键包括一个或更多个字段(列),根据这些字段来执行分组。分组指令指定如何将与键匹配的记录进行分组。在一个实施例中,TPC扫描表的记录并将它们解析成键和一个或更多个其他字段。对于每个记录,TPC检查存储器是否已经保存了与键匹配的条目。如果没有,则TPC在存储器中创建新的条目,并将来自当前处理的记录的相关字段存储在其中。如果存储器中已经存在与键匹配的条目,则TPC更新现有的条目以考虑到当前处理的记录。例如,如果分组指令指定要按键聚合某个字段,则TPC从存储器中读取现有的字段值,对现有的字段值和当前处理的记录的字段值进行求和,并将总和写回存储器,以代替现有的字段值。当TPC完成对最后一个记录的处理时,存储器保存结果,即分组表。在本文中,TPC也只使用对数据的单次传递来执行命令。
在一些实施例中,同一个TPC可被配置为执行连接命令或分组命令。在这两种情况下,TPC接收从一个或两个数据库表(当配置为执行连接时从两个表,当配置为执行分组时从单个表)提取的一连串输入记录。TPC将来自输入记录中的第一记录解析为键和除键以外的一个或更多个字段,并将第一记录的至少部分存储在存储器中,以便通过键可以访问。TPC通过根据键将来自输入记录中的第二记录的至少部分与存储在存储器中的第一记录的至少部分进行匹配来应用命令,以便产生输出记录。
在一些实施例中,TPC通过对键计算散列,并将记录存储在从散列导出的地址中,从而将记录存储在存储器中。一些公开的技术考虑了不同的键转换成相同散列的小概率。这种事件是有问题的,因为记录的匹配(例如,用于连接表或用于在表内分组)依赖于键的精确匹配。因此,在一些实施例中,TPC使用存储器存储方案(memory storage scheme),该存储器存储方案使用散列作为用于存储的初始指针,但是仍然区分转换成相同散列的不同键。
在许多实际场景中,用于匹配记录的键很长,因此匹配操作会导致相当大的存储器访问带宽。在一些实施例中,TPC通过最初比较键的签名(例如,CRC)而不是完整的键来减少其存储器访问带宽。只有当在签名之间找到匹配时,才比较完整的键。附加地或替代地,TPC可以在存储器中存储基本上无错误的高度可靠的散列(即,将不同的键散列成相同散列值具有极低的概率),并且通过比较无错误的散列值而不是完整的键来识别匹配的记录。在本文描述的各种实施例中,除了键之外还存储无错误的散列值(从而减少存储器访问带宽),或者代替键存储无错误的散列(从而减少存储器访问带宽和存储器空间)。
如上所述,在一些实施例中,多个TPC被级联以形成执行更复杂命令的管线。例如,这样的命令可以包括操纵多于两个数据库表的多维连接命令,可以用连接命令和分组命令表示的诸如“分区”的命令,或者包括多个命令的查询。其他示例是交集(Intersect)命令和差集(Except)命令。通常,管线对从一个或更多个数据库表中提取的输入记录进行操作。在当前上下文中,术语“从表中提取的输入记录”意味着输入记录不一定是与表中的记录完全相同的记录(尽管在某些情况下它们可能是相同的)。输入记录可以包括例如经处理的记录,例如具有一个或更多个添加或修改的字段的记录。附加地或替代地,输入记录可以仅包括表的相应原始记录的一部分(即,仅包含来自原始表记录的选定字段)。
总之,所公开的技术提供了以管线化、流式方式执行数据库命令的硬件,具有高吞吐量和对存储器的高效利用。
使用管线化处理引擎和查找引擎来处理数据库查询
图1是示意性地示出根据本发明实施例的硬件实现的查询处理管线10的框图。管线10包括一个或更多个表处理电路(TPC)12,在本示例中为多个TPC的级联。每个TPC 12包括相应的处理引擎(PE)14和相应的查找引擎(LE)16。在图1的示例中,每个TPC的LE在相应的PE之前。然而,这个顺序绝不是强制性的,并且附图中描绘该顺序纯粹是为了便于解释。通常,如上所述,给定TPC中的PE可以对相应的LE的输入和/或输出进行操作。在图1的实施例中,管线10从没有相应的LE的“孤立(orphan)”PE 14开始。出于同样的原因,TPC可以被绘制为具有在LE之前的PE,并且管线可以以没有相应的LE的“孤立”PE结束。
管线10接收SQL查询或查询的一部分作为输入,该SQL查询或查询的一部分包括操纵表的一个或更多个命令,例如连接或分组。控制器18配置(例如,编程)各种PE和LE来执行它们指定的功能,以便联合执行查询。然后管线执行查询并提供所得到的表作为输出。
通常,无论查询中的SQL命令的数量如何,每个正被处理的表都只流入管线一次。换句话说,给定的TPC 12处理每个输入记录不超过一次。由于管线化操作,管线10以非常高的吞吐量执行SQL查询。
LE和PE的结构和操作将在下面详细解释。下面进一步参考图9给出管线的附加细节、示例和替代实现。在接下来的描述中,大多数TPC操作都归属于LE。然而,这种选择仅仅是举例说明。在各种实施例中,由TPC执行的操作可以以任何合适的方式在LE和PE之间划分。
SQL连接的硬件实现
图2A、图2B和图3是示出根据本发明实施例的执行SQL连接命令的查找引擎(LE)20和相应方法的框图和流程图。例如,这种LE配置可用于实现图1的管线10中的一些或全部LE16。接下来的描述共同指的是这三幅图。
LE 20被配置为在表示为表1和表2的两个表之间执行SQL连接。连接命令指定要连接的表以及键。键包括两个表共有的一列或更多列,应该根据这些列来连接表。
在LE 20中连接两个表的过程包括两个阶段——查找和插入阶段(为简洁起见,下面简称为插入阶段),随后是查找阶段。在图2A中和图3的左侧描绘了插入阶段。在图2B中和图3的右侧描绘了查找阶段。在图2A和图2B中,用虚线描绘了在给定阶段期间未激活的LE20的元件。
在插入阶段,LE 20扫描表1的记录(行),解析它们并将相关字段存储在存储器中。在查找阶段,LE 20扫描表2的记录,解析它们,从存储器中检索表1的相对应的字段,并连接表1和表2的适当字段以产生连接的记录。连接的记录作为输出提供。(在整个描述中,当提到表时,术语“记录”和“行”可互换使用,并且术语“字段”和“列”可互换使用。)
在图2A和图2B的示例中,LE 20包括存储器24,用于存储用于连接命令的相关信息,例如键、字段值、散列值、指针等。LE 20还包括记录解析器28、散列计算器32、插入电路36、查找电路40和键比较器44。LE 20的一些元件仅在插入阶段激活,一些元件仅在查找阶段激活,而其他元件在两个阶段都激活,但是可以不同地操作。
插入阶段以表1读出步骤50(图3)开始,在表1读出步骤50,记录解析器28从表1读取记录(行)。在此上下文中,术语“读出”通常指用于向解析器28提供记录的任何“拉”或“推”实现。在表1解析步骤54,解析器28将记录解析为“键”和“不透明”(表示为OPAQUE1)。如上所述,键包括要根据其连接表的一个或更多个字段。OPAQUE1包含来自表1中的记录的一个或更多个其他字段,这些其他字段不是键的一部分,但应该出现在连接的记录中。
在一些情况下,除了键和不透明之外,解析器28还从记录中提取一个或更多个被定义为“透明(Transparent)”的字段。透明字段不由LE处理,而只是沿着管线向前传输(例如,因为它们服务于输出的一部分,或者因为它们打算由后续LE处理)。
在插入散列步骤58,散列计算器32对键计算散列值。任何合适的散列函数都可以用于此目的。在插入步骤62,插入电路36将记录的键和不透明(OPAQUE1)存储在存储器24中从散列值导出的地址中。
注意,表1很可能包含多个具有相同键的记录。因此,存储器24中的存储方案通常允许存储由同一个键寻址的多个记录。此外,根据散列函数的选择,两个或更多个不同的键将转换成相同散列值的概率不为零。因此,存储器24中的存储方案通常还允许存储由相同散列值寻址但具有不同键的多个记录。满足这些要求的存储方案将在下面进一步描述,并在图4和图5中描绘。
在插入完成检查步骤66,LE 20检查表1的所有记录(行)是否已经被扫描和处理。如果没有,该方法循环回到上面的步骤50,以读取表1的下一行。一旦已经扫描了表1的所有记录,该方法就进行到查找阶段。在这个阶段,存储器24已经填充有表1的记录(或者至少填充有应该出现在连接的表中的字段)。表1的记录以可通过“散列(键)”(HASH(KEY))寻址的方式存储在存储器24中。
查找阶段从表2读出步骤70开始,在表2读出步骤70,LE 20的记录解析器28从表2读取记录(行)。在表2解析步骤74,解析器28将记录解析为键和不透明(表示为OPAQUE2)。该键是与在插入阶段中用于将表1插入到存储器24的键相同的键,即,根据其连接表的一个或更多个字段。OPAQUE2包括表2的一个或更多个其他字段,这些其他字段不是键的一部分,但应该出现在连接的记录中。
在查找散列步骤78中,散列计算器32使用插入阶段中使用的相同散列函数对键计算散列值。在查找步骤82,查找电路40使用散列值访问存储器24,并检索表1中的对应于该散列值的一个或更多个记录。通常,查找电路40可以返回多个{键,OPAQUE1}条目。
对于由查找电路40返回的每个{键,OPAQUE1}条目,在键比较步骤86和匹配检查步骤90,键比较器44将键(从存储器24检索到的键)与从表2的记录中解析出的键进行比较。如果两个键匹配,则在连接步骤94,LE 20构造连接的记录,该连接的记录包括(i)键,(ii)从存储器24检索到的OPAQUE1,和(iii)从表2的记录中解析出的OPAQUE2。连接的记录(其是连接的表的行)作为LE 20的输出提供。如果两个键不匹配,则比较器44丢弃所讨论的{键,OPAQUE1}条目。键比较机制确保,即使散列值可能对应于多个不同的键,也只有具有相同键的OPAQUE1值和OPAQUE2值将被连接。
在连接完成检查步骤98,LE 20检查表2的所有记录(行)是否已经被扫描。如果没有,则该方法循环回到上面的步骤70。一旦表2的所有记录已经被扫描,该方法终止。
在实施例中,当连接两个表时,LE 20可以选择较小的表作为表1(其被解析到存储器24中),而较大的表作为表2(其仅在查找阶段中使用)。这种选择减少了存储器24中所需的空间。
在实施例中,上述过程可用于执行“左连接”或“右连接”命令。在左连接中,左表中未与右表的任何记录连接的记录也作为输出提供。在实施例中,为了执行左连接,在查找阶段期间,表1中的与表2中的记录连接的每个记录在存储器中由相应的“已用(used)”位标记。一旦扫描了表2的所有记录,附加输出级就输出存储器中的未设置“已用”位的所有记录。类似地,在右连接中,应该输出右表中未与左表的任何记录连接的记录。因此,为了执行右连接,在查找阶段期间,表2中的与表1中的记录连接的每个记录在存储器中由相应的“已用”位标记。同样,输出级输出存储器中的未设置“已用”位的所有记录。
图3中描绘的方法流程是纯粹为了清晰而选择的示例流程。在替代实施例中,可以使用任何其他合适的流程。例如,键比较器44的操作(尤其是用于决定何时输出记录以及何时丢弃记录的标准)可以变化。例如,根据查询,可以根据需要将比较器设置为区分大小写或不区分大小写。
在一些实施例中,LE 20对正在处理的表的连续行执行插入阶段和/或查找阶段。在插入阶段,例如,插入电路36可以将表1的第n行存储在存储器24中,同时,散列计算器32计算表1的第n+1行的键的散列,同时解析器28解析第n+2行。在查找阶段,插入电路36可以将与表2的第n行相关的行连接起来,同时散列计算器32计算表2的第n+1行的键的散列,同时解析器28解析第n+2行。在一些实施例中,LE可以具有更深的管线化结构,在同一阶段(在解析器28、散列计算器32或插入电路36中)存储多行。
在一些实施例中,当将表1的记录存储在存储器24中时(步骤62),插入电路36计算并存储键的循环冗余校验(CRC)以及键本身。作为CRC的替代,可以使用比键短的任何其他合适的签名。在随后的查找阶段,当试图将表2的记录与表1的记录进行匹配时(步骤86和步骤94),查找电路40首先比较两个键的CRC。只有当发现CRC匹配时,查找电路才继续比较键本身。这种技术是高效的,因为键通常很长(例如,512字节)。在不匹配的情况下,从存储器中读取完整的键是成本昂贵的且耗时的。相反,CRC(其相当短,例如8位)的读出更快。找到CRC之间的匹配但键之间不匹配的概率很小(例如,在8位CRC的情况下为255/256)。
查找引擎中的数据结构和指针
图4是示意性地示出根据本发明实施例的用于存储在LE 20的存储器24中的数据结构的图。在一些实施例中,LE 20的插入电路36在SQL连接操作的插入阶段(图2A和图3的左侧)期间用表1的记录填充这些数据结构。随后,在SQL连接操作的查找阶段(图2B和图3的右侧),LE 20的查找电路40查询这些数据结构,以便将表1的记录与表2的相应记录连接。在其他实施例中,在其他数据库命令的处理中以类似的方式使用数据结构。
如上所述,LE 20使用的存储方案支持存储由相同散列值寻址的表1的多个记录(行)。该存储方案还实现两个或更多个不同的键被映射到相同散射值的小概率。由于来自表1和表2中的字段的连接基于公共键(而不是公共散列值),该存储方案应该区分映射到相同散列值的不同键,而不是简单地将对应于相同散列值的所有记录不加区别地存储在一起。
通常,表1的大小和内容可以变化,存储器24中条目的数量(总数,以及每个键或每个散列的条目数量)也是预先未知的。因此,为了有效地支持可变数量的条目,该存储方案通常使用间接方式(indirection)。
在图4的实施例中,存储器24包括散列表100(也称为“间接表”)和主表104。主表104包括多个条目。为了便于解释,对应于某个散列值的条目被称为主表的“区域”。这些区域不一定是连续的。每个区域存储对应于该散列值的表1的记录。如果某个散列值可以从多个不同的键导出,则该散列值的区域被划分为与不同键相关联的子区域(其不一定是连续的)。
散列表100通过由散列计算器32从键导出的散列值来访问。散列表100中的每个条目保存指向主表104内的指针102(“下一个指针”)。每个指针102指向表104的区域的开始,该区域存储与相应散列值相关联的记录。因此,通过使用某个散列值访问散列表100,插入电路36或查找电路40可以获得指向保存与该散列值相关联的记录的区域的开始的指针102。在一个实施例中,散列表100中的每个条目的大小为三个字节(在有效指针102的情况下),并且保存有效指针或NULL(空)指针(未映射到表104中任何条目的散列值)。
主表104的每个条目保存来自表1的相应记录的字段值(例如,键、OPAQUE1)和可选的其他相关信息(例如,CRC)。在实施例中,键具有可变大小,例如从四个字节到4KB,并且OPAQUE具有可变大小,例如最大至(up to)2KB。在实施例中,存储在条目中的字段(列)的数量及其数据大小是可变的。条目还可以存储指示存储在该条目中的字段的数据大小的参数。
在图4和图5的实施例中,主表104被组织为多个链表(linked-list),具有在条目之间进行指引的两种类型的指针(表示为“Next-S”和“Next-D”)。Next-S指针从一个记录指向同一子区域中的下一个记录(即,在同一链表内,指向与当前记录对应相同键的下一个记录)。Next-D指针从一个链表指向下一个链表,即从子区域中的第一记录指向下一个子区域中的第一记录(其与当前记录对应不同的键)。子区域中的最后一个记录保存NULL指针。在一个实施例中,每个Next-S和Next-D指针的大小为三个字节,并且保存有效指针或NULL指针。
这种结构使LE能够在查找阶段期间有效地搜索主表。通常,LE首先在Next-D指针上搜索,直到找到匹配的键。一旦找到了匹配的键,LE就继续在Next-S指针上搜索,以搜索匹配的散列值。然而,通常,所公开的指针结构不是强制性的,并且表104可以以任何其他合适的方式实现。
图4和图5的示例中所示的多个链表全都对应于同一散列值(即,这整个结构都由同一个“下一个指针”102指向)。通常,每个散列值(散列表100中的每个条目)指向保存映射到该散列值的记录的类似结构。
图5是示意性地示出根据本发明实施例的用于存储在主表104中的各种指针的图。图5所示的整套指针以某个“下一个指针”102开始,并因此在表104中都对应于同一散列值和同一区域。表104中对应于其他散列值并因此由其他“下一个指针”102指向的其他区域通常具有类似的结构。
图5中的竖直列表示该区域的子区域,即从散列值导出的不同键。在本示例中,散列值(对应于“下一个指针”102)可以从三个不同的键导出。通过跟随“Next-S”指针108来执行沿着给定子区域的遍历(对具有相同键的记录的遍历)。通过跟随“Next-D”指针112来执行从一个子区域到下一个子区域的遍历(即,跳转到对应于不同键的子区域)。
如上所述,表104中的不同区域和子区域不一定是连续的。例如,在一些实施例中,插入电路36按照扫描表1的连续顺序来填充表104。此顺序通常不是散列值的连续顺序。然而,“Next-S”指针108和“Next-D”指针112的结构使得能够在子区域之间和子区域内遍历,以便在它们的适当位置读取或写入记录。
可以理解,图4和图5的存储方案不需要预先将存储器空间分配给任何指定的区域(散列值)或子区域(键)。因此,该方案是灵活的,并且有效地利用了存储器。通常,不同的区域在大小上可能彼此不同,并且不同的子区域在大小上可能彼此不同(并且因此有效地支持每个散列值和/或键具有不同数量的记录的表)。单独的记录,即表104中的条目,在大小上也可能彼此不同。
在一些实施例中,当通过Next-S指针遍历表104时,LE不会将键重复地保存在存储器中,以节省存储器空间。
图4和图5所示的数据结构、指针和存储方案纯粹是作为示例来选择的。在替代实施例中,可以使用任何其他合适的数据结构、指针和存储方案。
在一个实施例中,被称为“散列快捷表(hash shortcut table)”的附加表用于减少存储器访问带宽。散列快捷表包括N个箱(bin),例如64K个箱。每个箱对应于散列值的相应子范围(并因此对应于散列表100的条目的相应子集)。如果相应子集中的至少一个散列表条目不为空,则每个箱被设置为“1”。LE 20可以在尝试查找表100之前查找散列快捷表,并且仅当散列快捷表中的相应箱为“1”时才继续查找表100。
SQL分组的硬件实现
图6和图7是根据本发明实施例的框图和流程图,其示意性地示出了被配置为执行SQL分组命令的LE 20以及相应的方法。接下来的描述共同参考这两幅图。在一些实施例中,同一个LE 20根据需要被重新配置以执行SQL连接命令(如图2A和图2B中所示)或SQL分组命令(如图6中所示)。尤其地,插入电路36在两种配置中不同地操作。
在本示例中,分组命令的执行从表1读出步骤120(图7)开始,在表1读出步骤120,记录解析器28从表1读取记录(行)。在表1解析步骤124,解析器28将记录解析为键和值。在散列步骤128,散列计算器32对键计算散列。
在检查步骤132,插入电路36检查存储器24是否已经存储了与散列匹配的条目。如果没有发现这样的条目,则插入电路36在新条目创建步骤136在存储器24中创建新条目。该新条目由在步骤128计算出的散列来寻址,并且包括在步骤124解析出的键和值。
另一方面,如果步骤132发现存储器24已经具有与散列匹配的条目,则插入电路36执行更新现有条目的处理(步骤140-148),以考虑到正在处理的表1的当前行中的值。在现有值检索步骤140,插入电路36从该条目中检索现有值。在更新步骤144,插入电路36基于正在处理的表1的当前行的值来更新检索到的值。在更新存储步骤148,插入电路36将更新的值存储在该条目中以代替先前的值。
特定的更新操作(步骤144)取决于分组命令中指定的分组指令。例如,如果分组命令指定要按键对值进行聚合(求和),则插入电路36将新值添加到从现有条目中检索的值上。
在完成检查步骤152,LE 20检查表1的所有记录(行)是否已经被扫描和处理。如果没有,则该方法循环回到上面的步骤120,以读取表1的下一行。一旦表1的所有记录已经被扫描,该方法终止。
在处理结束时,存储在存储器24中的更新的条目构成分组命令的结果。结果可以从存储器24以流式传输方式输出(streamed out),或者以其他方式作为输出提供。在实施例中,LE 20以表1的行的连续顺序将结果从存储器24流式传输到LE的输出端。
图7中描绘的方法流程是纯粹为了清晰而选择的示例流程。在替代实施例中,可以使用任何其他合适的流程。例如,如上所述,图7的一个或更多个步骤可以由耦接到LE 20的PE来执行。在一个示例实现中,PE执行步骤144和步骤148。
在一些实施例中,对于表1的多行,LE 20并行地或至少部分并行地执行图7的方法。例如,解析器28、散列计算器32和插入电路36可以以管线化方式操作。在管线化操作中,插入电路36可以基于表1的第n行更新存储器24,同时散列计算器32计算表1的第n+1行的键的散列,并且同时地解析器28解析第n+2行。
此外,插入电路36可以无序地(即,以与由解析器28读取和解析行的顺序不同的顺序)处理表1的行。例如,由于在主表104的链表上的不同读取等待时间和/或不同遍历路径(图4和图5),从存储器24的读出(步骤140)对于一些条目可能较快,而对于其他条目可能较慢。在这种情况下,插入电路36可以继续更新较快条目的值(步骤144和步骤148),同时等待较慢条目的读出结果,这导致无序执行。
然而,对于任何给定的键,插入电路36原子地执行读出和更新过程(步骤140-148)。换句话说,一旦对应于某个键的值被读取(步骤140),插入电路36将不会对具有相同键的其他行启动步骤140,直到更新(步骤144-148)完成。这种原子操作是获得可能的无序执行的另一个原因。
使用无错误的散列节省存储器带宽和存储器空间
在一些实施例中,LE 20计算键的“无错误的散列值”并将其存储在存储器24中的每个条目中。术语“无错误的散列”是指两个键映射到同一散列值的概率可忽略不计的散列,其中“可忽略不计”的定义取决于用户需求。在示例实施例中,无错误的散列是128位长的加密散列。然而,替代地,也可以使用其他合适的散列函数。
无错误的散列不应与由散列计算器32计算的散列混淆,也不应与上述CRC机制混淆。如前所述,CRC通常很短(例如,8位),并且具有不可忽略的概率(例如,1/256)找到具有相同散列的另一个键。由散列计算器32计算的散列也具有对应于多个键的不可忽略的概率,这例如通过图4和图5的存储方案和指针来处理。
当执行SQL连接命令时(例如,在图3的步骤90),LE 20可以使用无错误的散列将表2的行与存储器24中的条目(其从表1的行导出)进行匹配,而不是比较完整的键。当执行SQL分组命令时(例如,在图7的步骤132),LE 20可以使用无错误的散列来匹配表1中的应该被分组的行。由于无错误的散列通常比键短得多(即,具有明显更少的位数),因此比较无错误的散列值而不是键减少了对存储器24的访问带宽。
在一些实施例中,LE 20将无错误的散列和键两者存储在存储器24中的每个条目中。在其他实施例中,LE 20在存储器24中的每个条目中存储无错误的散列,但不存储键。保存无错误的散列而不保存键,除了节省存储器访问带宽之外,还节省了存储器空间。在存储器24中保存无错误的散列而不保存键在各种用例中是可行的,例如,在分组命令中,或者在键(或者至少不是整个键)不作为输出的一部分的连接命令中。
在一些用例中,例如,在分组命令中,即使LE 20没有将键存储在存储器24中,也可能需要键作为输出。在实施例中,LE 20通过对于每个新条目将键和对应的无错误的散列存储在单独的存储器位置(例如,外部动态随机存取存储器(DRAM)中)来解决该问题。一旦分组命令完成,LE 20根据散列值连接两个表(存储器24中的分组表和将键链接到相应散列值的表)。这个连接的表作为输出提供。
图8是示意性地示出根据本发明另一实施例的使用无错误的散列执行SQL分组的查找引擎(LE)160的框图。LE 160类似于图2A和图2B的LE 20,并且附加地包括加密散列计算器164。如上所述,计算器164对键计算无错误的散列。如上所述,这种技术不限于加密散列,并且可以使用任何其他足够可靠的散列。
使用管线化处理引擎和查找引擎来处理数据库查询
在一些实施例中,在LE 20的前面是可编程处理引擎(PE),也称为处理电路。PE在将键和/或值提供给LE之前执行计算或以其他方式操纵它们。例如,考虑分组命令,该分组命令指定按两个字段之和进行分组。在实施例中,PE可以针对表1的每行执行两个字段的求和,并将每行连同总和一起提供给LE 20。作为另一个示例,考虑分组命令,该命令指定在组中根据sum(字段1>8)聚合,即,根据字段1>8的记录数聚合。在这种情况下,计算也可以由前面的PE而不是由LE来执行。PE还可以自己执行聚合,并将聚合结果存储在存储器中。
在一些实施例中,多个LE可以从输入到输出串联地管线化,其中至少一些LE在PE前面。在示例实施例中,处理管线包括PE和LE的交错级联。这种管线可用于执行复杂的查询或查询的部分,该复杂的查询或查询的部分包含多个命令,诸如连接和分组命令。
图9是示意性地示出根据本发明实施例的硬件实现的查询处理管线170的框图。如上文关于图1的管线10所述,管线170接收SQL查询或查询的一部分作为输入,该SQL查询或查询的一部分包括一个或更多个操纵表的命令,例如连接或分组。管线执行查询并提供所得到的表作为输出。
在图9的示例中,管线170包括彼此交错的多个PE 174和多个LE 178。然而,通常,PE和LE的顺序可以不是纯粹交错的,即,管线可以包括两个或更多个连续的LE和/或两个或更多个连续的PE。在又一实施例中,管线可以包括耦接到较少数量的PE的多个LE,其中管线互连方案(例如,将PE分配给选定的LE)根据正在执行的查询来配置。
LE 178可以例如使用上述任何配置来实现,例如,图2A、图2B和图6中所示的配置。在一些实施例中,管线中的控制器182或外部主机(附图中未示出)将各种PE和LE配置为执行它们在管线中的指定功能。
在实施例中,每个管线级(PE或LE)将记录(表行)传送到下一管线级,类似于网络数据包(packet)。每个管线级可以修改、添加和/或移除记录中的列、丢弃记录或复制记录。
如上文详细讨论的,每个LE 178通常被配置为执行键值(key-value)搜索,其中在片上数据库(例如,图2A、图2B和图6的存储器24)中搜索键。查找结果(匹配或不匹配)和存储的用于键的一个或更多个值(在匹配的情况下)作为LE的输出提供。各种表操纵命令(例如连接和分组)可以以这种方式执行。一般来说,LE操作可以分为以下阶段:
■从输入记录中的一列或更多列中提取键。
■使用基于散列的表查找存储器中的相关值(记录)。
■将零个、一个或更多个匹配结果(值)与输入记录的透明部分合并。
每个PE 174通常被配置为在输入记录被提供到下一个管线级(例如,到LE 178)之前处理输入记录。PE 174通常被配置为执行以下一个或更多个:
■过滤:决定是丢弃记录还是将记录传递到下一个管线级。
■聚合并在存储器中更新聚合结果:处理输入记录并生成用于聚合的值(例如,当接下来的LE执行分组时)。实际的聚合操作通常作为对存储器的原子操作来执行(例如,当先前的LE执行分组时)。聚合值的地址是查找响应的一部分。
■更新输出记录中的列——输出记录可以包括由PE生成或修改的并且可以在下一个查找操作中用作查找键的列。
在一些实施例中,管线中的各个LE和PE能够访问相同的存储器。可以例如在管线初始化时将存储器资源分配给各个LE和PE。在其他实施例中,可以将存储器资源动态地分配给给定的LE或PE。例如,可以在插入阶段期间,响应于实际需求来将存储器页面分配给LE,而不是预先分配。这样的存储器分配任务通常由控制器182执行。
在一些实施例中,管线170的结构使得能够执行可以用连接和分组命令来表示的其他SQL命令。例如,SQL分区命令相当于分组后面跟着连接。
例如,考虑分区命令,该分区命令按名字和平均工资对下表进行分区:
名字 | 姓氏 | 工资 |
John | Smith | 100 |
Alice | Jones | 110 |
Bob | Jones | 210 |
John | Doe | 200 |
表1
在实施例中,管线170可以以两个阶段执行该命令,但是可能通过同一个LE来执行。首先,管线170中的一个LE 178按名字和平均工资执行分组,以产生以下中间结果:
名字 | 平均(工资) |
John | 150 |
Alice | 110 |
Bob | 210 |
然后,管线170中的后续LE 178根据名字在中间结果和原始的表1之间执行连接,以产生分区命令的最终结果:
名字 | 姓氏 | 工资 |
John | Smith | 150 |
Alice | Jones | 110 |
Bob | Jones | 210 |
John | Doe | 150 |
作为另一个示例,管线170可以通过在多个连续的LE 178中执行一系列连接命令(每个连接命令连接两个表)来执行多维连接命令(即,将多个表连接为单个表)。管线170中的多维连接命令的示例实现如下:
■使用LE 178将表1插入到存储器。
■使用相同的LE 178或不同的LE 178将表2插入到存储器。
■通过管线流式传输表3。某个LE 178将表3的每个记录与表1连接起来。所得到的连接的记录继续通过管线流式传输。随后的LE 178将该连接的记录与表2中的相关联的记录连接起来。后一个连接的结果是连接了表1、表2和表3的记录。对表3的所有记录重复该过程。
另一个示例是非重复计数命令。另一个示例是分组后面跟着非重复计数,这可以使用两个分组命令来实现。各种其他命令或命令序列可以以这种方式实现。注意,由于管线170的管线化操作,任何这样的命令只涉及对数据的单次传递。因此,潜在地,管线170的吞吐量可以是每个时钟周期一个记录。
在一些实施例中,控制器182动态地重新配置管线170。以这种方式,管线170可以交替处理查询的多个子查询,或者以其他方式处理不同的高级命令。
存储器访问和高速缓存考虑
典型地,LE 20或LE 160的存储器24(图2A、图2B和图6)包括内部的片上存储器。同样,在处理管线10和170(图1和图9)中,各种LE 16和LE 178的存储器通常包括内部的片上存储器。使用内部存储器来实现对于实现小延迟和高吞吐量非常重要。然而,实践中,内部存储器的大小是有限的,并且对于保存正在使用的整个表和数据结构来说太小了。
因此,在一些实施例中,LE 16、LE 20、LE 160和LE 178使用合适的高速缓存方案。在典型的高速缓存方案中,整个数据(例如,正在处理的数据库表)存储在外部的片外存储器系统中。内部存储器被用作高速缓存,其根据一些标准(例如,最近使用的数据或最频繁使用的数据)缓存一小部分数据。逐出标准通常用于从内部存储器逐出数据(例如,最近最少使用的数据或最不频繁使用的数据)。
在一些实施例中,当扫描大表时(例如,在执行连接或分组命令时),LE 20首先对表进行“分桶(bucketize)”,即,将表分为被称为“桶”的多个部分。桶大小通常被设置为使得处理每个桶的结果(例如,由分组产生的分组表,或者连接中较小的表)适合内部存储器。然后,LE一次扫描一个“桶”,并在进行到下一个桶之前输出每个桶的部分结果。
在一些实施例中,LE 20在考虑正在执行的数据库命令的键的同时将表划分为桶。通常,LE确保与给定键匹配的所有记录都落在同一个桶中。LE通常使用其散列计算能力来进行此操作。当满足此条件(匹配相同键的记录不能落入不同的桶中)时,对一个桶的记录应用数据库命令(例如,连接或分组)与其他桶的记录无关。因此,无论桶的数量如何,一个记录只需读取两次。此外,合并来自不同桶的命令(例如,连接或分组)的结果相当于简单地连结(concatenate)各个桶的结果。
在一些实施例中,当对给定的表进行分桶时,LE(或相关联的PE,或管线控制器)收集表征桶的统计数据(例如,每个桶的记录数)。这些统计数据使得能够改进后续的分桶操作。
在一些实施例中,LE可以在分桶阶段期间执行查询中指定的一些过滤和聚合。此特征可以减少存储在桶中的数据量。
其他实施例和变型
图1和图9中所示的管线10和170的配置,图1、图2A、图2B和图6中所示的LE 16、LE20和LE 160的配置,以及它们的各种部件的配置,是纯粹为了概念清楚而描绘的示例配置。在可替代的实施例中,可以使用任何其他合适的配置。
在各种实施例中,管线10或管线170或者单独的PE或LE可以从任何合适的处理器或主机接收其输入,例如,从处理数据库查询的更高级别的处理器接收。类似地,管线10或管线170或者单独的PE或LE可以将其输入提供给任何合适的处理器或主机,例如,提供给处理数据库查询的更高级别的处理器。在一些实施例中,管线10或管线170或者单独的PE或LE可以集成在这种更高级别的处理器中。
LE 16、LE 20和LE 160、图1和图9所示的管线10和管线170以及它们的各种部件通常使用合适的硬件(诸如在一个或更多个专用集成电路(ASIC)和/或一个或更多个现场可编程门阵列(FPGA)中)来实现。在一些实施例中,LE 16、LE 20和LE 160、图1和图9所示的管线10和管线170以及它们的各种部件的某些部分,例如控制器18和控制器182,可以使用可编程处理器来实现,该可编程处理器用软件编程为执行本文描述的功能。例如,软件可通过网络以电子形式下载到处理器,或者替代地或附加地,软件可以被提供和/或存储在非暂时性有形介质(诸如,磁存储器、光存储器或电子存储器)上。
在一些实施例中,管线10和/或管线170的一个或更多个LE和/或PE可以使用粗粒度可重构阵列(CGRA)处理器来实现。CGRA处理器通常包括通过可配置的互连结构(configurable fabric of interconnects)连接的计算节点的阵列。计算节点和互连被配置为根据控制流图执行一系列计算操作。例如,在美国专利10,579,390、美国专利申请公开2020/0159539和美国专利申请16/860,070、16/889,159和17/015,275中描述了示例性CGRA架构和技术,这些文献的公开内容都通过引用并入本文。CGRA处理器的管线化、面向图形的特性有助于其自身有效地实现管线170的元素(例如,PE 174)。
在示例实施例中,管线的LE使用专用硬件块来实现,而PE使用单个CGRA的片段来实现。这种实现使得能够在不同的管线级之间灵活、动态地分配计算资源。
将会理解,上述实施例是通过示例的方式引用的,并且本发明不限于已经在上文具体示出和描述的内容。相反,本发明的范围包括上文所描述的各种特征的组合和子组合以及这些特征的变型和修改,该变型和修改将在本领域的技术人员阅读上述描述之后被想到并且在现有技术中未被公开。通过引用并入本专利申请中的文件被视为本申请的组成部分,除非任何术语在这些并入的文件中在某种程度上以与本说明书中明确地或隐含地做出的定义相冲突的方式被定义,应该仅考虑本说明书中的定义。
Claims (44)
1.一种用于将数据库命令应用于一个或更多个数据库表的装置,所述装置包括:
存储器;以及
硬件实现的管线,其包括一个或更多个表处理电路,所述管线被配置为:
接收从所述一个或更多个数据库表提取的一连串输入记录;
将来自所述输入记录中的第一记录解析为键和除所述键以外的一个或更多个字段,并将所述第一记录的至少部分存储在所述存储器中,以便能使用所述键访问;以及
通过根据所述键将来自所述输入记录中的第二记录的至少部分与存储在所述存储器中的所述第一记录的所述至少部分进行匹配来应用数据库命令。
2.根据权利要求1所述的装置,其中,所述数据库命令是连接命令,所述连接命令连接来自第一输入数据库表和第二输入数据库表的匹配的记录的至少部分,其中,所述第一记录从所述第一输入数据库表中提取,并且其中,所述第二记录从所述第二输入数据库表中提取。
3.根据权利要求2所述的装置,其中,所述表处理电路中的至少一个被配置为通过执行插入阶段和在所述插入阶段之后的查找阶段来应用所述连接命令,所述插入阶段将所述第一输入记录的所述至少部分存储在所述存储器中,所述查找阶段将匹配的所述第一记录的至少部分和所述第二记录的至少部分连接起来。
4.根据权利要求2所述的装置,其中,对于给定的第二记录,所述表处理电路中的至少一个被配置为:
从所述存储器中检索具有与所述给定的第二记录的键匹配的键的一个或更多个第一记录的至少部分;以及
通过将所述给定的第二记录的至少部分和所述一个或更多个第一记录的相应的至少部分连接起来以产生一个或更多个输出记录。
5.根据权利要求1所述的装置,其中,所述数据库命令是分组命令,所述分组命令将单个数据库表的匹配的记录的至少部分进行分组,并且其中,所述第一记录和所述第二记录都是从所述单个数据库表中提取的。
6.根据权利要求5所述的装置,其中,所述表处理电路中的至少一个被配置为通过执行聚合阶段和在所述聚合阶段之后的输出阶段来应用所述分组命令,所述聚合阶段将所述存储器中的匹配的记录进行分组,所述输出阶段输出分组的记录。
7.根据权利要求5所述的装置,其中,在应用所述分组命令时,所述表处理电路中的至少一个被配置为:
对于每个输入记录,检查所述存储器是否已经保存了具有与所述输入记录的键匹配的键的匹配的条目;
当所述存储器尚未保存匹配的条目时,在所述存储器中创建新条目,并在所述新条目中存储所述输入记录的至少部分;以及
当所述存储器已经保存了匹配的条目时,在所述存储器中更新所述匹配的条目以考虑到所述输入记录。
8.根据权利要求7所述的装置,其中,所述表处理电路中的所述至少一个被配置为原子地更新所述匹配的条目。
9.根据权利要求7所述的装置,其中,所述表处理电路中的所述至少一个被配置为通过以第一顺序扫描所述单个数据库表,并以第二顺序更新所述存储器中的匹配的条目来应用所述分组命令,所述第二顺序并不限于遵循所述第一顺序。
10.根据权利要求1-9中任一项所述的装置,其中,当所述第一记录中的两个或更多个第一记录对应于相同的键值时,所述表处理电路中的至少一个被配置为在所述存储器中存储两个或更多个条目,所述两个或更多个条目包括所述两个或更多个第一记录的至少部分并且能通过所述相同的键值访问。
11.根据权利要求10所述的装置,其中,所述表处理电路中的所述至少一个被配置为产生与匹配所述相同的键值的所述两个或更多个第一记录对应的两个或更多个输出记录。
12.根据权利要求1-9中任一项所述的装置,其中,对于每个第一记录,所述表处理电路中的至少一个被配置为计算所述第一记录的键的签名,并且除了所述第一记录的所述至少部分之外,还将所述签名的至少部分存储在所述存储器中。
13.根据权利要求12所述的装置,其中,所述表处理电路中的所述至少一个被配置为通过以下方式将第二记录的至少部分与第一记录的至少部分进行匹配:
从所述存储器中读取所述第一记录的所述至少部分的键的第一签名的至少部分,并将所读取的所述签名的至少部分与所述第二记录的所述至少部分的键的第二签名进行匹配;以及
仅在所述第二签名与所述第一签名的所述至少部分匹配时,从所述存储器中读取所述第一记录的所述至少部分的键,并将所读取的键与所述第二记录的所述至少部分的键进行匹配。
14.根据权利要求1-9中任一项所述的装置,其中,对于每个第一记录,所述表处理电路中的至少一个被配置为对所述第一记录的键计算基本上无错误的散列,除了所述第一记录的所述至少部分之外,还将所述基本上无错误的散列存储在所述存储器中,并且通过将所述第二记录的基本上无错误的散列与所述第一记录的所述基本上无错误的散列进行匹配来将所述第二记录的所述至少部分与所述第一记录的所述至少部分进行匹配。
15.根据权利要求14所述的装置,其中,所述表处理电路中的所述至少一个被配置为将所述基本上无错误的散列和所述键都存储在所述存储器中。
16.根据权利要求14所述的装置,其中,所述表处理电路中的所述至少一个被配置为将所述基本上无错误的散列存储在所述存储器中,但不将所述键存储在所述存储器中。
17.根据权利要求1-9中任一项所述的装置,其中,对于每个第一记录,所述表处理电路中的至少一个被配置为对所述第一记录的键计算散列,并且将所述第一记录的所述至少部分存储在所述存储器中,以便根据所述散列和所述键两者的组合能访问。
18.根据权利要求17所述的装置,其中,在将第二记录的至少部分与所述第一记录的所述至少部分进行匹配时,所述表处理电路中的所述至少一个被配置为通过所述散列访问所述存储器,然后从匹配所述散列的所述第一记录的所述至少部分中识别也匹配所述键的所述第一记录的所述至少部分。
19.根据权利要求1所述的装置,其中,所述数据库命令是分区命令,并且其中,所述表处理电路中的一个或更多个被配置为执行分组命令,然后对所述分组命令的结果执行连接命令。
20.根据权利要求1所述的装置,其中,所述数据库命令是应用于三个或更多个数据库表的多维连接命令,并且其中,所述表处理电路中的一个或更多个被配置为通过执行多个连接命令来执行所述多维连接命令,每个所述连接命令应用于两个数据库表。
21.根据权利要求1所述的装置,其中,所述数据库命令是左连接命令、右连接命令和外连接命令中的一个,并且其中,所述表处理电路中的至少一个被配置为标记在所述数据库命令的执行中保持不匹配的输入记录,并且输出所标记的输入记录。
22.根据权利要求1-9中任一项所述的装置,还包括控制器,所述控制器被配置为通过在两个或更多个阶段中经由所述管线流式传输所述输入记录来执行所述数据库命令,并且在连续的阶段之间重新配置所述管线中的所述表处理电路中的至少一个。
23.根据权利要求1所述的装置,其中,所述数据库命令是非重复计数命令。
24.根据权利要求1-9中任一项所述的装置,其中,所述表处理电路中的至少一个包括粗粒度可重构阵列(CGRA)处理器。
25.根据权利要求1-9中任一项所述的装置,还包括控制器,所述控制器被配置为将所述存储器的资源动态地分配给所述表处理电路。
26.根据权利要求1-9中任一项所述的装置,其中,所述输入记录中的至少两个输入记录的大小或至少两个所述键的大小彼此不同。
27.根据权利要求1-9中任一项所述的装置,其中,所述表处理电路中的至少一个被配置为经由间接表访问所述存储器,所述间接表通过对所述键计算的散列值来访问。
28.根据权利要求1-9中任一项所述的装置,其中,所述表处理电路中的两个或更多个被配置为访问同一存储器。
29.根据权利要求1-9中任一项所述的装置,其中,给定的表处理电路被配置为基于所述键将所述数据库表中的一个划分为多个桶,并且将所述数据库命令分别应用于所述桶中的每一个。
30.根据权利要求1-9中任一项所述的装置,其中,给定的表处理电路包括处理引擎(PE)和查找引擎(LE)。
31.根据权利要求30所述的装置,其中,所述PE被配置为在将数据提供给所述LE之前对所述数据进行预处理,或者对由所述LE产生的数据进行后处理。
32.根据权利要求1-9中任一项所述的装置,其中,所述表处理电路包括处理引擎(PE),所述处理引擎(PE)被配置为能够选择地从两个或更多个查找引擎(LE)接收输入或输出。
33.根据权利要求1-9中任一项所述的装置,其中,所述表处理电路被配置为应用所述数据库命令,使得给定的表处理电路处理所述输入记录中的每一个不超过一次。
34.一种用于将数据库命令应用于一个或更多个数据库表的方法,所述方法包括:
在硬件实现的管线中接收从所述一个或更多个数据库表提取的一连串输入记录,所述硬件实现的管线包括一个或更多个表处理电路;以及
使用所述硬件实现的管线:
将来自所述输入记录中的第一记录解析为键和除所述键以外的一个或更多个字段,并将所述第一记录的至少部分存储在所述存储器中,以便能使用所述键访问;以及
通过根据所述键将来自所述输入记录中的第二记录的至少部分与存储在所述存储器中的所述第一记录的所述至少部分进行匹配来应用数据库命令。
35.根据权利要求34所述的方法,其中,所述数据库命令是连接命令,所述连接命令连接来自第一输入数据库表和第二输入数据库表的匹配的记录的至少部分,其中,所述第一记录从所述第一输入数据库表中提取,并且其中,所述第二记录从所述第二输入数据库表中提取。
36.根据权利要求34所述的方法,其中,所述数据库命令是分组命令,所述分组命令将单个数据库表的匹配的记录的至少部分进行分组,并且其中,所述第一记录和所述第二记录都是从所述单个数据库表中提取的。
37.根据权利要求34-36中任一项所述的方法,其中,当所述第一记录中的两个或更多个第一记录对应于相同的键值时,将所述第一记录的所述至少部分存储在所述存储器中包括在所述存储器中存储两个或更多个条目,所述两个或更多个条目包括所述两个或更多个第一记录的至少部分,并且能通过所述相同的键值来访问。
38.根据权利要求34-36中任一项所述的方法,还包括对于每个第一记录,计算所述第一记录的键的签名,并且除了所述第一记录的所述至少部分之外,还将所述签名的至少部分存储在所述存储器中。
39.根据权利要求34-36中任一项所述的方法,还包括对于每个第一记录,对所述第一记录的键计算基本上无错误的散列,除了所述第一记录的所述至少部分之外,还将所述基本上无错误的散列存储在所述存储器中,并且通过将所述第二记录的基本上无错误的散列与所述第一记录的所述基本上无错误的散列进行匹配来将所述第二记录的所述至少部分与所述第一记录的所述至少部分进行匹配。
40.根据权利要求34-36中任一项所述的方法,还包括对于每个第一记录,对所述第一记录的键计算散列,并且将所述第一记录的所述至少部分存储在所述存储器中,以便根据所述散列和所述键两者的组合能访问。
41.根据权利要求34所述的方法,其中,所述数据库命令是分区命令,并且其中,应用所述数据库命令包括执行分组命令,然后对所述分组命令的结果执行连接命令。
42.根据权利要求34所述的方法,其中,所述数据库命令是应用于三个或更多个数据库表的多维连接命令,并且其中,应用所述数据库命令包括执行多个连接命令,每个所述连接命令应用于两个数据库表。
43.根据权利要求34所述的方法,其中,所述数据库命令是左连接命令、右连接命令和外连接命令中的一个,并且其中,应用所述数据库命令包括标记在所述数据库命令的执行中保持不匹配的输入记录,并输出所标记的输入记录。
44.根据权利要求34-36中任一项所述的方法,其中,执行应用所述数据库命令,使得给定的表处理电路处理所述输入记录中的每一个不超过一次。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/503,320 | 2021-10-17 | ||
US17/503,320 US12038922B2 (en) | 2021-10-17 | Pipelined hardware-implemented database query processing | |
PCT/IB2022/056384 WO2023062446A1 (en) | 2021-10-17 | 2022-07-11 | Pipelined hardware-implemented database query processing |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118103829A true CN118103829A (zh) | 2024-05-28 |
Family
ID=85982115
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202280069202.4A Pending CN118103829A (zh) | 2021-10-17 | 2022-07-11 | 硬件实现的管线化数据库查询处理 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN118103829A (zh) |
WO (1) | WO2023062446A1 (zh) |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10042876B2 (en) * | 2014-09-17 | 2018-08-07 | International Business Machines Corporation | Sort-merge-join on a large architected register file |
US10558659B2 (en) * | 2016-09-16 | 2020-02-11 | Oracle International Corporation | Techniques for dictionary based join and aggregation |
US10860586B2 (en) * | 2018-02-19 | 2020-12-08 | Red Hat, Inc. | Methods and devices for joining multiple events in data streaming analytics systems |
-
2022
- 2022-07-11 CN CN202280069202.4A patent/CN118103829A/zh active Pending
- 2022-07-11 WO PCT/IB2022/056384 patent/WO2023062446A1/en active Application Filing
Also Published As
Publication number | Publication date |
---|---|
US20230120492A1 (en) | 2023-04-20 |
WO2023062446A1 (en) | 2023-04-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110083601B (zh) | 面向键值存储系统的索引树构建方法及系统 | |
US20140351239A1 (en) | Hardware acceleration for query operators | |
Leis et al. | The adaptive radix tree: ARTful indexing for main-memory databases | |
US8862625B2 (en) | Accessing data in a column store database based on hardware compatible indexing and replicated reordered columns | |
CN103425725B (zh) | 散列冲突降低系统 | |
US11461304B2 (en) | Signature-based cache optimization for data preparation | |
US9495398B2 (en) | Index for hybrid database | |
US20090254532A1 (en) | Accessing data in a column store database based on hardware compatible data structures | |
US7805427B1 (en) | Integrated search engine devices that support multi-way search trees having multi-column nodes | |
WO2017065885A1 (en) | Distributed pipeline optimization data preparation | |
US10671586B2 (en) | Optimal sort key compression and index rebuilding | |
US20160103879A1 (en) | Embracing and exploiting data skew during a join or groupby | |
US8086641B1 (en) | Integrated search engine devices that utilize SPM-linked bit maps to reduce handle memory duplication and methods of operating same | |
US20040019737A1 (en) | Multiple-RAM CAM device and method therefor | |
WO2017065888A1 (en) | Step editor for data preparation | |
CN108268596B (zh) | 搜索存储在存储器中的数据的方法和系统 | |
WO2019108963A1 (en) | Accelerated filtering, grouping and aggregation in a database system | |
US20170109387A1 (en) | Cache optimization for data preparation | |
Theocharidis et al. | SRX: efficient management of spatial RDF data | |
US7003653B2 (en) | Method for rapid interpretation of results returned by a parallel compare instruction | |
Wei et al. | A fast algorithm for constructing inverted files on heterogeneous platforms | |
US11210280B2 (en) | Systems and methods for fast bloom filter operations | |
US8321429B2 (en) | Accelerating queries using secondary semantic column enumeration | |
US7672925B2 (en) | Accelerating queries using temporary enumeration representation | |
CN118103829A (zh) | 硬件实现的管线化数据库查询处理 |
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 |