著录项信息
专利名称 | 存储为行存储和列存储二者的混合数据库表 |
申请号 | CN201210399140.1 | 申请日期 | 2012-10-19 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2013-06-26 | 公开/公告号 | CN103177055A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F17/30 | IPC分类号 | G;0;6;F;1;7;/;3;0查看分类表>
|
申请人 | SAP股份公司 | 申请人地址 | 德国瓦尔多夫
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | SAP欧洲公司 | 当前权利人 | SAP欧洲公司 |
发明人 | Y.永;C.程;J.李;C.B.宋;Y.S.孔;S.Y.且 |
代理机构 | 北京市柳沈律师事务所 | 代理人 | 邵亚丽 |
摘要
混合数据库表被存储为行存储和列存储二者。一个或多个技术可以单独使用或组合使用,以便通过调节对处理密集型列存储数据的访问和/或调节处理密集型列存储数据的大小来提高混合表的性能。例如,在插入操作过程中,只有在已经考虑了某些过滤和/或边界条件之后才可以针对列存储数据搜索唯一性违背情况。在另一种技术中,混合表管理器可以基于诸如访问频率或者潜在的业务逻辑来控制将数据移动到列存储。在又一种技术中,混合表的查询可以仅在行存储数据的初始搜索没有返回结果之后才导致搜索列存储数据。
1.一种计算机实现的方法,包括:
在非临时性计算机可读存储介质中提供数据库,该数据库以应用层语言创建并且包括行分区的存储和列分区的存储;
使行引擎将新的记录插入到行分区的存储;
基于附加信息执行优化以确定唯一性违背相对于该记录可能存在;
当确定唯一性违背可能存在时,执行对于列分区的存储的搜索以确定唯一性违背相对于该记录是否存在;
接收对数据库的查询;
使用该查询执行对数据库的行分区的存储的搜索;
根据对于行分区的存储执行的搜索的分析,在优化担保的情况下,使用该查询来搜索列分区的存储;以及
返回搜索结果。
2.如权利要求1所述的计算机实现的方法,其中,所述优化包括利用闩锁释放结构保持列分区的存储中的唯一列的最小/最大值,以最小化争用。
3.如权利要求1所述的计算机实现的方法,其中,所述优化包括保持用于唯一列的过滤器。
4.如权利要求3所述的计算机实现的方法,其中,所述过滤器包括布隆过滤器。
5.如权利要求3所述的计算机实现的方法,其中,所述过滤器是可扩展的。
6.如权利要求3所述的计算机实现的方法,还包括,当数据从行分区的存储移动到列分区的存储时进行更新或再散列。
7.一种计算机实现的设备,该设备包括:
用于在非临时性计算机可读存储介质中提供数据库的装置,该数据库以应用层语言创建并且包括行分区的存储和列分区的存储;
用于使行引擎将新的记录插入到行分区的存储的装置;
用于基于附加信息执行优化以确定唯一性违背相对于该记录可能存在的装置;以及用于当确定唯一性违背可能存在时,执行对于列分区的存储的搜索以确定唯一性违背相对于该记录是否存在的装置;
用于接收对数据库的查询的装置;
用于使用该查询执行对数据库的行分区的存储的搜索的装置;
用于根据对于行分区的存储执行的搜索的分析,在优化担保的情况下,使用该查询来搜索列分区的存储的装置;以及
用于返回搜索结果的装置。
8.如权利要求7所述的设备,其中,所述优化包括利用闩锁释放结构保持列分区的存储中的唯一列的最小/最大值,以最小化争用。
9.如权利要求7所述的设备,其中,所述优化包括保持用于唯一列的过滤器。
10.如权利要求9所述的设备,其中,所述过滤器包括布隆过滤器。
11.如权利要求9所述的设备,其中,所述过滤器是可扩展的。
12.如权利要求9所述的设备,其中,所述设备还包括,用于当数据从行分区的存储移动到列分区的存储时进行更新或再散列的装置。
13.一种计算机系统,包括:
一个或多个处理器;
存储指令的存储器,当所述指令被所述一个或多个处理器运行时,该计算机系统被配置以:
接收将被插入到数据库中的新的记录,该数据库以应用层语言在非临时性存储介质中创建并且包括行分区的存储和列分区的存储;
使行引擎将新的记录插入到行分区的存储;
基于附加信息执行优化以确定唯一性违背相对于该记录可能存在;
当确定唯一性违背可能存在时,执行对于列分区的存储的搜索以确定唯一性违背相对于该记录是否存在;
接收对数据库的查询;
使用该查询执行对数据库的行分区的存储的搜索;
根据对于行分区的存储执行的搜索的分析,在优化担保的情况下,使用该查询来搜索列分区的存储;以及
返回搜索结果。
14.如权利要求13所述的计算机系统,其中,所述优化包括利用闩锁释放结构保持列分区的存储中的唯一列的最小/最大值,以最小化争用。
15.如权利要求13所述的计算机系统,其中,所述优化包括保持用于唯一列的过滤器。
16.如权利要求15所述的计算机系统,其中,所述过滤器包括布隆过滤器。
17.如权利要求15所述的计算机系统,其中,所述过滤器是可扩展的。
18.如权利要求15所述的计算机系统,其中,当所述指令被所述一个或多个处理器运行时,该计算机系统还被配置为,当数据从行分区的存储移动到列分区的存储时进行更新或再散列。
存储为行存储和列存储二者的混合数据库表\n技术领域\n[0001] 本发明涉及数据库中数据的存储,而且更具体地,涉及以混合表格式的数据库信息的存储。\n背景技术\n[0002] 除非另有说明,本节中所描述的方法不是本申请中的权利要求的现有技术,并且不承认由并入本节即表示现有技术。\n[0003] 数据库是以结构化的方式存储数据的电子编档系统。数据库中的主存储结构是表。数据库可以包含多个表,而且每个表可以容纳特定类型的信息。数据库表以水平行和垂直列来存储和组织数据。行通常对应于真实世界的实体或关系,其代表表中的单个记录。列可以指示这些实体或关系的特定属性,诸如“名称”、“地址”或“电话号码”。例如,X公司可以具有包含“客户”表的数据库,“客户”表列出了它的客户的名称、地址和电话号码。每一行可以代表单一的客户,而且列可以代表每个客户的名称、地址和电话号码。\n[0004] 数据库通常存储在一维的计算机存储器中。因此,二维的数据库表必须被映射为一维的数据结构以便存储在数据库中。一种映射方法涉及按行将表存储在数据库中(即,面向行的存储模型)。这种方法可以使关于单一的实体的信息保持在一起。例如,按行存储可以首先存储关于第一客户的所有信息,然后存储关于第二客户的所有信息,等等。可替换地,表可以被按行存储在数据库中(即,面向列的存储模型)。这种方法可以使不同实体的相同属性保持在一起。例如,按列存储可以首先存储所有客户的名称,然后存储所有客户的地址,等等。\n[0005] 数据通常必须以与它被存储的方式相同的方式从表中访问。也就是说,传统的计算机存储技术需要专用查询操作符(operator),其能够访问特定类型的存储模型。例如,行查询操作符用于处理以行格式的存储模型(row-formatted storage models)存储在数据库中的数据,而且列查询操作符用于处理以列格式的存储模型(column-formatted storage models)存储在数据库中的数据。\n[0006] 因而,选择使用哪种存储模型往往取决于数据将被如何使用。面向行的存储模型通常非常适用于事务查询。行存储格式将数据库行强调为可操作的元素,并且通常用于联机事务处理(On-Line Transaction Processing,OLTP),OLTP涉及相对较大数量的联机事务(行),而且每个事务的特征在于相对更多的数据类型(列)。\n[0007] 相比之下,面向列的存储模型一般适用于分析查询。列存储格式将数据库列强调为可操作的元素,并且通常用于关于可以包括基本数据类型的聚合的更少数量的数据类型(列)来对事务(行)总数的子集进行联机分析处理(On-Line Analytical Processing,OLAP)。以列存储格式的数据库表通常用于为了解决问题而对原始数据进行询问(interrogation)和分析,并用于规划形成业务智能(Business Intelligence,BI)效果的一部分。\n[0008] 总之,行存储可以用于检索单个记录,该记录包括许多具有主键条件(primary key condition)的列。列存储可以用于执行更复杂的功能,诸如对相对较小数量的列进行聚合/结合。\n[0009] 因此,传统的查询处理方案被绑定到正被查询的数据库的底层存储模型。然而,在现实中,具有以列格式的存储模型存储的某些数据的数据库可以被要求处理与该数据有关的事务查询,或者具有以行格式的存储模型存储的某些数据的数据库可以被要求处理与该数据有关的分析查询。例如,具有以行格式的存储模型存储的数据的数据库可以接收请求对该数据进行事务处理和分析处理的一组混合的查询。\n[0010] 行存储数据库表格式和列存储数据库表格式二者都提供各种好处。例如,行存储格式为数据提供现成的可扩展性,因为它预期越来越多的事务将需要存储在附加行中。然而,行存储表格式对于分析查询(例如,聚合、结合)而言是相对内存密集型(memory intensive)的,因为它垂直扫描表,这导致在水平存储数据时发生缓存未命中(cache miss)。\n[0011] 相反,列存储格式在允许涉及表结合和聚合的复杂的数据操作方面提供灵活性,以及通过允许利用字典编码对跨多个条目的数据类型内的压缩来提供相对较低的内存消耗。然而,列存储数据库格式通常不允许与行存储表一样容易地操作大量数据。\n[0012] 因此,行存储表用作逐行记录访问(诸如利用主键查找的单个记录选择)是更有效的。列存储表用作逐列记录访问(诸如单列聚合)是更好的。对于逐行记录访问,列存储表变为内存密集型,因为数据格式是以列存储的形式垂直组织的,从而在水平访问记录值时发生缓存未命中。对于逐行记录访问,行存储表变为内存密集型,因为数据格式是以行存储的形式水平组织的,从而当读取特定列值时发生缓存未命中。\n[0013] 尽管各种数据库表类型具有各种优点,但是传统上表在业务生命周期的任意时间点通常只能够以行存储或列存储。因此,本公开利用实现存储为行存储和列存储二者的混合数据库表的系统和方法来解决这个和其他问题。\n发明内容\n[0014] 混合数据库表被存储为行存储和列存储二者。一个或多个技术可以单独使用或组合使用,以便通过调节对处理密集型列存储数据的访问和/或调节处理密集型列存储数据的大小来提高混合表的性能。例如,在插入操作过程中,只有在已经考虑了某些过滤和/或边界条件之后才可以针对列存储数据搜索唯一性违背情况。在另一种技术中,混合表管理器可以基于诸如访问频率或者潜在的业务逻辑的考虑来控制将数据移动到列存储。根据又一种技术,混合表的查询可以导致仅在行存储数据的初始搜索没有返回结果之后才搜索列存储数据。\n[0015] 计算机实现的方法的实施例包括,在非临时性计算机可读存储介质中提供数据库,该数据库以应用层语言创建并且包括行分区的存储和列分区的存储。接收将被插入到该数据库中的新的记录。使行引擎将新的记录插入到行分区的存储。只有当存在唯一性约束时,才基于附加信息执行优化以检查唯一性违背情况。显示对包括新的记录的数据库的查询处理的结果。\n[0016] 一种具体实施用于执行方法的计算机程序的非临时性计算机可读存储介质的实施例包括,接收将被插入到数据库中的新的记录的方法,该数据库以应用层语言在非临时性存储介质中创建并且包括行分区的存储和列分区的存储。使行引擎将新的记录插入到行分区的存储。只有当存在唯一性约束时,才基于附加信息执行优化以检查唯一性违背情况。\n显示对包括新的记录的数据库的查询处理的结果。\n[0017] 计算机系统的实施例包括:一个或多个处理器;以及软件程序,其能够在所述计算机系统上运行。该软件程序被配置以接收将被插入到数据库中的新的记录,该数据库以应用层语言在非临时性存储介质中创建并且包括行分区的存储和列分区的存储。该计算机程序被配置以使行引擎将新的记录插入到行分区的存储,并且只有当存在唯一性约束时,才基于附加信息执行优化以检查唯一性违背情况。该计算机程序被配置以显示对包括新的记录的数据库的查询处理的结果。\n[0018] 在某些实施例中,优化包括利用闩锁释放结构保持列分区的存储中的唯一列的最小/最大值,以最小化争用。\n[0019] 根据一些实施例,优化包括保持用于唯一列的过滤器。在具体实施例之间,过滤器包括布隆过滤器。在某些实施例中,过滤器包是可扩展的。\n[0020] 某些实施例还可以包括,当数据从行分区的存储移动到列分区的存储时进行更新或再散列。\n[0021] 以下详细描述和附图提供了对本发明的性质和优点的更好理解。\n附图说明\n[0022] 图1示出了根据实施例的混合表的结构和操作的简化示意图;\n[0023] 图2示出了将新的记录插入混合表的实施例的简化示意图;\n[0024] 图2A示出了用于将新的记录插入混合表的实施例的处理流程的简化视图;\n[0025] 图3A将布隆过滤器的性能标绘为位/元素(bit/element)对散列函数的数量;\n[0026] 图3B针对可缩放的布隆过滤器标绘了内存大小对记录的数量;\n[0027] 图4是显示在利用不同数量线程的插入处理过程中、以每秒事务处理量\n(transactions per second,TPS)为单位的吞吐量的条形图;\n[0028] 图5示出了根据实施例的控制混合表中数据移动的简化视图;\n[0029] 图5A示出了在混合表的实施例中用于在行分区存储与列分区存储之间移动记录的处理流程的简化视图;\n[0030] 图6示出了根据页面级(page-level)访问统计管理来实施基于访问的数据移动策略的简化示意图;\n[0031] 图7示出了根据实施例的业务感知的(business-aware)数据移动策略的简化实施例;\n[0032] 图8示出了根据实施例的对混合数据库进行搜索操作的简化示意图;\n[0033] 图8A示出了用于搜索混合表的实施例的处理流程的简化视图;\n[0034] 图9示出了在单一混合表上进行简单搜索的简化示意图;\n[0035] 图10是简化的流程图,其示出如果有必要则采取列搜索,随后是行搜索结果和列搜索结果的合并;\n[0036] 图11示出了基于转换的连接操作的简化示意图;\n[0037] 图12示出了原生混合连接操作的简化示意图;\n[0038] 图13示出了原生混合连接操作的另一个视图;\n[0039] 图14示出可以被配置为实施混合数据库表的专用计算机器的硬件;\n[0040] 图15示出了计算机系统的示例;以及\n[0041] 图16针对传统的行和列存储表以及相应混合表的搜索性能标绘了吞吐量对连接的数量。\n具体实施方式\n[0042] 这里描述的是提供存储为行存储和列存储二者的混合数据库表的技术。单独使用或组合使用的某些技术通过限制对处理密集型(processing-intensive)列存储数据的访问和/或限制处理密集型列存储数据的大小来提高混合表的性能。\n[0043] 在下面的描述中,为了解释,阐述了实施例和具体细节以提供对各种实施例的透彻理解。然而,对本领域技术人员将显而易见的是,由权利要求限定的本发明可以单独包括这些实施例中的一些或所有特征,或者与下面描述的其它特征组合使用,并且可以进一步包括这里所描述的特征和构思的修改和等同物。\n[0044] 图1示出了根据实施例的混合表的简化示意图。混合表100包括第一数据存储102,其包括根据内存行分(in-memory row partition)存储的数据。混合表还包括第二数据存储106,其包括根据内存列分区(in-memory column partition)存储的数据。如上面提到的,与以行存储方向访问数据相比,以列存储方向访问数据是更加处理密集型的。\n[0045] 查询处理器108与混合表通信以分别利用行引擎107和列引擎109来执行行搜索和列搜索。行搜索结果110和列搜索结果112被返回到查询处理器,而且合并的查询搜索结果\n114被返回给用户。\n[0046] 图1中的箭头122示出将新的记录插入到混合表的功能。如下面详细描述的,这个插入功能能够被优化以提高混合表的性能。\n[0047] 图1还示出了,混合表中的数据可以从相对更新密集型(update-intensive)行分区方向被移动到相对读取密集型(read-intensive)列分区方向。数据管理器120负责这种数据移动,在某些情况下这可以采取到列表(column table)的异步事务批量数据移动的形式。\n[0048] 异步数据移动被设计成利用行分区和列分区二者的有利属性。从性能的角度来看,可能期望将刚插入的记录、经常更新的记录、和/或利用主键条件搜索的记录放置在行分区。期望将不经常更新的但有时聚合的记录放置在列分区。\n[0049] 从内存(memory)消耗的角度来看,可能期望将行分区维持为尽可能的小,因为行分区不被压缩。因此,相同记录量所消耗的内容通常大于列分区。\n[0050] 因此,混合表的实施例可以寻求避免牺牲OLTP性能(在行存储中保持相关数据),并且提高聚合性能(在列存储中保持稳定的(stable)、旧的(aged)用于聚合的数据),同时保持合理的内存消耗(例如,通过行/列边界管理)。\n[0051] 根据本发明的实施例的混合表可以提供某些潜在好处。特别是,存储在行存储方向中的数据的存在提供快速访问。存储在行存储方向中的数据适合利用搜索条件(例如,精确匹配(match)/范围(range))的单个表选择。因此,快速的“简单选择”查询可以用于访问行分区的数据存储。行分区的数据存储还提供可扩展的更新和搜索性能。\n[0052] 此外,行分区的数据存储的存在允许利用精益栈(lean stack)处理并发工作负载。以相对低的系统资源的消耗执行诸如插入、更新和删除、以及简单的搜索(精确匹配/范围)的功能的执行是可能的。而且,行引擎中的运行可以流水线化。\n[0053] 关于列存储数据,通过对列表进行字典编码可以减少内存消耗。列表还通过列引擎提供快速的OLAP处理。\n[0054] 本发明的实施例可以寻求通过限制对处理密集型列存储数据的访问和/或限制处理密集型列存储数据的大小来保持混合表的性能。这方面的一个示例能够在插入操作过程中发生,如图2所示。\n[0055] 特别地,图2示出了将新的记录插入混合表200的简化示意图。首先,新的记录202被插入与内存行分区数据存储206相关联的唯一(unique)行存储(RS)索引204。\n[0056] 根据具体实施例,在采取在列分区的数据存储208(处理密集型方面)中搜索每个值之前,为了检查唯一性违背情况(uniqueness violation),混合表首先基于附加信息执行优化209。\n[0057] 图2A示出了用于将新的记录插入混合表的实施例的处理流程250的简化视图。第一步骤252包括在非临时性计算机可读存储介质中提供数据库,该数据库以应用层语言创建并且包括行分区的存储和列分区的存储。第二步骤252包括接收将被插入到数据库中的新的记录。第三步骤256包括使行引擎根据行存储索引将新的记录插入到行分区的存储。第四步骤258包括基于附加信息执行优化以检查唯一性违背情况。第五步骤260包括,只有在优化担保(warrant)的情况下,才在列分区的存储中检查唯一性违背情况。第六步骤262包括显示对包括新的记录的数据库的查询进行处理的结果。\n[0058] 第一优化方法是利用闩锁释放结构(latch-free structure)保持列分区的唯一列(unique column)的最小/最大(min/max)值,以最小化争用。这种方法可能导致对于多列的唯一键的许多误命中(false hit)。\n[0059] 第二优化方法是保持用于唯一列的过滤器(诸如布隆(Bloom)过滤器)。这种过滤方法210是有益的,因为只有在数据从行存储方向移动到数据存储方向的时候,过滤器才需要更新或刷新。\n[0060] 特别是,布隆过滤器是有效地过滤掉不属于一组的任何元素的一种数据结构。布隆过滤器包括位向量和一组散列函数。如果布隆过滤器返回假(FALSE),则该元素绝对不是集合的成员。如果布隆过滤器返回真(TRUE),则该元素有可能在集合中。\n[0061] 图3A将布隆过滤器的性能标绘为位/元素对散列函数的数量,具有0.1的误报率(False Positive Rate,FPR)。FPR取决于散列函数的数量和元素的数量/(位向量的大小)。\n[0062] 在某些实施例中,通过使用布隆过滤器可以提高在插入处理过程中的混合表的性能。特别是,只有布隆过滤器返回TRUE时,才需要搜索列分区的数据存储中的值。\n[0063] 为了这个任务使用标准布隆过滤器可以消耗大量的内存。例如,标准布隆过滤器需要大约60MB以便为100万条记录保持FPR≤0.1。\n[0064] 因此,某些实施例可以采用可扩展的布隆过滤器(SBF),以便对混合表的插入处理执行优化。SBF是布隆过滤器的变体,其使用与已存储的元素的数量成比例的空间。SBF的查询时间遵从下列关系式:\n[0065] 查询时间=O(k log n),其中,\n[0066] k=散列函数的数量;以及\n[0067] n=记录的数量。\n[0068] 图3B针对FPR=0.1和k=3的SBF,标绘了内存大小对记录的数量。\n[0069] 利用SBF的优化插入处理能够导致混合表增强的性能。这将结合下面的示例进行讨论。\n[0070] 示例\n[0071] 80万条记录的数据总量被配置在六(6)个不同的表类型中:面向行(行,A);面向列(列,B);未过滤且80万条记录以行存储的混合(C);未过滤且80万条记录以列存储的混合(D);利用SBF且80万条记录以行存储的混合(E)以及利用SBF且80万条记录以列存储的混合(F)。\n[0072] 图4是显示在利用不同数量线程的插入处理过程中、以每秒事务处理量(TPS)为单位的吞吐量的条形图。混合表的性能能够通过与具有以行方向(最低处理密集型格式)存储的数据的表的比较来衡量。\n[0073] 图4表明,没有过滤(C,D)的情况下,混合表的插入处理性能只有行表(A)的插入处理性能的约1/3。相比之下,在使用SBF的(E,F)情况下,混合表显示了与行表(A)类似的插入处理性能,尽管事实上混合表的全部数据位于列分区的数据存储中。这代表显著的增强,使混合数据库表的性能类似于传统的行存储方式的性能。\n[0074] 虽然上述讨论集中在使用可扩展的布隆过滤器来优化混合表的性能,但是本发明并不限于这个特定的过滤器类型。可以采用用于快值存在检查(fast value existence checking)的不同类型的索引变体。实施例包括但不限于散列索引、B+树索引、csb+树索引、以及其他。\n[0075] 可以采用以提高混合表的性能的另一种技术是选择性地向/从列分区的数据存储移动记录,以控制它的大小。图5示出了根据实施例的控制混合表中数据移动的简化视图。\n[0076] 特别是,混合表管理器500负责根据数据移动策略来控制数据从内存行分区存储\n502到内存列分区存储504的移动。通过对数据的智能分区,选择性的数据移动可以允许快速OLTP处理,避免列分区访问。\n[0077] 图5A示出了在混合表的实施例中用于在行分区存储与列分区存储之间移动记录的处理流程550的简化视图。第一步骤552包括在非临时性计算机可读存储介质中提供数据库,该数据库以应用层语言创建并且包括行分区的存储和列分区的存储。第二步骤554包括提供数据移动管理器,其被配置为根据数据移动策略来执行数据从行分区的存储到列分区的存储的移动。第三步骤556包括当满足数据移动策略的条件时,使数据移动管理器自动地将记录从行分区的存储移动到列分区的存储。在可选的第四步骤558中,行分区的存储的搜索结果被返回给用户。\n[0078] 数据移动策略的一个示例是基于访问的。因为这样的数据移动策略不依赖于对业务规则(见下文)的知识,所以其可以用作默认的。\n[0079] 根据基于访问的数据移动策略,当行分区上的记录的数量超过定义的阈值时,混合表管理器将行分区上的一些部分的记录移动到列分区。这种基于访问的数据移动可以基于对已访问的记录保持的统计,从而当移动被触发时,具有较低的访问频率的记录被移动。\n每当数据移动完成时,访问统计可以被重置。\n[0080] 图6示出了根据页面级(page-level)访问统计管理来实施基于访问的数据移动策略600的简化示意图。行分区存储604中的多个页面602中的每一个都包括持续访问计数\n606。根据这种访问计数的相对较低数量,具有最少访问频率的页面可以被移到列分区数据存储。\n[0081] 在一些实施例中,由于粗粒度的访问统计管理,频繁访问的记录有可能被移出到列分区的存储。例如,一些特定的实施例可以执行页面级移动,而不是记录级管理,其中页面包括多个记录,多个记录中的一些被频繁访问而另一些未被频繁访问。这种方法是有可能的,虽然针对经常访问的记录可能发生不期望的数据移动。\n[0082] 可替换的数据移动策略可以基于业务概念,而不是访问频率。当业务语义(business semantic)已知时,这样的数据移动策略可以提供最佳的结果。\n[0083] 根据某些实施例,业务感知的数据移动可以采取基于条件的移动形式。在这种方法中,满足一定业务条件的记录可以被移出到列分区的存储。\n[0084] 在其它实施例中,业务感知的数据移动可以采取基于参考的移动形式。在这种方法中,当(参考表中的)相关记录被移出时,记录被移出到列分区的存储。\n[0085] 图7示出了业务感知的数据移动策略700的简化实施例。在这个示例中,关闭的销售文档被移动到列分区的数据存储。\n[0086] 在图7的示例中,对于销售文档表VBAK,如果GBSTK列的值是“C”,则它意味着闭合的文档。因此,移出条件可以被指定为GBSTK=“C”,以便只移出关闭的文档。通过将表之间的关系指定为移出条件,SD项目(VBAP)表和文档首标(VBUK)表中的关闭文档相关记录(Closed-document-related records)可以被相应地移出。在这里,MANDT和VBELN列被用于指定这种关系。\n[0087] 通过优化搜索功能也可以增强混合表的性能。图9示出了在单一混合表上进行简单搜索的简化示意图。具体而言,作为项目的一部分,对混合表902提出查询900。行存储(RS)906和列存储(CS)908的搜索结果的联合(union)904被返回给用户。\n[0088] 根据本发明的特定实施例,诸如边界条件的信息可以被引用以控制对列存储的数据的访问,从而最小化简单查询的列存储访问。图8示出了根据实施例的对混合数据库800进行搜索操作的简化示意图。\n[0089] 如在下面进一步详细描述的,搜索802最初可以在内存行分区的数据存储804上执行。只有在已经返回最初搜索802的结果时才做出是否执行对存储在内存列分区808中的值进行进一步搜索806的决定。\n[0090] 图8A示出了用于搜索混合表的实施例的处理流程850的简化视图。第一步骤852包括在非临时性计算机可读存储介质中提供数据库,该数据库以应用层语言创建并且包括行分区的存储和列分区的存储。第二步骤854包括接收来自用户的查询。第三步骤856包括基于所述查询来搜索行分区的存储。第四步骤858包括基于对行分区的存储的搜索来执行优化。第五步骤860包括只有在优化担保的情况下,才基于所述查询搜索列分区的存储。在第六步骤862中,基于所述查询的搜索结果被返回给用户。\n[0091] 如果优化担保,则对列存储数据的搜索可以出现在背景中,对用户是透明的。例如,涉及主键(PK)或唯一键(unique-key)的搜索可以最初只在较少的处理密集型行存储数据上运行。如果从这个最初搜索返回结果,那么就不需要采取还搜索列存储数据的处理密集型任务。图10的简化的流程图示出了混合数据库表搜索1000的实施例,其示出如果有必要则采取列搜索1002,随后是行搜索结果1006和列搜索结果的合并1004。\n[0092] 根据边界条件的过滤还可以用作混合表搜索中的优化技术。例如,为了控制对列存储数据的访问,列字典可以保持每个列分区的最小和最大值。然后,实际列存储数据的搜索可以被限制于仅满足过滤条件(例如,搜索条件)的分区。如果给定的过滤条件不需要列分区访问,则列分区的边界可以被保持以允许搜索优化(限制列分区访问)。\n[0093] 图16标绘了吞吐量(线程每秒,TPS)对连接的数量,以评估在传统的行和列存储表上执行的以及在根据实施例的相应混合表上执行的PK精确匹配搜索的性能。图16示出,利用PK剪枝优化(pruning optimization)搜索混合表导致混合表的吞吐量高于常规列存储表的吞吐量。\n[0094] 更复杂的搜索可以适于多个混合数据库表。特别是,这种复杂的搜索可以涉及表的连接(join)操作。\n[0095] 可以用于多个混合表的复杂搜索的一种技术是基于转换的连接。这种基于转换的连接在2010年12月30日提交的、题为“Processing Database Queries Using Format Conversion(使用格式转换处理数据库查询)”的第12/982,673号美国专利申请中详细公开,并且出于所有目的,其整体通过引用合并于此。\n[0096] 图11示出了基于转换的连接操作1100的简化示意图。特别是,这种方法对于分割表(split table)借用(leverage)列连接1102。行表作为分区。这种方法使用即时(on-the-fly)字典生成和字典缓存。\n[0097] 可以用于多个混合表的复杂搜索的可替换的技术是混合的连接操作,其访问以其原生(native)行存储方向或列存储方向存储的数据。这种原生混合连接方法在2011年12月\n12日提交的、题为“Mixed Join of Row and Column Database Tables in Native Orientation(原生方向的行和列数据库表的混合连接)”的第13/323,530号美国专利申请中详细公开,并且出于所有目的,其整体通过引用合并于此。\n[0098] 图12示出了原生混合连接操作1200的简化示意图。这种方法利用列字典作为索引。连接操作的修剪基于使用列字典索引作为数据边界进行过滤来实现。\n[0099] 图13示出了原生混合连接操作1300的另一个视图,其使用列字典作为索引。首先,记录在行表中被迭代。下一步涉及针对每个连接条件的列字典查找。在第三步中,匹配的记录被返回。\n[0100] 根据原生混合连接方法,通过在迭代行表时使用列字典查找,实现了没有结果具体化(result materialization)。这还允许使用行标识符的流水线运行。\n[0101] 对于多列连接处理,如果存在连接属性(concatenated attribute)或外部键,则可以实现完全键匹配。逐列匹配是可能的。\n[0102] 图14示出可以被配置为执行根据某些实施例的混合数据库表的专用计算机器的硬件。\n[0103] 特别是,计算机系统1401包括处理器1402,其与非临时性计算机可读存储介质\n1403电通信。这种计算机可读存储介质具有存储在其上的代码1405,代码1405对应于内存行分区。代码1404对应于内存列分区,内存行分区和内存列分区两者都可以作为根据上面已经描述的实施例的混合表的一部分进行访问。系统还可以包括对应于如上已经示出和描述的数据移动管理器的代码。\n[0104] 这里描述的装置、方法和技术可以被实现为在一个或多个计算机上运行的计算机程序(软件)。计算机程序还可以被存储在非临时性计算机可读介质上。非临时性计算机可读介质可以包括用于执行所述处理的指令。\n[0105] 计算机系统可以包括软件服务器。许多软件服务器一起可以形成利用软件程序编程的计算机系统的集群或逻辑网络,所述软件程序相互通信并且一起工作以处理请求。\n[0106] 示例性计算机系统1510在图15中示出。计算机系统1510包括总线1505或其他用于对信息进行通信的通信机制,以及与总线1505耦接的用于处理信息的处理器1501。\n[0107] 计算机系统1510还包括与总线1505耦接的存储器1502,用于存储将被处理器1501执行的信息和指令,例如,包括用于执行如上所述的技术的信息和指令。这个存储器还可以用于在将被处理器1501运行的指令的运行过程中,存储变量或其它中间信息。这个存储器的可能的实现可以是,但不限于,随机存取存储器(RAM)、只读存储器(ROM)、或两者。\n[0108] 存储设备1503还被提供以用于存储信息和指令。存储设备的常见形式包括,例如,硬盘驱动器、磁盘、光盘、CD-ROM、DVD、闪存、USB存储卡、或者计算机可以读取的任何其它介质。\n[0109] 例如,存储设备1503可以包括用于执行上述技术的源代码、二进制代码或软件文件。存储设备和存储器是计算机可读介质的两个示例。\n[0110] 计算机系统1510可以经由总线1505耦接到诸如阴极射线管(CRT)或液晶显示器(LCD)的显示器1512,以用于向计算机用户显示信息。诸如键盘和/或鼠标的输入设备1511耦接到总线1505,以用于将信息和命令选择从用户通信给处理器1501。这些组件的组合允许用户与系统通信。在一些系统中,总线1505可以被划分为多个专用总线。\n[0111] 计算机系统1510还包括与总线1505耦接的网络接口1504。网络接口1504可以在计算机系统1510和本地网络1520之间提供双向数据通信。例如,网络接口1504可以是数字用户线(DSL)或调制解调器,以便通过电话线提供数据通信连接。网络接口的另一个示例是局域网(LAN)卡,以便提供到可兼容LAN的数据通信连接。无线链接是另一个示例。在任何这样的实现中,网络接口1404发送和接收携带代表各种类型信息的数字数据流的电、电磁或光信号。\n[0112] 计算机系统1510可以通过网络接口1504在本地网络1520、内联网或互联网1530上发送和接收信息,包括消息或其他接口动作。对于本地网络,计算机系统1510可以与诸如服务器1515的多个其他计算机机器通信。因此,计算机系统1510以及由服务器1515代表的服务器计算机系统可以形成云计算网络,其可以利用这里所描述的过程进行编程。\n[0113] 在涉及互联网的示例中,软件组件或服务可以跨网络驻留在多个不同的计算机系统1510或服务器1531至1535上。例如,上面描述的过程可以在一个或多个服务器上实现。服务器1531可以通过互联网1530、本地网络1520和网络接口1504将来自一个组件的动作或消息传输给计算机系统1510上的组件。例如,上述软件组件和过程可以在任何计算机系统上实现,并且可以跨网络发送和/或接收信息。\n[0114] 以上描述示出了本发明的各种实施例以及如何可以实现本发明的各个方面的示例。以上示例和实施例不应被视为唯一的实施例,而且被呈现以用于说明由以下权利要求所限定的本发明的灵活性和优点。基于以上公开和以下权利要求,其他安排、实施例、实现和等同物将对本领域技术人员是显而易见的,而且可以使用而不脱离由权利要求限定的本发明的精神和范围。
法律信息
- 2017-09-05
- 2014-11-26
著录事项变更
申请人由SAP股份公司变更为SAP欧洲公司
地址由德国瓦尔多夫变更为德国瓦尔多夫
- 2014-11-26
实质审查的生效
IPC(主分类): G06F 17/30
专利申请号: 201210399140.1
申请日: 2012.10.19
- 2013-06-26
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2010-09-08
|
2008-09-22
| | |
2
| | 暂无 |
1996-03-19
| | |
3
| |
2008-07-09
|
2007-01-05
| | |
4
| |
2007-12-19
|
2006-06-16
| | |
5
| |
2008-05-14
|
2007-12-12
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |