《用于内存列存储数据库的多核算法.pdf》由会员分享,可在线阅读,更多相关《用于内存列存储数据库的多核算法.pdf(19页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 103177057 A (43)申请公布日 2013.06.26 CN 103177057 A *CN103177057A* (21)申请号 201210433322.6 (22)申请日 2012.09.28 13/332,189 2011.12.20 US G06F 17/30(2006.01) (71)申请人 SAP 股份公司 地址 德国瓦尔多夫 (72)发明人 J迪斯 P桑德斯 F费尔伯 J赛德尔 (74)专利代理机构 北京市柳沈律师事务所 11105 代理人 邵亚丽 (54) 发明名称 用于内存列存储数据库的多核算法 (57) 摘要 本申请涉及用于内存列存储数。
2、据库的多核算 法。 模式可以在查询的至少一部分中识别, 该查询 的定义是在查询请求中接收的。可将所识别的模 式与预定义模式的集合相匹配, 每个预定义模式 与保存在库中的多个预编译的查询执行子组件的 至少一个预编译的查询执行子组件相关联。可生 成执行查询的计划, 例如通过基于从定义推导的 计划的伪代码表示、 将与所匹配的模式相关联的 预编译的查询执行子组件合并到计划中。 (30)优先权数据 (51)Int.Cl. 权利要求书 2 页 说明书 10 页 附图 6 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书2页 说明书10页 附图6页 (10)申请公布号 CN 103。
3、177057 A CN 103177057 A *CN103177057A* 1/2 页 2 1. 一种计算机程序产品, 包括存储指令的机器可读介质, 当所述指令由至少一个可编 程处理器执行时引起所述至少一个可编程处理器执行包括下列操作的操作 : 接收查询请求, 所述查询请求包括保存在基于列的存储装置中的数据库的查询的定 义 ; 在查询的至少一部分中识别模式 ; 将所识别的模式与预定义模式的集合相匹配, 每个预定义模式与保留在库中的多个预 编译的查询执行子组件中的至少一个预编译的查询执行子组件相关联 ; 生成执行查询的计划, 所述生成包括基于从所述定义推导的计划的伪代码表示、 将与 所匹配的模。
4、式相关联的预编译的查询执行子组件合并到计划中 ; 以及 使用所生成的计划执行查询。 2. 如权利要求 1 所述的计算机程序产品, 其中所述操作还包括 : 基于将所识别的模式与预定义模式的集合的匹配, 选择用于处理必须被连接的多个表 的最优序列, 以响应查询 ; 以及 配置计划以包括用于处理所述多个表的最优序列。 3. 如权利要求 1 所述的计算机程序产品, 其中所述操作还包括从所述定义推导计划的 伪代码表示。 4. 如权利要求 1 所述的计算机程序产品, 其中所述生成还包括创建单函数, 以调用预 编译的查询执行组件和一个或多个其它预编译的查询执行组件来生成计划。 5. 如权利要求 4 所述的计。
5、算机程序产品, 其中所述单函数定义期望的结果, 并且基于 所识别的模式的匹配的至少一部分来访问来自两个或更多预定义并行化计划的集合中的 预定义并行化计划。 6. 如权利要求 1 所述的计算机程序产品, 其中所述预编译的查询执行子组件包括以 C+ 表示的一个或多个预编译的 SQL 操作。 7. 一种系统, 包括 : 至少一个可编程处理器 ; 以及 机器可读介质, 其存储指令, 当所述指令由所述至少一个可编程处理器执行时引起所 述至少一个可编程处理器执行包括下列操作的操作 : 接收查询请求, 所述查询请求包括保存在基于列的存储装置中的数据库的查询的定 义 ; 在查询的至少一部分中识别模式 ; 将所。
6、识别的模式与预定义模式的集合相匹配, 每个预定义模式与保留在库中的多个预 编译的查询执行子组件中的至少一个预编译的查询执行子组件相关联 ; 生成执行查询的计划, 所述生成包括基于从所述定义推导的计划的伪代码表示、 将与 所匹配的模式相关联的预编译的查询执行子组件合并到计划中 ; 以及 使用所生成的计划执行查询。 8. 如权利要求 7 所述的系统, 其中所述操作还包括 : 基于将所识别的模式与预定义模式的集合的匹配, 选择用于处理必须被连接的多个表 的最优序列, 以响应查询 ; 以及 配置计划以包括用于处理所述多个表的最优序列。 权 利 要 求 书 CN 103177057 A 2 2/2 页 。
7、3 9. 如权利要求 7 所述的系统, 其中所述操作还包括从所述定义推导计划的伪代码表 示。 10. 如权利要求 7 所述的系统, 其中所述生成还包括创建单函数, 以调用预编译的查询 执行组件和一个或多个其它预编译的查询执行组件来生成计划。 11. 如权利要求 10 所述的系统, 其中所述单函数定义期望的结果, 并且基于所识别的 模式的匹配的至少一部分来访问来自两个或更多预定义并行化计划的集合中的预定义并 行化计划。 12.如权利要求7所述的系统, 其中所述预编译的查询执行子组件包括以C+表示的一 个或多个预编译的 SQL 操作。 13. 一种计算机实现的方法, 包括 : 接收查询请求, 所述。
8、查询请求包括保存在基于列的存储装置中的数据库的查询的定 义 ; 在查询的至少一部分中识别模式 ; 将所识别的模式与预定义模式的集合相匹配, 每个预定义模式与保留在库中的多个预 编译的查询执行子组件中的至少一个预编译的查询执行子组件相关联 ; 生成执行查询的计划, 所述生成包括基于从所述定义推导的计划的伪代码表示、 将与 所匹配的模式相关联的预编译的查询执行子组件合并到计划中 ; 以及 使用所生成的计划执行查询。 14. 如权利要求 13 所述的计算机实现的方法, 还包括 : 基于将所识别的模式与预定义模式的集合的匹配, 选择用于处理必须被连接的多个表 的最优序列, 以响应查询 ; 以及 配置计。
9、划以包括用于处理所述多个表的最优序列。 15. 如权利要求 13 所述的计算机实现的方法, 还包括从所述定义推导计划的伪代码表 示。 16. 如权利要求 13 所述的计算机实现的方法, 其中所述生成还包括创建单函数, 以调 用预编译的查询执行组件和一个或多个其它预编译的查询执行组件来生成计划。 17. 如权利要求 16 所述的计算机实现的方法, 其中所述单函数定义期望的结果, 并且 基于所识别的模式的匹配的至少一部分来访问来自两个或更多预定义并行化计划的集合 中的预定义并行化计划。 18. 如权利要求 13 所述的计算机实现的方法, 其中所述预编译的查询执行子组件包括 以 C+ 表示的一个或多。
10、个预编译的 SQL 操作。 19. 如权利要求 13 所述的计算机实现的方法, 其中由至少一个可编程处理器完成接 收、 识别、 匹配、 生成和执行操作中的至少一个。 权 利 要 求 书 CN 103177057 A 3 1/10 页 4 用于内存列存储数据库的多核算法 技术领域 0001 在此描述的主题涉及提高多核处理环境中的数据库应用的性能。 背景技术 0002 多种最新进展使相关数据库的性能得以显著提高。例如, 在其中独立保存每个列 的、 基于列的存储装置可以减小典型查询必须访问的数据量, 该典型查询仅仅使用存在于 大型商业或工业数据库中的小部分的列。 0003 此外, 随机存取存储器 (。
11、RAM) 成本的不断降低已经促进了在主存中整体地存储相 当大的数据库。这种因素极大地增加了可用带宽并降低了等待时间达若干个数量级。内 存方法还可以减轻列存储数据库的潜在缺陷, 其在某些例子中具有比行存储表示更细粒度 的存储访问模式。 通过取消限制, 基于列的数据存储能够被压缩, 使这种好处进一步得以增 强。压缩能够进一步减少了存储成本, 还节省了存储带宽。 0004 多核处理器能够以相对低成本提供较高的处理能力。与基于集群的系统相比, 多 核系统的共享存储器可为访问所存储数据提供大大增强的灵活性。 随着对单个处理器核的 速度改善率的持续变慢, 并行化已经成为加速处理器密集型应用的性能的主要手段。
12、。尤其 对于数据库应用来说, 更好的性能具有多种实践意义中的一种或多种。附加处理能力可以 帮助处理迅速增长的数据集。提高效率还可以节省硬件和能量消耗, 以及带来并行运行附 加的新应用的能力。 例如, 通过做出战略决策的少数人容许较长的等待时间, 先前可用的决 策支持查询通常已经得以应用。利用低两个数量级的查询等待时间, 可以为期望同时或至 少几乎同时的查询响应的大量用户同时支持多个昂贵的查询, 例如, 如现在对网页搜索引 擎通常所期望的那样。 发明内容 0005 在一方面中, 一种计算机实现的方法, 包括接收查询请求, 该查询请求包括保存在 基于列的存储装置中的数据库查询的定义, 在查询的至少。
13、一部分中识别模式, 将所识别的 模式与预定义模式集合进行匹配, 生成执行查询的计划, 以及利用所生成的计划执行该查 询。 每个预定义模式与保留在库中的多个预编译的查询执行子组件的至少一个预编译的查 询执行子组件相关联。这种生成包括基于从定义获得的计划的伪代码表示, 将与匹配模式 相关联的预编译的查询执行子组件合并到计划中。 0006 在某些变化中, 作为选择可以将一个或多个下列特征归入任何可行的组合。基于 将所识别的模式与预定义模式相匹配, 可选地可以选择处理必须连接的多个表的最佳序列 来响应该查询, 并且可选地可以将计划配置为包括处理多个表的该最佳序列。可选地可以 根据该查询的定义推导出计划。
14、的伪代码表示。这种生成可选地可以进一步包括创建单函 数, 以调用预编译的查询执行组件和一个或多个其它预编译的查询执行组件来生成该计 划。该单函数可选地可以定义期望的结果, 至少部分基于匹配所识别模式可选地访问来自 两个或更多预定义并行化计划的集合中的预定义并行化计划。 预编译的查询执行子组件可 说 明 书 CN 103177057 A 4 2/10 页 5 选地可以包括以 C+ 表示的一个或多个预编译的 SQL 操作。 0007 本主题的一些实现可以包括, 但不限于, 描述了一致包含一个或多个特征的系统 和方法, 以及包含有形体现的机器可读介质的物品, 该机器可读介质可操作以引起一个或 多个机。
15、器 ( 例如, 计算机等 ) 产生此处描述的操作。类似的, 还描述了可以包含一个或多个 处理器以及耦合到该一个或多个处理器的一个或多个存储器的计算机系统。 可以包含计算 机可读存储介质的存储器可以包含、 编码、 存储等等引起一个或多个处理器执行一个或多 个此处描述操作的一个或多个程序。 与本主题的一个或多个实现一致的计算机实现的方法 可以由驻留在单一的计算机系统或多个计算机系统中的一个或多个数据处理器来实现。 这 种多个计算机系统可以被连接并通过一个或多个连接方式交换数据和 / 或命令或其它指 令等, 包含但不限于通过网络(例如, 因特网、 无线广域网、 局域网、 广域网、 有线网等等)连 接。
16、、 通过多个计算机系统中的一个或多个之间的直接连接等。 0008 在附图和下面的描述中阐述此处描述的主题的一个或多个变形的细节。 通过该描 述、 附图和权利要求, 此处描述的主题的其它特征和优点将是显而易见的。 尽管为了说明的 目的关于企业资源软件系统或其它商业软件方案或架构描述了本公开的主题的某些特征, 应当容易理解的是, 这些特征并不是用于限制的目的。本公开的权利要求书旨在定义要求 保护的主题的范围。 附图说明 0009 包含在说明书中并构成说明书一部分的附图, 显示了此处公开的主题的某些方 面, 并且与说明书一起帮助解释与公开的实施方式相关的一些原理。 0010 在附图中 : 0011 。
17、图 1 是示出了与当前主题的至少一些实现一致的商用软件系统架构的特征的示 图 ; 0012 图 2 是示出了与当前主题的至少一些实现一致的操作流程的示图 ; 0013 图 3 是示出了与当前主题的至少一些实现一致的具有一个或多个特征的方法的 各个方面的处理流程图 ; 0014 图 4 是示出了与当前主题的至少一些实现一致的数据库管理系统架构的特征的 示图 ; 0015 图 5 是示出了与当前主题的至少一些实现一致的另一数据库管理系统架构的特 征的示图 ; 0016 图6是示出了与当前主题的至少一些实现一致的多租户(multi-tenancy)数据库 结构的特征的示图 ; 0017 当实用时, 。
18、类似的参考数字表示类似的结构、 特征或元件。 具体实施方式 0018 在先前的可用方法中, 查询的执行通常包括生成查询计划。典型的查询计划生成 多个中间结果并可包括长系列的递归特征 ( 例如 “FOR” 或 “LOOP” 或 “DO” 声明 ), 其需要多 次扫描数据库返回所请求的结果。 在多核处理器系统中这种方法非常难以使用并且还难以 优化查询执行。 与当前主题的一个或多个实现一致的方法、 系统、 制品等可以连同其它可能 说 明 书 CN 103177057 A 5 3/10 页 6 的优点一起, 提供并行的基于主存储器的数据库应用的改善的性能, 例如从SAP AG(沃尔多 夫, 德国 ) 。
19、获得的在内存计算引擎 (In-Memory Computing Engine, IMCE)。在某些例子中, 通过基于传入的查询请求中所提供的查询定义的模式分析的结果来汇编预先编码的 “伪代 码 (pseudo-code)” 操作码等, 可以避免昂贵的多次递归以及大量中间结果的生成。当前主 题的某些实现能够在扫描表的次数大大减少的情况下生成结果, 而不需要多次递归, 由此 显著地提高查询执行速度和系统资源使用。在某些例子中, 可以只需要单次扫描。 0019 在现代的共享存储机器上, 例如具有高速缓存相关非一致存储器架构 (cache-coherent non-uniform memory arc。
20、hitectures, CC-NUMA) 的那些机器, 通过优选 地将存储器存取定位于直接附接于处理器套接字的 RAM 模块有可能减少存储带宽瓶颈。当 前可用的数据库管理系统被认为使用显式访问模式不利于本地存储器节点访问。 一种当前 可用的选择涉及使用逐页统计高速缓存失配 (miss) 来留下这种判定给操作系统。然而, 现 行的系统看起来缺少必要的硬件支持以实现这种方法。 0020 当前主题的实现能够可选择地用在具有多个套接字的共享存储器上, 每个共享存 储机器包含具有很多核且同时执行线程的多核处理器。 每个套接字可以具有各自的本地连 接的主存储器。 访问其它套接字的存储器可以产生相对于使用本。
21、地存储器进行访问的性能 代价。可以包括复杂分级结构的高速缓存。随着高速缓存的大小的增加, 等待时间可以增 加, 并且更多的线程共享这种高速缓存的相同实例。 0021 当前主题的实现可以将决策支持查询中所涉及的计算效率提高为比先前可用方 法提高一个到两个数量级, 决策支持查询是例如 TPC 基准 TMH(TPCBenchmarkTMH, TPC-H, 其从加利福尼亚州旧金山的事务处理性能委员会获得 )。基于列的内存存储设备和现代的 多核处理器, 优选具有大型主存储器, 可以与此处所述的那些高度调整的算法定结合 (din conjunction) 使用, 以提供足够使能同时或几乎同时传送有关可以保。
22、存在系统存储器内的 所有数据的结果的综合性能。相应地, 当前主题的实现可用于驱动非常灵活的决策支持系 统, 而不对预先排列的集合 ( 例如数据立方体 ) 进行限制。通过当前主题的实现支持的实 时或接近实时查询通常可以用于很宽范围内的应用, 而不产生无法承受的计算成本和能量 消耗。与此处所述的那些特征相似的特征可以用于结合通常使用与 SQL 相比很低级别的软 件库查询的静态数据库, 以及适当的 SQL 查询编译器生成的 C+( 或其它语言 ) 查询。 0022 在基于列的存储装置的某些实现中, 可以将对数据库的插入和删除被缓存到小型 的动态增量数据库或增量分区中。可以将新的或已更新的记录插入到增。
23、量分区中, 而不是 插入到主分区的列、 表或数据库中, 从而主分区可以保持压缩结构以最大化对于列、 表或数 据库中的数据的搜索效率。 将新的或已更新的记录直接插入到压缩主分区中通常是不可能 的, 因为这种压缩改变了列的结构。为此列中当前数据的搜索需要在遍历一个或多个增量 分区之后遍历一个或多个主分区。 因此查询可构成为从独立的查询分别到主数据库和增量 数据库或增量分区。有时合并主数据库和增量数据库或增量分区, 例如当增量在大小上显 著增长以致妨碍搜索效率时。在接收到查询请求时, 可以需要加入主数据库和增量数据库 产生的结果。 0023 为了允许更大数据库的交互等待时间, 可采用与当前主题的一个。
24、或多个实现一致 的多核服务器的集群。通过复制能够在非分布式系统中随机进行访问的更小的数据库关 系, 在这种并行化系统中可以维持相对较低的处理开销。可以将更大的数据库关系大致均 说 明 书 CN 103177057 A 6 4/10 页 7 匀地分布到多核系统的集群结点上, 多核系统的集群结点可以被并行地扫描。还可以采用 混合系统来以合理的成本处理更大数据库, 在混合系统中将不常使用的列保存在磁盘 ( 例 如硬盘、 固态驱动器等等 ) 上。 0024 与当前主题的实现一致的数据库模式可以包括, 但是不局限于, 雪花型模式、 星型 模式等等的通用化。 在某些例子中, 这种模式的表格关系可以形成非循。
25、环有向图(directed acyclic graph)G, 其中两个结点 R 和 U 之间的边 (R, U) 表示关系 R 元组引用关系 U 元组。 图不必形成树。在非循环有向图 G 中的路径可以指定经由键间接引用操作序列访问数据的 方式。从结点 R 的角度来看, 可以将非循环有向图 G 视为闭包关系 (closure relation)R* 的紧凑表示, 闭包关系 R* 包含起始于 R 的每条路径的属性。在雪花型模式中, 模式非循环 有向图 G 可以是树。在星型模式中, 树具有 1 的深度。 0025 可以将数据库的一个或多个列分成块, 块可以被循环式分配到 NUMA 机器的每个 套接字的。
26、本地存储器。分块可提高高速缓存的效率, 同时循环式分配可提供大致相等负载 的存储体, 每个存储体具有充分大范围的可能访问的列。 应注意的是, 为每个局部存储器将 列简单地分成段会产生不能接受的性能, 因为许多查询仅仅是在列的子范围上做它们的大 部分工作。可以透明地处理存储块到套接字的分配。例如, 本申请可使用连续的存储范围, 因为这种范围可以是虚拟的从而可以进一步由操作系统将其变换为物理存储。 可以由系统 调用 ( 例如在 Linux 系统上 ) 等等修改从虚拟地址到物理地址的分配, 使得物理地址指向 正确的套接字。 当此范围还被用作并行扫描时, 对于存储块的大小, 可使用系统页面大小的 倍数。
27、。 0026 索引数据结构可以运行对模式图进行有效导航。 与当前主题的实现兼容的索引数 据结构的例子可包括, 但是不局限于, 一个或多个前向索引、 索引分类关系、 倒排索引、 倒置 文本索引等等。 0027 对于其值与有序列相关的列, 为每个块存储最小值和最大值。例如, 在示例性的 TPC-H 数据库中, 发货日期、 提交日期和接收日期离线项目与订购日期强相关, 订购日期是 主要排序条件。这种优化仅仅会引起可以忽略的存储开销, 因为每个数据块只存储两个附 加值。在选中处于范围 a, b 内的列的各行时, 对于每个块可适用五种情况之一 : (1) 如果 min a 并且 max b, 则选定所有。
28、行 ; (2) 如果 min b 或者 max a, 则不选定行 ; (3) 如 果 min a 并且 max a, b, 则只检查 b ; (4) 如果 min a, b 并且 max b, 则只检 查 a ; (5) 如果 min a 并且 max b, 则需要检查是否 a 且 b。除最后一种情况之 外, 通过这种方法能够获得优势。在前两种情况中, 根本不需要接触这些值, 这可以节省存 储器带宽。 0028 可替换地, 构成为连接的复杂组合的许多 SQL 查询能够被视为简单的对闭包关系 R*的select-from-where查询并可以通过扫描关系R和通过明确地使用前向索引跟随路径 来访问。
29、对应于模式图中路径的属性来实现。 然而, 有效地完成这些操作可以需要多种优化。 例如, 可以使用并行化, 其中可将给定范围的列切分以扫描到小范围(块)中并可将块作为 任务分配给不同线程。 对于小范围, 这些块仅仅需要存储块的小部分, 以提供足够的并行化 和负载平衡。 在NUMA感知的系统中, 决不可能会可靠地分配线程给CPU, 因此难以确保所访 问的存储器驻留在本地套接字上。 0029 为了克服这种限制, 与当前主题的实现一致的NUMA感知调度器(此处被称为NBB) 说 明 书 CN 103177057 A 7 5/10 页 8 可一样使用与线程构建块 (Threaded Building B。
30、lock, TBB, 从加利福尼亚州圣克拉拉的英 特尔公司获取)相同的接口并可基于POSDC(Portable Operating System Interface, 可移 植操作系统接口 ) 线程。NBB 的实现可以为每个套接字管理一个任务池, 其可包含来自多 个查询的任务。 工作者线程可被固定到特定的套接字上并可以尝试执行来自它们本地任务 队列的任务。如果这样的任务对线程不可以, 则可以允许套接字提供来自远距离套接字的 “窃取 (steal)” 块。 0030 常规格式的 where 子句查询可限制实际促进输出的元组集合。这种限制往往是多 个判定的结合。在列存储数据库中, 测试这些判定的顺。
31、序可以是影响性能的重要因素。首 先测试最有限制性的判定通常是有帮助的。 然而, 还必须考虑评估判定的成本, 尤其是对所 涉及数据的访问成本。因此, 选择测试条件依照的最优顺序可以是重要的调整事项。 0031 访问由路径P定义的R*的属性的成本不仅仅取决于路径的长度, 还取决于所涉及 物理列的大小。 也就是说, 小的列可以往往适合高速缓存, 而大的列可以频繁地引起附加的 高速缓存故障。例如, 在 TPC-H 中, 访问利用供应商直接存储的属性还是访问利用供应商的 状态存储的属性几乎没有差别 - 状态维度表的 25 个条目易于适应高速缓存。 0032 当扫描位压缩的列时, 可展开扫描循环以便在所展。
32、开循环的每次迭代之后已经使 用了整数个机器字。在许多查询中, 可将相当大部分的执行时间花费在数据的一次 ( 最内 部 ) 循环迭代上并对其进行处理。在循环内的指令常常可以是互相依赖的并且必须以某一 顺序被执行, 其可以引起丢失处理器周期。通过展开循环, 可以允许编译器将指令重新排 序, 从而潜在地允许每周期更大数量的指令。一般说来, 展开的计数不应该过大, 因为循环 的代码应该有利地适应相应处理器核的第一级 (L1) 高速缓存。在某些例子, 可使用展开计 数 8。 0033 决策支持查询可通过交换操作和关联操作减少大的数据集, 例如在大量数值上的 计数、 总和、 最小化、 最大化等等。对于许多。
33、查询, 产生的结果数目可充分小, 以至可为参与 到计算中的每个线程计算局部结果表。在某些情况下, 这种结果甚至可以适应每个相应处 理器核的第一级 (L1) 高速缓存。只有在进程结束时, 才可以将局部结果合并成总结果。依 照此方式, 可以避免不必要的和昂贵的同步开销。为了接收总结果, 可为成对保存的结果 (并行)将两个局部结果合并成单个结果。 相应地, 在某些实现中接收总结果的并行步骤的 数目可以使用如这里描述的调度框架来表示为 log2( 线程数 )。如果所产生的结果不适 应第二级 (L2) 高速缓存, 我们可以使用不同的方法 ( 例如, 在 TPC-H 中的查询 10 和 15 不 适应L2。
34、高速缓存)。 在这种情况下, 可将最终结果表划分为不同部分, 使得这些部分中的每 一个适应 L2 高速缓存。在一种示例性的实现中, 可以使用 256 个部分并将其基于 ( 哈希, hash) 键的最高有效位进行划分。聚合可以在两次扫描中完成或者可选地在多于两次扫描 中完成。 0034 在第一次扫描中, 每个线程可以通过各自的部分对输入排序。 具体来讲, 每个线程 可以处理输入块并将每行 ( 键和值 ) 复制到对应最终部分结果部分的数组。为了最小化同 步, 每个线程可为每个结果部分保留自己的数组。 在某些例子中, 如果复制比之后接着的指 针更昂贵, 则可以期望仅仅复制到行的指针。在第二次扫描中,。
35、 线程可逐部地产生最终结 果。对于每个部分, 一个线程可处理每个线程对应数组的各行并将它们直接聚合到最终结 果表中。此处, 由于各部分是分开的, 不需要同步。此外, 结果部分保存在高速缓存中, 因此 说 明 书 CN 103177057 A 8 6/10 页 9 聚合非常有效。 0035 为了获得全部性能, 应该仔细执行存储器分配。 应注意的是, 要聚合的每行有利地 被复制一次 ( 或至少是指针 )。预先不知道要被复制到数组中的行的数目。这会导致过度 的动态存储分配需求, 其在许多情况下可在线程之间被同步, 因此明显降低了性能。 为了克 服这种问题, 线程局部存储器池可被用于保留多个存储器组块。
36、 (chunk), 其会在不同查询间 被重新使用。在某些例子中, 使用线程局部存储器池的性能增益大于因子 2。 0036 一个例证性例子涉及完成对来自闭包关系 R* 的元组的计算, 其涉及高度选择性 的判定P, 高度选择性的判定P仅仅依赖于闭包关系U*, 并且其中索引倒置从R到U的路径。 不是扫描 R 和完成对来自 U* 的属性的昂贵的间接访问, 这有助于扫描 U 和使用索引来只检 索那些满足判定 P 的 R 元组。使用倒排索引可以以两级粒度展现并行度 - 当扫描 U 时和当 扫描用于特定的元组 u U 的倒排表时。 0037 除了索引的这种最通用的标准使用之外, 还可以组合多个索引结果。当索。
37、引对于 多个充分选择性的判定可用时, 可以直接计算索引结果的交集。对于倒排索引数据结构而 言, 这可以是从信息检索获知的标准操作。特别地, 如果适当地表示倒排表, 则可以与小集 合成比例地及时计算成对交集。 还可以有效地交叉从关系分类和混合情况中获得的间隔的 集合。 0038 在完成对来自闭包关系 R* 的元组计算的例子中, 其涉及计算某些判定或仅依赖 于闭包关系 U* 中数据的值 x, 闭包关系 U* 包含远少于 R 的元组, 有可能对于预先计算这些 值并廉价地将他们存储在临时列 X 中。如果评估 x 是比访问 X 更加昂贵, 则这种方法是有 益的, 其对于非常简单的计算是真正公平的。例如,。
38、 如果 x 是判定, 则 X 仅仅是更容易适应 高速缓存的位数组。在某些实现中, 如果计算涉及复杂的字符串操作 ( 例如在 TPC-H 查询 13 中 ), 这种技术是尤其有用的。 0039 对于按照排序次序只输出 k 个最大或最小结果的查询而言, 避免排序所有结果或 避免消耗大量临时存储器是有利的。如果临时结果的数目超过 k 达某一因子 ( 例如 4), 可 以通过略去不必要的结果来避免这些步骤。Boyer-Moore 算法的快速实现可用于没有有效 索引的实例中的字符串匹配问题。 0040 关于日期的最大判定可以简化为在整数之间进行比较。 通过下列与当前主题的实 现一致的方法可以提供一种非常。
39、快速的途径, 以从表示为自 1970 年 1 月 1 日 ( 或任意其他 开始日期 ) 以来的天数 d 的日期中提取出年 y, 而不存储完整的查找表。 0041 y YTd 8.base+(d&255) YTd 8.offset) 0042 其中预先计算的表 YTi 存储一年的一天 256i ; 以及这年这天 256i 之外剩下的 天数。应注意的是, 通常这种表可适应 L1 高速缓存。可以用类似的方式提取月份或一月之 内的日子。 0043 图 1 示出了能够实现当前主题的一个或多个特征的系统示图。计算系统 102 可以 包括一核或多核软件平台模块 104, 该一核或多核软件平台模块 104 提。
40、供商用软件系统或 包括数据库管理特征的其它软件的一个或多个特征。 计算系统还可以聚合或者以其他方式 提供网关, 经由该网关用户可以访问由一个或多个外部软件组件 106 提供的功能。一个或 多个客户机 108 可以访问计算系统, 或经由直接连接、 本地终端或通过网络 110( 例如局域 网、 广域网、 无线网络、 互联网等等 )。 说 明 书 CN 103177057 A 9 7/10 页 10 0044 查询调度器112或其它可比较的功能体可访问库114, 库114包括预编译的查询子 组件 116 的库和模式定义 120 的集合。查询调度器 112 可处理与从客户端 108 接收的查询 相关联。
41、的查询定义的一个或多个部分。这种处理可包括将一个或多个部分与模式定义 120 的集合中的一个或多个模式定义相匹配, 以及从库 116 中检索用于执行所请求查询的查询 计划中所包含的相关的预编译的查询子组件。查询引擎 122 可以执行关于可由计算系统 102 访问的一个或多个数据库 124 上的查询计划, 以便返回响应于查询请求的结果。 0045 图 2 示出了举例说明处理的示图 200, 该处理包括查询定义 202, 将模式匹配 204 与模式定义 120 一起应用, 从查询组建库 116 中选择一个或多个预编译的查询组件 206, 此 后汇编查询执行计划 210。 0046 图 3 示出了举。
42、例说明方法特征的处理流程图 300, 一个或多个该方法特征可以包 含于当前主题的实现中。在 302, 可接收包括存在于基于列的存储装置中的数据库查询定 义的查询要求, 例如利用查询调度器 112。在 304, 在查询的至少一部分中识别模式之后, 在 306 将所识别的模式与预定义模式的集合相匹配, 其中每个预定义模式与保留在库中的多 个预编译的查询执行的子组件中的至少一个预编译的查询执行子组件相关联。 在310, 基于 从定义导出的计划的伪代码表示, 至少部分地通过将与所匹配的模式相关联的预编译的查 询执行子组件合并到计划中以生成执行查询的计划。在 312 可以使用所生成的计划执行查 询。 0。
43、047 在某些实现中, 在具体的、 频繁重复的查询操作中使用的查询子组件可以包括伪 代码, 该伪代码是预先准备的、 预编译的 ( 例如在运行时间之前 ) 并保存在库中。当接收到 查询请求时, 查询调度器 112 可完成操作, 该操作可以包括识别查询定义或至少部分查询 定义中的模式, 以及基于那些模式通过汇编一个或多个预定义、 预编译的代码段生成查询 执行计划。与某些实现一致的查询调度器 112 既可以访问本地存储器又可以访问有关其它 处理器核或套接字的存储器。 0048 对于给定查询, 多个选择通常可以用来实现该执行。许多查询需要两个或更多表 之间的一个或多个连接 (join)。在当前主题的实。
44、现中, 可进一步将模式识别应用到确定连 接的优先次序或其它数据库操作, 其代替创建必须保持和 / 或传送到其它线程的多个中间 结果, 优化单次扫描中查询的整体。 模式识别可以在查询的多个子部分上执行, 并且可用于 识别预编译的查询执行子组件和 / 或连接或为查询的每个部分进行优化的其它操作次序。 0049 当前主题的实现能够非常快速地使用并行化框架编译查询。 预编译的查询执行子 组件 ( 例如优化代码段 ) 的库可以减少甚至消除对一些这种编译的需要。依照此方式, 可 以显著地减少在查询执行时需要编译的查询部分。因此能生成相对简单的单函数, 来调用 一个或多个预编译的查询执行组件以生成用于执行的。
45、查询计划。 单函数可以定义期望的结 果, 并能够访问两个或更多预定并行化计划的集合中的预定并行化计划。 0050 与常规数据库不同, 常规数据库可以包括所存储的用来完成利用 SQL 或另一种高 级数据库语言不易于完成的操作步骤的集合, 当前主题的实现可以包括用于快速执行的用 C+或其它程序设计语言表示的预编译的SQL操作。 举例来说, 可用处理机的低级特征(如 NUMA 感知数据布局 ; 单指令多数据 (SIMD) 指令 ; 并行化 ; 线程调度 ; 压缩 ( 或解压缩 ) ; 数 据布局等 ) 可被封装在预编译的通用 C+ 段的库中。应用程序员的查询编译器可以在不了 解机器的细节或多核编程的。
46、情况下生成查询。通过重新编译, 这些查询代码可以适用于不 说 明 书 CN 103177057 A 10 8/10 页 11 同平台。 0051 本主题的各种实现中的一种可能的使用可以包括处理企业资源计划 (ERP) 系统、 其它商业软件架构或其它数据密集计算应用程序或软件架构。在一些例子中, 这样的应用 可以被提供为单独的定制的软件安装, 其运行于在特定组织的控制下的一个或多个处理器 上。这种安排对于具有非常复杂的内部信息技术 (IT) 人员的大规模组织来说非常有效, 以 及对于需要可观的资本投资到计算硬件和咨询服务以定制商业上可获得的商业软件方案 用于与特定组织的业务流程和功能一起工作是可。
47、实行的人来说是非常有效的。图 1 的图表 描述了这种系统的例子。 0052 可选地或者另外地, 可以把表或表内的范围分配到被分配到不同主机的不同的数 据库分区, 例如数据分布和 / 或可规划原因。图 4 显示了与包含用于可规划原因的数据分 布的实施一致的企业资源系统架构 400 的例子。这样的配置可以用于具有高性能要求的大 型、 内部或独立系统。每个数据服务器进程 402 及其相关数据分区 404 可以被分配到离散 的主机 406。主机 406 可以是具有一个或多个物理处理器的独立机器或者是如图 4 所示的 在大系统 302 上的虚拟机。图 4 中标记为名称服务器 412 的中央组件了解该系统。
48、的技术以 及如何分布数据。在具有数据分布的系统中, 名称服务器了解表或表的分区定位在哪个数 据服务器进程 402 上。一个或多个客户机 414( 例如客户机 108) 可以通过直接连接或者通 过网络 416 访问名称服务器 412。 0053 在数据分布情景中, 分区可以明智表 (table wise) 完成或者还通过分离表来完 成。使用明智表 (table wise) 分区, 名称服务器基于当前的表的分布 ( 分配到每个数据库 服务器进程 402 的表的数量 ) 将新的表分配到数据库服务器进程 402。然后用于该表的数 据会仅仅驻留在数据库服务器进程402上。 还可能指定, 表是在多个数据库。
49、服务器进程402 上被分离。名称服务器 412 可选择地基于由应用程序指定的大小估计来对表进行分区。当 记录被插入到分离的表中时, 可以基于名称服务器信息将记录分布到其它数据库服务器进 程 402。 0054 较小的组织也可以从商业软件功能的使用中获益。然而, 这样的组织可能缺少使 用单独商业软件架构产品所必需的必要的硬件资源、 IT 支持、 和 / 或咨询预算, 并且在一些 情况下可以更加有效地由软件即服务 (SaaS) 安排进行服务, 在软件即服务安排中商业软 件系统架构被托管在诸如服务器的计算硬件上以及数据存储库被远离该组织的地点而进 行维护并由授权用户通过瘦客户端, 例如网络浏览器, 通过网络进行访问。 0055 在商业软件系统的服务被提供于多个组织中的每一个组织的软件交付配置中, 所 述服务被托管于仅仅为该组织可访问的专用系统, 在该专用系统中的软件安装可以以类似 于上述单独的、 定制的本地运行在组织的硬件之上的软件安装的方式进行定制和配。