修改根结点的方法和修改装置制造方法
【专利摘要】本发明实施例提供修改根结点的方法和修改装置。本发明修改根结点的方法,包括:接收根结点修改请求,根结点修改请求包含修改信息;根据修改信息,修改数据库的数据区域中的根结点;数据库包含了数据区域和通用区域,数据区域包含根结点,通用区域包含了第一映射页、第一映射页标识、第二映射页和第二映射页标识,第一映射页和第二映射页均为根结点的映射页;将修改后的根结点复制到数据库的通用区域中;在数据库的通用区域中,查询主映射页标识为第一映射页标识,确定第一映射页是主映射页;根据复制到通用区域中的修改后的根节点,将第二映射页替换为修改后的根结点,并修改主映射页标识为第二映射页标识。本发明提高了索引的并发处理的效率。
【专利说明】修改根结点的方法和修改装置
【技术领域】
[0001]本发明实施例涉及数据库技术,尤其涉及一种修改根结点的方法和修改装置。
【背景技术】
[0002]在现有技术中,一般都是通过索引技术来提高内存数据库的数据访问速度。索引类型有多种,比如多路搜索树(B*tree)索引和哈希(Hash)索引等。在B*tree中,每个结点包含了本结点所含关键字的个数、指向父结点的指针、关键字和关键字所指向孩子结点的指针,如果该结点没有父结点,即该结点为根结点时,则该结点不包含指向父结点的指针,如果该结点没有孩子结点,即该结点为叶子结点,叶子结点指向了该叶子关键字所指向的实际数据,孩子结点的所有关键字均不大于该孩子结点的指针所指向的父结点的关键字。
[0003]如图1所示,是一个典型的B*tree的范例,最上面一层的结点就是根结点,它是查询的入口,INF为无穷大值。例如:我们要在查询B*tree上查找key为28的值,首先在根结点上查找大于等于28中最小的关键字,该关键字是56,然后根据关键字为56的指向孩子结点的指针找到它的孩子结点,然后在这个孩子结点查找大于等于28中最小的关键字,该关键字是35,继续根据这个关键字为35所指向孩子结点的指针找到了关键字为35的孩子结点,从而在该孩子结点中查找到关键字为28的叶子结点。
[0004]从上述B*tree查找数值的过程来看,查询时首先从根结点开始查找,如果满足条件就继续找对应的key的孩子结点,因此这将导致了根结点必然成为热点,在数据库中,通常采用多读单写的并发机制,也就是加共享锁进行读,排他锁进行写,这样不同事务可以通过加共享锁对根结点进行多读,一个事务通过加排他锁对根结点进行单写。
[0005]然而一个事务中对根结点进行单写时,其它事务的读操作都不能进行,并且由于根结点是所有查询请求的开始,因此导致并发处理的效率会很低。
【发明内容】
[0006]本发明实施例提供一种修改根结点的方法和修改装置,实现数据库在受理查询请求时,仍然能够处理修改请求。
[0007]第一方面,本发明实施例提供一种修改装置,其特征在于,用于修改数据库中的根结点,包括:
[0008]接收模块,用于接收根结点修改请求,所述根结点修改请求包含修改信息,其中,数据库包含了数据区域和通用区域,所述数据区域包含了根结点,所述通用区域包含了第一映射页、第一映射页标识、第二映射页和第二映射页标识,所述第一映射页和所述第二映射页均为所述根结点的映射页;
[0009]修改模块,用于根据所述修改信息,修改数据库的数据区域中的根结点;
[0010]复制模块,用于将修改后的根结点复制到数据库的通用区域中;
[0011]确定模块,用于在所述数据库的通用区域中,查询主映射页标识为第一映射页标识,确定第一映射页是主映射页;
[0012]替换模块,用于根据复制到通用区域中的所述修改后的根节点,将第二映射页替换为所述修改后的根结点,并修改所述主映射页标识为第二映射页标识。
[0013]结合第一方面,在第一方面的第一种可能的实现方式中,替换模块,还用于在修改所述主映射页标识为第二映射页的标识后,以及当所述第一映射页当前受理的数据查询业务完成后,将当如的弟一映射页替换为所述修改后的根结点。
[0014]结合第一方面,在第一方面的第二种可能的实现方式中,上述修改装置还包括:查询模块,用于接收数据查询请求,查询主映射页标识为所述第二映射页标识,将所述数据查询请求发送给所述第二映射页,由所述第二映射页受理所述数据查询请求。
[0015]结合第一方面,在第一方面的第三种可能的实现方式中,上述修改装置还包括:锁处理模块,用于在接收根结点修改请求之后,在根结点上设置排他锁,在所述将当前的第二映射页替换为所述修改后的根结点之后,解除根结点的排他锁。
[0016]第二方面,本发明还提供了一种修改根结点的方法,包括:
[0017]接收根结点修改请求,所述根结点修改请求包含修改信息;
[0018]根据所述修改信息,修改数据库的数据区域中的根结点;所述数据库包含了数据区域和通用区域,所述数据区域包含根结点,所述通用区域包含了第一映射页、第一映射页标识、第二映射页和第二映射页标识,所述第一映射页和所述第二映射页均为所述根结点的映射页;
[0019]将修改后的根结点复制到数据库的通用区域中;
[0020]在所述数据库的通用区域中,查询主映射页标识为第一映射页标识,确定第一映射页是主映射页;
[0021]根据复制到所述通用区域中的所述修改后的根节点,将第二映射页替换为所述修改后的根结点,并修改所述主映射页标识为第二映射页标识。
[0022]结合第二方面,在第二方面的第一种可能的实现方式中,在修改所述主映射页标识为第二映射页的标识后,以及当所述第一映射页当前受理的数据查询业务完成后,将当前的第一映射页替换为所述修改后的根结点。
[0023]结合第二方面,在第二方面的第二种可能的实现方式中,上述方法还包括:接收数据查询请求,查询主映射页标识为所述第二映射页标识,将所述数据查询请求发送给所述第二映射页,由所述第二映射页受理所述数据查询请求。
[0024]结合第二方面,在第二方面的第三种可能的实现方式中,上述方法还包括:在接收根结点修改请求之后,在根结点上设置排他锁;在所述将当前的第二映射页替换为所述修改后的根结点之后,解除根结点的排他锁。
[0025]第三方面,本发明还提供了一种非易失性的计算机可读存储介质,该非易失性的计算机可读存储介质用于存储计算机可执行的程序代码,程序代码包括用于执行如第二方面,以及第二方面的第一种至第三种可能的实现方式中任意一项所述的方法的指令。
[0026]第四方面,本发明还提供了一种计算机程序,当所述计算机程序中的代码被计算机执行时用于实现如第二方面,以及第二方面的第一种至第三种可能的实现方式中任意一项所述的方法。
[0027]由于本发明实施例中,在通用区域中存储根结点对应的第一映射页和第二映射页,其中一个映射页作为主映射页,用于受理的数据访问业务,当根结点被修改后,并不需要对根结点进行加锁,仍然通过主映射页受理访问,并且先将非主映射页进行更新,然后将其非主映射页切换为主映射页,从而达到对主映射页的更新,进一步实现了数据库在受理查询请求时,仍然能够受理修改请求,提高数据库的并发处理的效率。
【专利附图】
【附图说明】
[0028]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0029]图1为现有技术中B*tree的结构示意图;
[0030]图2为本发明实施例提供的网络环境示意图;
[0031]图3为本发明实施例提供的处理装置的结构示意图;
[0032]图4为本发明实施例提供的修改根结点的方法的流程图;
[0033]图5为基于图1的B*tree修改后的结构示意图;
[0034]图6为本发明实施例提供的查询数据的方法的流程图。
【具体实施方式】
[0035]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0036]图2为本发明实施例的一个网络环境示意图。应用程序201指可提供各种特定功能的计算机程序,包括不限于计费应用,互联网浏览器,多媒体播放器等。应用程序可通过通信网络202访问数据库204,该数据库204具体可以是一个内存数据库(memorydatabase)。多个应用程序可使用应用中间件203与数据库204中的处理模块205的进行交互,从而访问或处理通用区域205或数据区域207的数据。数据库204包括了处理模块205,通用区域(general area) 206和数据区域(data area) 207。数据区域207存储了具体的数据和根结点,如本申请所涉及根结点、各个孩子结点以及具体的数据。通用区域206存储了数据库临时的管理数据,如本专利所涉及的第一映射页和第二映射页,第一映射页标识,第二映射页标识以及主映射页标识,其中第一映射页和第二映射页均是根结点的映射页,在同一时间内,他们其中的一个为主映射页,另一个为备映射页,主映射页和备映射页可以相互切换,主映射页用于受理数据查询业务,第一映射页和第二映射页中包含的数据和根结点包含的数据是相同的,因此当主映射页受理数据查询业务时,仍然按照现有技术的查询处理方式来进行。如果某个映射页为主映射页,那么主映射页标识就为该映射页的标识,例如:如果第一映射页为主映射页,那么此时的主映射页标识为第一映射页标识。第一映射页标识,第二映射页标识和主映射页标识均可以是一个数字,字母或者一段描述等,比如第一映射页标识为1,第二映射页标识为2,主映射页标识为m,当m = I时,就表示了该主映射页为第一映射页。当然也可以用一段文字来描述主映射页,例如:主映射页的标识为
I。进一步地,内存数据库204还与存储引擎208相连接。存储引擎207存储了持久化后的数据。内存数据库204可以将数据区域207中持久化的数据存储到存储引擎208,内存数据库204也可以从存储引擎208中获取数据。进一步的,处理模块205,可以具体的用于接收根结点修改请求,所述根结点修改请求包含修改信息;根据所述修改信息,修改数据库的数据区域中的根结点;将修改后的根结点复制到数据库的通用区域中;在所述数据库的通用区域中,查询主映射页标识为第一映射页标识,确定第一映射页是主映射页;将第二映射页替换为所述修改后的根结点,并修改所述主映射页标识为第二映射页标识。
[0037]如图3所示,本发明实施例还提供一种修改装置,该修改装置具体可以位于如图2所示的数据库内部的处理模块206上,该修改装置用于修改数据库中的根结点,包括:
[0038]接收模块31,用于接收根结点修改请求,所述根结点修改请求包含修改信息,其中,数据库包含了数据区域和通用区域,所述数据区域包含了根结点,所述通用区域包含了第一映射页、第一映射页标识、第二映射页和第二映射页标识,所述第一映射页和所述第二映射页均为所述根结点的映射页;
[0039]修改模块32,用于根据所述修改信息,修改数据库的数据区域中的根结点;
[0040]复制模块33,用于将修改后的根结点复制到数据库的通用区域中;
[0041]确定模块34,用于在所述数据库的通用区域中,查询主映射页标识为第一映射页标识,确定第一映射页是主映射页;
[0042]替换模块35,用于将第二映射页替换为所述修改后的根结点,并修改所述主映射页标识为第二映射页标识。
[0043]进一步的,替换模块35,还用于在修改所述主映射页标识为第二映射页的标识后,以及当所述第一映射页当前受理的数据查询业务完成后,将当前的第一映射页替换为所述修改后的根结点。
[0044]进一步的,该修改装置还可以用于数据查询,则该修改装置还包含查询模块36,用于接收数据查询请求,查询主映射页标识为所述第二映射页标识,将所述数据查询请求发送给所述第二映射页,由所述第二映射页受理所述数据查询请求。
[0045]进一步的,该修改装置还包括锁处理模块37,用于在接收根结点修改请求之后,在根结点上设置排他锁,这样就防止在修改根结点的同时,其它事务对该根节点的访问或者修改,从而保证根结点的数据一致性,在所述将当前的第二映射页替换为所述修改后的根结点之后,解除根结点的排他锁。
[0046]基于图2所示的网络环境基础上,以及基于图3的修改装置的基础上,图4为本发明修改根结点的方法实施例的流程图,包括:
[0047]步骤401、接收根结点修改请求,根结点修改请求包含修改信息。
[0048]具体的,应用程序向数据库的修改装置发送根结点修改请求,根结点修改请求包含修改信息,该修改信息可以是根结点修改的对象和值。
[0049]当然应用程序可以直接向修改装置发送根结点修改请求,也可以通过应用中间件向修改装置发送根结点修改请求。
[0050]步骤402、修改装置根据所述修改信息,修改数据库的数据区域中的根结点。
[0051]当修改装置需要对根结点进行修改时,修改装置需要对根结点设置排他锁,但是这个排他锁不影响数据查询,只是保证在一个时刻只有一个线程对这个根结点进行修改。数据库仍然可以通过根结点对应的映射页来进行数据查询处理。
[0052]步骤403、修改装置将修改后的根结点复制到数据库的通用区域中。
[0053]步骤404、修改装置在数据库的通用区域中,查询主映射页标识为第一映射页标识,确定第一映射页是主映射页。
[0054]步骤405、将第二映射页替换为修改后的根结点,并修改主映射页标识为第二映射页标识。
[0055]在步骤404中已经确定第一映射页是主映射页,也就是说,第二映射页不是主映射页。因此将当前的第二映射页替换为上述修改后的根结点,这样替换后的第二映射页的内容就和上述修改后的根结点完全一样了,进一步的,替换后的第二映射页就和数据区域中修改后的根结点就可以对应了。因此这样第二映射页就成为了主映射页,并开始受理数据查询业务。不管主映射页是第一映射页,还是第二映射页,主映射页是不能被修改的,也就是说主映射页是只读的,只有主映射页切换为备映射页,才可以被修改。
[0056]当主映射页标识为第二映射页的标识时,也就是说,此时第一映射页不是主映射页,第一映射页不受理数据查询业务,在第一映射页当前受理的数据查询业务完成后,修改装置将当前的第一映射页替换为上述修改后的根结点,这样替换后的第一映射页的内容就和上述修改后的根结点完全一样了,并且替换后的第一映射页就和数据区域中修改后的根结点就可以对应了。
[0057]当上述第一映射页和第二映射页的更新成功后,修改装置解除对根结点的排他锁。
[0058]具体的,下面结合一个具体的例子来说明上述修改根结点的方法,在如图1所示的B*tree的根结点上新增一个孩子结点,如图5所示,新增孩子结点的过程如下:
[0059]当一个结点(为方便描述,在后面将此结点称为原结点)满时,如果它的下一个兄弟结点未满,那么将一部分数据移到该下一个兄弟结点中,再在原结点插入关键字,因为兄弟结点的关键字范围改变了,所以最后修改父结点中兄弟结点的关键字;如果下一个兄弟也满了,则在原结点与兄弟结点之间增加新结点,并各复制1/3的数据到新结点,最后在父结点增加新结点的指针。
[0060]按照上述新增孩子结点的过程,在图1所示的B*tree基础上,新增关键字包括了78,80,85,86,89,得到了如图5所示的B*tree。现在介绍修改根结点的过程,其过程如下:
[0061]由于该根结点的一个孩子结点发生了变化,以及新增了一个孩子结点,因此需要在根结点上新增关键字77,该关键字的指针所指向的关键字为65,70,77的孩子结点,并将根结点中关键字INF的指针修改为指向关键字为85,INF的孩子结点,这样就修改了根结点。当根结点修改成功后,按照上述步骤403-405的过程修改通用区域的第一映射页和第二映射页。
[0062]由于本发明实施例中,在通用区域中存储根结点对应的第一映射页和第二映射页,其中一个映射页作为主映射页,用于受理的数据访问业务,当根结点被修改后,并不需要对根结点进行加锁,仍然通过主映射页受理访问,并且先将非主映射页进行更新,然后将其非主映射页切换为主映射页,从而达到对主映射页的更新。
[0063]图6为本发明基于图4的修改根结点的方法,本发明还提供查询数据的方法,包括:
[0064]步骤601、应用程序向数据库中的修改装置发送查询请求,该查询请求包含了查询的关键(key)值。
[0065]步骤602、修改装置接收了查询请求后,在通用区域中查询当前的主映射页的标识,例如:此时的主映射页标识为第二映射页标识,也就是说此时的第二映射页为主映射页。
[0066]步骤603、根据上述key值,修改装置在第二映射页中进行查询,获取到该key值在第二映射页上对应的key值,并获得该第二映射页上对应的key值所对应的所指向的第一孩子结点的指针。
[0067]当然如果该指针是一个具体地址也是可以的,这样就可以获得了该第一映射页上对应的key值所对应的所指向的第一孩子结点的地址。
[0068]步骤604、根据该第二映射页上对应的key值所对应的所指向的第一孩子结点的指针,查找到该第一孩子结点,如果该第一孩子结点是叶子结点,即该叶子结点上的关键字就是查询请求所包含的查询的关键字,即该叶子结点的关键字为查询的关键字,如果该第一孩子结点不是非叶子节点,则在第一孩子结点上进行查询,确定该查询的key值在该第一孩子结点上对应的key值,并获得该第一孩子结点上对应的key值所对应的所指向的第二孩子结点的指针。如果该第二孩子结点不是叶子结点,重复步骤604,直到找到的孩子结点是叶子结点为止。
[0069]如果上述查询请求,查询的是关键字所对应的数据,则还需要执行步骤605。
[0070]步骤605、修改装置根据该叶子结点的关键字,查找到该叶子结点的关键字所对应的实际数据。
[0071]下面结合图5的B*tree来说明查询数据的过程,假设图5的关键字为85,INF的孩子结点刚刚新增后,但是根结点还没有修改,或者根结点被修改但是当前的主映射页还没有进行相应修改时,此时修改装置接收了一个查询关键字为80的查询请求,根据该关键字为80,在当前的主映射页中进行查询,由于当前的主映射页只有关键字为27,56,INF,以及此时主映射页的内容还没有被相应修改,因此在根结点上查找大于等于80的关键字为INF,而关键字为INF对应的指针所指向的是关键字为65,70,77这一个孩子结点,因此获取到该关键字为65,70,77这一孩子结点的指针,根据该孩子结点的指针,查询关键字为65,70,77的结点,确定该结点上最大的关键字为77,而查询的关键字为80,确定该孩子结点的叶子结点的关键字均不是80,因此在该关键字为65,70,77的结点上查询该结点的下一个兄弟结点,通过该兄弟结点的指针,找到了关键字为85,INF的结点,在关键字为85,INF的结点上查询到关键字为80的叶子结点。
[0072]假设图5的关键字为85,INF的孩子结点新增后,当前的主映射页已经进行相应修改,此时修改装置接收了一个查询关键字为80的查询请求,根据该关键字为80,在当前的主映射页中进行查询,由于当前的主映射页包含了关键字为27,56,77,INF,因此在根结点上查找大于等于80的关键字为INF,而关键字为INF对应的指针所指向的是关键字为85,INF这一个孩子结点,在关键字为85,INF的结点上查询到关键字为80的叶子结点。
[0073]本发明实施例还提供了一种非易失性的计算机可读存储介质,该非易失性的计算机可读存储介质用于存储计算机可执行的程序代码,该程序代码包括用于执行如图4或图6所对应的实施例中的方法的指令。
[0074]本发明实施例还提供了一种计算机程序,当所述计算机程序中的代码被计算机执行时用于实现如如图4或图6所对应的实施例中的方法。
[0075]由于本发明实施例中,在通用区域中存储根结点对应的第一映射页和第二映射页,其中一个映射页作为主映射页,用于受理的数据访问业务,当根结点被修改后,并不需要对根结点进行加锁,仍然通过主映射页受理访问,并且先将非主映射页进行更新,然后将其非主映射页切换为主映射页,从而达到对主映射页的更新,进一步实现了数据库在受理查询请求时,仍然能够受理修改请求,提高数据库的并发处理的效率。
[0076]本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0077]最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
【权利要求】
1.一种修改装置,其特征在于,用于修改数据库中的根结点,包括: 接收模块,用于接收根结点修改请求,所述根结点修改请求包含修改信息,其中,数据库包含了数据区域和通用区域,所述数据区域包含了根结点,所述通用区域包含了第一映射页、第一映射页标识、第二映射页和第二映射页标识,所述第一映射页和所述第二映射页均为所述根结点的映射页; 修改模块,用于根据所述修改信息,修改数据库的数据区域中的根结点; 复制模块,用于将修改后的根结点复制到数据库的通用区域中; 确定模块,用于在所述数据库的通用区域中,查询主映射页标识为第一映射页标识,确定第一映射页是主映射页; 替换模块,用于根据复制到通用区域中的所述修改后的根节点,将第二映射页替换为所述修改后的根结点,并修改所述主映射页标识为第二映射页标识。
2.如权利要求1所述的修改装置,其特征在于,所述替换模块,还用于在修改所述主映射页标识为第二映射页的标识后,以及当所述第一映射页当前受理的数据查询业务完成后,将当前的第一映射页替换为所述修改后的根结点。
3.如权利要求1-2任一所述的修改装置,其特征在于,还包括:查询模块,用于接收数据查询请求,查询主映射页标识为所述第二映射页标识,将所述数据查询请求发送给所述第二映射页,由所述第二映射页受理所述数据查询请求。
4.如权利要求1所述的修改装置,其特征在于,还包括锁处理模块,用于在接收根结点修改请求之后,在根结点上设置排他锁,在所述将当前的第二映射页替换为所述修改后的根结点之后,解除根结点的排他锁。
5.—种修改根结点的方法,其特征在于,所述方法包括: 接收根结点修改请求,所述根结点修改请求包含修改信息; 根据所述修改信息,修改数据库的数据区域中的根结点;所述数据库包含了数据区域和通用区域,所述数据区域包含根结点,所述通用区域包含了第一映射页、第一映射页标识、第二映射页和第二映射页标识,所述第一映射页和所述第二映射页均为所述根结点的映射页; 将修改后的根结点复制到数据库的通用区域中; 在所述数据库的通用区域中,查询主映射页标识为第一映射页标识,确定第一映射页是主映射页; 根据复制到所述通用区域中的所述修改后的根节点,将第二映射页替换为所述修改后的根结点,并修改所述主映射页标识为第二映射页标识。
6.如权利要求5所述的方法,其特征在于,在修改所述主映射页标识为第二映射页的标识后,以及当所述第一映射页当前受理的数据查询业务完成后,将当前的第一映射页替换为所述修改后的根结点。
7.如权利要求5或6所述的方法,其特征在于,还包括:接收数据查询请求,查询主映射页标识为所述第二映射页标识,将所述数据查询请求发送给所述第二映射页,由所述第二映射页受理所述数据查询请求。
8.如权利要求5所述的方法,其特征在于,在接收根结点修改请求之后,还包括: 在根结点上设置排他锁。
9.如权利要求8所述的方法,其特征在于,在所述将当前的第二映射页替换为所述修改后的根结点之后,还包括: 解除根结点的排他锁。
10.一种非易失性的计算机可读存储介质,其特征在于,所述非易失性的计算机可读存储介质用于存储计算机可执行的程序代码,所述程序代码包括用于执行如权利要求5-9中任意一项所述的方法的指令。
11.一种计算机程序,其特征在于,当所述计算机程序中的代码被计算机执行时用于实现如权利要求5-9中任意一项所述的方法。
【文档编号】G06F17/30GK104285223SQ201380023564
【公开日】2015年1月14日 申请日期:2013年12月31日 优先权日:2013年12月31日
【发明者】梁远胜, 姚理, 王寄萱 申请人:华为技术有限公司