数据库设备的制造方法_3

文档序号:9326877阅读:来源:国知局
留用于组值列表编号表和值编号调整值表的区域,作为用于管理各个线程的值列表的数据的临时数据区域。组值列表编号表和值编号调整值表的区域将在下文中详细描述。
[0091]接下来,数据处理器331进入用于产生最终更新数据的并行处理。如图9中所示,数据处理器331 (CPU核之一;线程A)将在更新部分区域3511中存储的更新数据转换成快速结构,并且将结果存储至更新部分区域3511。同样,线程B、C和D将在与各个线程对应的更新部分区域(3512至3514)中存储的更新数据转换成快速结构,并且将结果存储到相对应的更新部分区域(3512至3514)。在图9中,通过使用具有负号的编号,写入当执行删除时的操作列编号。此外,在图9中,通过使用执行处理的线程和在线程中的值编号,写入值编号。例如,在图9中所示的第九操作行中的值编号“A-2”代表了在线程A的值列表中第二个是该值。
[0092]接下来,如图10中所示,每个线程将更新数据的快速结构与现有表列数据的快速结构合并(参见图5中的列表价格列)。在合并过程中,现有表列数据被分配,以便处于与更新数据相同的数据范围。换言之,在根据值列表中的值而被分配给“6000或小于”、“6001至8000”、“8001至12000”和“12001或大于”之后,现有表列数据被合并。
[0093]具体而言,每个线程首先通过使用合并排序,将更新数据的快速结构的值列表与现有表列数据的值列表合并。随后,关于更新数据,在合并到合并后的操作列编号中的适当位置之前,每个线程复制操作列编号。同样,在合并到合并后的原始价格编号的适当位置之前,每个线程复制原始价格编号。通过该处理,产生了图10中所示的数据。该数据是用于执行目标范围的更新的基础数据。
[0094]当快速结构的合并,即部分值列表的合并完成时,每个线程将局部值的数目写入如图11所示的组值列表编号表(如上文所提及的在临时区域351中所保留的)。该处理由每个线程执行。换言之,已经完成部分值列表合并的线程将局部值的数目写入组值列表编号表,而不等到其他线程结束。该表待被用于产生最终的值编号。
[0095]例如,作为线程A合并的结果的部分值的数目是三。因此,线程A将“3”写入用于在组值列表编号表中的组编号A的位置。线程B、C和D执行相同操作。
[0096]接下来,基于完成的合并结果的操作列编号和原始价格编号以及更新前列表价格列,已经将局部部分数目写入组列表编号表的线程执行将新值编号填写适当位置的处理(在表列数据存储区域352中已预先保留了存储新值编号的区域,如上文所提及的)。该处理也由每个线程执行。下文将描述其中线程A首先执行填写新值编号的处理,作为一个示例。
[0097]参考图12,线程A首先将原始价格编号与待新写入的新值编号相关联的处理。在图12中,原始价格值1,即在更新前列表价格列中的值编号I对应于列编号6。因此,如图12A中所示的,线程A写入原始价格值I的局部值编号A-1,作为在新值编号中的第六个值。同样,原始价格编号2,即在更新前列表价格列中的值编号2对应于列编号3和5。因此,线程A写入原始价格编号2的局部值编号A-3作为新值编号中的第三和第五值。
[0098]接下来,线程A执行数据在操作列编号中的行的处理。参考图12,“_6”被写为操作列编号。如上文所述,赋予操作列编号的负号表示删除。因此,如图12B中所示,线程A删除在新值编号中的第六个值(将该值变为(空))。而且,“9”被写作操作列编号。因此,线程A将原始价格编号9的局部值编号A-2写作在新值编号中的第九个值。换言之,线程A添加A-2作为在新值编号中的第九个值。
[0099]线程B、C和D也执行相同处理。换言之,每个线程在原始价格编号执行处理之后,基于操作列编号执行处理。图12示出了其中线程A早于其他线程进入填写新值编号的处理的虚构的情况。然而,例如,线程B可以早于线程A进入上述处理。在这种情形下,线程A对于线程B已经执行处理的数据执行上述处理。
[0100]每个线程执行该处理。结果,新值编号的被填写的所有位置如图13所示。
[0101]因为每个线程如此填写新值编号,存在其中在另一线程打算填写新值编号的位置之前一个线程已经填写了新值编号的位置。例如,上述情形出现在当对于原始值编号的处理和对于操作列编号的处理被不同线程执行时,诸如当在更新前和更新后的值变化大时。在这种情形下,对于原始值编号的处理或者对于操作列编号的处理取决于执行各个处理的线程的处理而首先被执行。因此,在这种情形下,线程执行处理,以便当删除和更新具有操作列编号的记录时,重写,并且当从具有原始价格编号的记录复制时,不重写。通过这种优先地处理待更新的数据,确保一致性是可能的。
[0102]因此,在从更新数据的划分至与生成新值编号并行处理开始的时间段期间,每个线程可以不依赖于其他线程而执行处理。换言之,迄今为止,其线程是绝对安全的。
[0103]接下来,每个线程执行将以组编号写入的新值编号(以局部值编号写入的数据)转换成仅以编号写入的值编号(最终值编号)的处理。
[0104]具体而言,每个线程首先从组值列表编号表产生值编号调整值表。参考图13B,在本示例性实施例中所示的示例中,三个值存在于更新部分区域3511的线程A的值列表中。同样,两个值存在于线程B中,三个值存在于线程C中并且三个值存在于线程D中。然后,每个线程基于上述的值的数目计算调整值。例如,因为通过线程A更新的部分位于新值列表中第一位置,线程A获得了调整值O。而且,因为通过线程B更新的部分位于线程A所更新的部分后面,线程B获得了调整值3,其为线程A的值列表中的值的数目。同样,线程C获得了调整值5,其为在线程A和B的值列表中值的数目之和。然后,线程D获得了调整值8,其为在线程A、B和C的值列表中值的数目之和。
[0105]随后,每个线程通过使用获取的调整值更新通过线程计算的新值编号。换言之,每个线程将在线程中值列表中的值添加到获得的调整值,从而计算新的值编号并转换。例如,关于新值编号C-1,线程C将调整值5添加到值列表中的值1,从而获得6。结果,新值编号C-1被转换成新值编号6。通过由每个线程执行该处理,以组编号所写的新值编号被转换成仅以图13C中所示的编号所写的值编号。
[0106]如上文所述,基于在组值列表编号表中的值执行该处理。因此,该处理也可以以非如图13A所示的状态被执行,S卩,即使所有线程未填写新的值编号。例如,即使线程B正在填写新值编号,如果在组值列表编号表中的所有值被填写,已经填写新值编号的线程A可以执行上述转换处理。因此,如果在组值列表编号表中写入部分值的数目的处理,即在写入新的值编号之前执行的处理,已经完成,则每个线程可以进入转换处理,而不必等到其他线程完成写入新值编号的处理。换言之,该处理不需要严格等到各个线程同时完成该处理,虽然这种并不是绝对线程安全的。
[0107]此外,在完成通过各个线程的处理之后,通过连接由纵向顺序的各线程所产生的部分值列表,可能产生如图13C所示的新值列表。
[0108]作为该处理的结果,图14所示的最终更新结果被存储到表列数据存储区域352中。
[0109]在本示例性实施例中,为了易于管理交易,假定仅最终更新结果被存储在图6所示的表中。然而,本发明的实现方式可以不限于上述情形。换言之,更新数据可以包括用于相同列的多个更新。
[0110]然而,在该情形下,假定指示更新数据处理顺序的标识符等如在正常数据库所使用的方法中那样被采用。采用指示处理顺序的标识符等使得执行处理以便在将已经转换为快速结构的更新部分列存储到表列数据存储区域352时仅留下新数据(最后更新的数据)。因为该流程与一般交易中的相同,其具体描述省略。
[0111]这是对于本示例性实施例中数据库系统I的配置细节和由列存储数据库管理系统3所执行的处理的描述。接下来将描述列存储数据库管理系统3的操作。首先将描述以列存储数据库管理系统3的更新模式的操作。
[0112]参考图15,列存储数据库管理系统3接收由数据库客户端2传输的更新模式启动指令(S001)。结果,更新管理器334确定启动更新模式。
[0113]当更新模式启动时,从那时起所获取的更新数据通过数据分配器333被分配到各更新部分区域3511。换言之,当在更新模式期间接收更新数据时(S002),首先,查询执行部件33检查接收的更新数据的目标表是否是在更新模式启动之后的第一更新(S003)。在第一更新的情形下(S003,是),查询执行部件33的分配条件估计部件332检查表列数据统计信息区域342,并且检查目标表的列的柱状图(S004)。而且,数据处理器331确保与CPU核数目相同数目的更新部分区域3511。然后,更新数据通过数据分配器62被分配给各个更新部分区域3511(S006)。
[0114]另一方面,在更新模式启动后,更新数据的目标表不是第一更新的情形下(S003,否),对于柱状图的检查和更新部分区域3511的检查已经被完成。因此,数据分配器62执行对于各个更新部分区域3511的更新数据的分配处理。
[0115]被数据分配器62分配到各个更新部分区域3511的更新数据在各个更新部分区域3511中被汇集,直到更新模式结束。
[0116]在更新模式期间每次接收到更新数据时,执行该分配处理(S007)。
[0117]然后,列存储数据库管理系统3接收由数据库客户端2传输的更新模式结束指令(S008)。结果,更新管理器334确定结束更新模式。
[0118]当更新模式结束时,数据处理器331更新在更新部分区域3511中存储的更新数据的处理被启动(S009)。换言之,数据处理器331首先确保一个区域,以存储在表列数据存储区域352中新产生的记录数目相同数目的列编号和值列表。同样,数据处理器331确保用于组值列表编号表和值编号调整值表的区域,其是在临时区域351中用于管理各个线程中的值列表中数据的临时数据区域。然后,数据处理器331进入用于产生最终更新数据的并行处理。并行处理的结果是,更新数据被反应。
[0119]这是对以列存储数据库管理系统3更新模式操作的描述。接下来,将描述更新模式结束之后执行的更新操作。该更新以并行方式执行。因此,下文将描述该并行处理中一个县城的操作(数据处理器331的CPU核)。
[0120]参考图16,随着更新模式结束,线程将在相对应的更新部分区域3511中存储的更新数据转换成快速结构(SlOl)。然后,线程将通过转换获得的快速结构存储到更新部分区域3511中。
[0121]随后,线程将转换的更新数据的快速结构与现存表列数据的快速结构合并(S102)。具体而言,线程通过使用合并排序,首先将更新数据的快速结构的值列表与现有表列数据的值列表合并。随后,关于更新数据,在合并之后,合并到用于操作列编号的适当位置之前,线程复制操作的列编号。同样,在合并之后,合并到用于原始价格编号的适当位置之前,线程复制原始价格编号。由此,线程将更新数据的快速结构与现有表列数据的快速结构合并。
[0122]接下来,线程将作为更新数据的快速结构与现有表列数据的快速结构合并结果而产生的部分值的数目写入到组值列表编号表中(S103)。如上文所述,组值列表编号表存在于临时区域351中。
[0123]然后,基于合并结果的操作列
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1