管理数据库节点的制作方法

文档序号:9756901阅读:686来源:国知局
管理数据库节点的制作方法
【专利说明】
【背景技术】
[0001]在并发执行环境中,在大规模并行处理系统上处理数据库查询。在这样的环境中,多个数据库节点托管多个数据库的多个表,等等。投影是数据库表的所有数据的物理存储。投影包括分布于多个节点的多个段。段是数据的部分,通常由表中的列值规定。
[0002]通常,节点存储主投影和用于故障容错的好友投影的数据段。以此方式,如果节点出故障,可从集群中的另一个节点(作为备份的好友节点)获得停机节点上的数据段的复制。如此,当所有节点开机时,查询执行可使用所有可用资源。此外,当一个或多个节点停机时,一个或多个节点可承担双重职责:服务其自身的请求以及故障节点的请求。事实上,如果其存储器或其他资源耗尽,则由于节点正执行双重职责,好友节点会成为牺牲节点。在一个示例的环境中,期望的吞吐量下降大约N倍,其中N是同时进行的查询的总数。
【附图说明】
[0003]在下面的详细描述中且参照多个图描述一些示例,图中:
[0004]图1是根据示例的可用于管理数据库节点的示例数据库管理系统(DBMS)的框图;
[0005]图2是根据示例的示例分割环的框图;
[0006]图3是根据示例的示例分割环的框图;
[0007]图4是根据示例的用于管理数据库节点的示例方法的过程流程图;
[0008]图5是根据示例的可用于管理数据库节点的示例系统的框图;以及
[0009]图6是根据示例的示出存储适用于管理数据库节点的代码的示例有形的、非暂时性机器可读介质的框图。
【具体实施方式】
[0010]通常用结构化查询语言(例如,SQL)表达数据库查询。SQL是在关系型数据库管理系统(RDBMS)中管理数据的编程语言。SQL包括数据定义语言和数据操纵语言。SQL的范围包括数据插入、查询、更新和删除,模式创建和修改,以及数据访问控制。查询指定待访问的表、列,以及用于选择表中的行的谓词。
[0011]图1是根据示例的适用于管理数据库节点的DBMS100的框图。DBMS 100包括控制组织及其终端用户对数据库102的创建、维护、以及使用的计算机程序。DBMS 100包括数据库102、优化器104、以及牺牲器105。查询针对典型的关系型DBMS的特定数据库102进行,数据库102包括被组织成表、行、和列的数据。
[0012]优化器104可为生成每个查询的查询计划(未示出)的软件。查询计划描述处理查询的数据的特定算法,以及数据所位于的位置。在执行查询之前,优化器104识别待查询的特定数据驻留在哪。
[0013]优化器104在执行前编译每个查询。这使得优化器104能够确定托管特定数据段的数据库节点是否停机。如本文所用的,术语“停机节点”指已出故障或在某种程度上不能操作的节点。数据段是数据库102中的数据的特定部分。如果托管数据段的节点停机,优化器104尝试用好友节点替代停机节点的引用。好友节点是也托管数据段的备份节点。好友节点具有与停机节点上的数据段相同的数据段。在每个节点及对应的好友节点上以同样的方式分割数据段。注意到,还可使用段组。段组包括多个数据段。
[0014]在一个示例中,分割投影,使得每个节点具有一个或多个本地段。以此方式,如果存在单个的停机节点,则牺牲器106选择多个牺牲节点,每个仅承担一点工作,而不是一个牺牲节点承担故障节点上的每个段的双重职责。例如,如果每个节点具有四个本地段,可选择四个牺牲节点,其中每个节点执行五个段的工作价值。
[0015]投影设计108识别数据库表中的每个数据段的主投影以及好友投影。在一个节点上托管主投影的数据段,且在另一个节点上托管属于好友投影的数据段的副本。在投影的上下文中,标记主和好友是相对于访问属于这些投影的段的查询计划的。例如,对于给定的表t,优化器可选择投影pi为一些查询的主,而选择投影p2为其他查询的主。对于给定的表t,优化器104可选择主投影pi为一些查询的主,且在托管属于pi的段的节点出故障的事件中,优化器104可选择好友投影p2。
[0016]图2是根据示例的示例分割环200的框图。使用投影设计202表示分割环200。投影设计202表示为每个节点204示出的数据。环200包括通过网络206通信的数据库节点204。根据投影设计202,每个节点204规定节点号、主投影以及好友投影。例如,分割环200图示出节点I托管数据段I的主投影以及数据段8的好友投影。
[0017]优化器104用好友节点上对应的好友投影替换故障节点204的主投影。在一个实施例中,如果好友节点开机,牺牲器106向分割环200中的下一个节点204传送双重任务责任。例如,如果节点5停机,则不能从主投影获得段5。如此,从节点6上的好友投影访问段5。通常,选择节点6为牺牲节点。但是,在示例中,通过使用段6的备份投影替代主投影,节点7能够成为牺牲。可环绕该环传送这样的“推卸责任”,直至到达停机节点。在上面的示例中,可选择除了节点5之外的任何节点作为牺牲节点。
[0018]如果存在许多并发会话,可在其余的开机节点中随机选择牺牲节点。如本文所用的,术语“开机节点”指可操作的节点。以此方式,由于针对停机节点中的每个独立选择了单个好友投影,可改善集群上期望的吞吐量。注意到,图2仅表示分割环的一个可能的配置,且各种其他的配置是可能的。
[0019]在示例中,以此方式为节点停机故障管理数据库节点,改善了期望的吞吐量,使得如果存在m个并发的执行线程,且停机节点的可能牺牲列表具有长度V,则每个节点平均具有m+ceiling(m/v)个段(ceiling:向上舍入),而不是像传统方法那样具有2m个段。如果数据库节点204中的每个在每个段中分别包含相似的数据量,则性能大概改善2m/(m+m/v)倍。对于I个节点停机,V是N-1,其中N是集群中的总节点。如此,可实现2m/(m+ (m/(N-1)))倍,对于N = 40且m = 60,是1.96。对于两个出故障的节点停机,两个列表中更短的长度是V= ((m-d)/d)/2,且因此,可实现2m/(m+(m/( ((m_d)/d)/2))) = 1.84倍。一般来说,停机节点的特定模式对应于可能牺牲列表的集合,且相对于之前方法的期望的性能改善是2m/ (m+ceiling(m/v))倍,其中V是最短的可能牺牲列表的长度。这是不考虑其他因素的影响的长期平均,例如,缓冲区缓存的退化性能、由于更好的存储器利用而产生的改善性能、以及较少的I/O冲突。
[0020]在示例中,牺牲器106识别所选择好友策略的好友路径的可能牺牲节点204的集合。节点204包括按照好友路径的分割环200顺序的任意开机节点序列,始于满足停机节点的最小成本好友节点。由于可选择此集合中的任意节点来执行双重职责,因此这是“可能牺牲节点”的集合。分割环200上相邻停机节点之间的子序列中的每个定义可能牺牲节点的序列。
[0021]存在随机选择双重职责节点的几个好处。更多的节点涉及到承担停机节点的额外工作。由于工作随机分布于所有开机节点,因此响应时间比相同节点承担所有查询的额外工作的之前方法更快。用户并发运行查询增加了吞吐量。
[0022]图3是示例分割环300的框图。在分割环300中,投影设计302表示每个数据段。投影设计302规定数据段号、主路径、以及好友路径。主路径规定托管段η的主投影的节点。类似地,好友路径规定了托管段η的好友投影的节点。根据分割环300,如果节点4停机,则数据段4的主投影不可用。因此,使用(托管段4的好友投影的)节点2。
[0023]在示例中,牺牲器106构造将主投影节点映射到段组号的映射(本文称作主段)。可能牺牲节点的序列始于主投影上停机节点的段,其为4。应用以下序列,继续到但不包括停机的或在伪代码I中出现的下一节点:
[0024]primaryNodelnactive.: while(!isNodeDown(curNode)&&
[0025]!primaryNodelnactive.find(curNode)) {
[0026]potentialVictimNodesList.1nsert(curNode);curNode=
[0027]buddyNode[curSegment];/*n2*/curSegment =
[0028]primarySegment[curNode];/^segment I*/}
[0029]伪代码I
[°03°] 如果节点N开机,isNodeDown(N)函数返回真,否则返回假。如果curNode存在于primaryNodelnactive 列表中,primaryNodelnactive.find(curNode)返回真。primaryNodelnactive列表包括不从主投影访问任何数据段的所有开机节点。因此,primaryNodelnactive列表可包括替代从好友投影访问数据段的开机节点。一旦获取potentialVictimNodesList,可选择基于随机数的牺牲节点。buddyNode O是索引表示数据段号的矢量。buddyNode(索引)表示托管段号(“索引”)的节点。
[0031 ] 假设potentialVictimNodes的长度为M。在I
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1