一种数据库缓存管理方法及一种数据库服务器的制作方法

文档序号:6605774阅读:138来源:国知局
专利名称:一种数据库缓存管理方法及一种数据库服务器的制作方法
技术领域
本申请涉及数据库技术领域,尤其涉及一种数据库管理方法及一种服务器。
背景技术
随着互联网的发展,数据库的访问量也不断增长。若访问量很大或者访问时间较为集中,数据库响应的效率就会降低。为了提高响应效率,在现有的数据库服务器中,一般会为数据设置页缓存(page buffer),页缓存供数据库中的各个数据表共同使用,用于存放访问比较频繁的热点数据。其中,页缓存资源被分割成多个大小相同的页,页的大小由管理员设置,一般可以为2K,4K,8K……。在一个页单位中,一般都存储有多条数据记录(每条数据记录对应于数据表的一行)。而在页缓存中,页的大小是内存空间分配和回收的基本单位,也是数据读写的基本单位。因此,为了有效利用页缓存资源,在实际操作中的做法,往往是将包含有多条记录的整张数据表(或整张数据表的一部分)写入缓存页,相应的更新或删除缓存数据的操作,也需要一次性对一个页单位中的多个单位进行更新或删除。可见,现有的数据库服务器缓存方式灵活性较差,即使仅有少量热点数据发生变化,也需要对整页的缓存内容进行更新,造成缓存数据实际利用率低下,并且需要频繁对缓存内容进行更新。

发明内容
本申请实施例的目的是提供一种数据库缓存管理方法及一种数据库服务器,以提高数据库服务器缓存的利用率,降低对缓存的更新频率。技术方案如下一种数据库缓存管理方法,所述方法包括预先为数据库中的数据表建立记录缓存,所述记录缓存以数据行为单位进行数据读写;当接收到客户端的数据查询请求时,在所述记录缓存中查找所请求的数据;若查找失败,则在所述数据库的页缓存中查找所请求的数据;将在所述记录缓存或所述页缓存中查找到的数据返回至客户端。一种数据库服务器,包括记录缓存建立单元,用于预先为数据库中的数据表建立记录缓存,所述记录缓存以数据行为单位进行数据读写;第一查找单元,用于当接收到客户端的数据查询请求时,在所述记录缓存中查找所请求的数据;第二查找单元,用于当所述第一查找单元查找失败时,在所述数据库的页缓存中查找所请求的数据;查找响应单元,用于将在所述记录缓存或所述页缓存中查找到的数据返回至客户端。
可以看出,在本申请实施例中,在同一个数据库服务器中,包括两种缓存,其中,记录缓存是以数据行为单位进行数据读写,当仅有少量热点数据发生变化时,可以只对记录缓存进行更新,从而提高数据库服务器缓存的利用率,降低对缓存的更新频率。此外,由于记录缓存和页缓存都位于相同的数据库服务器,因此客户端只发送一次查询请求就可以获得相应的数据,不仅具有较高的访问效率,也节约了网络资源。


为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本申请实施例提供的一种数据库缓存管理方法流程图;图2为本申请实施例的数据库的记录缓存结构示意图;图3为本申请实施例提供的另一种数据库缓存管理方法流程图;图4为本申请实施例数据库服务器的一种结构示意图;图5为本申请实施例数据库服务器的另一种结构示意图。
具体实施例方式为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于本申请保护的范围。首先对本申请实施例的一种数据库缓存管理方法进行说明,参见图1所示,该方法包括以下步骤SlOl 预先为数据库中的数据表建立记录缓存,所述记录缓存以数据行为单位进行数据读写;S102:当接收到客户端的数据查询请求时,在所述记录缓存中查找所请求的数据;S103 若查找失败,则在所述数据库的页缓存中查找所请求的数据;S104 将在所述记录缓存或所述页缓存中查找到的数据返回至客户端。在本申请技术方案中,在同一数据库服务器中,包括两种缓存,一种缓存是页缓存,页缓存供数据库中的各个数据表共同使用,对于页缓存而言,页的大小是内存空间分配和回收的基本单位,也是数据读写的基本单位。另一种缓存称为记录缓存,记录缓存也是以页作为内存空间分配和回收的基本单位,但是其数据读写的基本单位为数据行,也即数据表中的行记录数据。用于记录缓存的页称为记录缓存页。应用本申请技术方案,当仅有少量热点数据发生变化时,可以只对记录缓存进行更新,从而提高数据库服务器缓存的利用率,降低对缓存的更新频率。另一方面,记录缓存和页缓存都位于相同的数据库服务器,因此客户端只发送一次查询请求就可以获得相应的数据,不仅具有较高的访问效率,也节约了网络资源。
根据实际的应用需求,可以为数据库中的每个数据表都建立记录缓存,也可以只为访问频率比较高的数据表建立记录缓存。记录缓存经常需要缓存不同大小的记录,即使在同一数据表中的记录是定长的, 在不同的表中的记录仍然可能是不定长的。为了提高内存空间的使用效率,可以根据记录的大小划分为不同的数量级,再为每个数量级的记录分别分配记录缓存页,其中,为不同数量级的记录分配的记录缓存页称为不同的页类。例如,数据表的记录大小为100 300字节,那么,可以为其分配两个页类,其中, 第一页类用于缓存100 200字节的数据,第二页类用于缓存200 300字节的数据。当然,上述实例仅用于示意性说明,可以理解的是,对于某个数据表而言,也可以只有一个页类或更多的页类。图2所示为本申请实施例的数据库的记录缓存结构示意图,数据库中包含多个数据表,每个数据表可以具有一个或多个页类,每一页类下也可以具有一个或多个记录缓存页。可见,在本申请方案中,一个记录缓存页只用于缓存某个表中特定大小的记录。图3所示为为本申请实施例提供的另一种数据库缓存管理方法流程图,包括以下步骤S301 预先为数据库中的数据表建立记录缓存对于访问量较大的数据,可以在服务器启动时为其建立记录缓存,而对于访问量较小的数据表,则可以不为其建立记录缓存。S302 动态配置数据库中的页缓存以及记录缓存的目标大小;页缓存以及各记录缓存使用统一的内存页池,页缓存以及各记录缓存都作为这个内存页池的一个用户,每个用户都会告知内存管理模块它的目标大小,内存页池的总大小即为各用户目标大小之和。在服务器运行的不同阶段,页缓存与各个记录缓存的最优内存配置也可能发生变化。其中,在服务器启动阶段,由于需要预热数据,可以为页缓存分配较多的内存空间。而当系统运行稳定之后,可以根据经验设置记录缓存和页缓存内存空间占用比为1 1。S303 接收客户端的数据查询请求;S304 在记录缓存中查找所请求的数据;本申请实施例的方案,是优先对记录缓存进行访问,因此记录缓存中被访问到的数据更能够体现当前的热点数据状况。其中,记录缓存中的数据还可能是从磁盘中直接添加的,因此在页缓存中并不存在这些数据。这种情况下,为了令页缓存中也能够存储较新的热点数据,也可以根据记录缓存的数据对页缓存的数据进行更新。其中,如果在记录缓存中查找到所请求的数据,可以进一步在记录缓存中对查找到的数据添加更新标志位;更新标志位的作用是标识该数据需要更新至页缓存中。在本申请实施例中,并不是在记录缓存查找到数据后立即对页缓存进行更新,而是预先设置一个更新周期,每隔一段时间,将记录缓存中带有更新标志位的数据以页为单位统一更新至页缓存,从而提高对页缓存数据的写入效率,也降低了页缓存的更新频率。其中,如果在记录缓存中查找到所请求的数据,可以进一步在记录缓存中对查找到的数据添加更新标志位;更新标志位的作用是标识该数据需要更新至页缓存中。在本申请实施例中,并不是在记录缓存查找到数据后立即对页缓存进行更新,而是预先设置一个更新周期,每隔一段时间,将记录缓存中带有更新标志位的数据以页为单位统一更新至页缓存,从而提高对页缓存数据的写入效率,也降低了页缓存的更新频率。S305 在页缓存中查找所请求的数据;如果在页缓存中查找到了所请求的数据,则执行S306,将数据返回至客户端,如果在页缓存中也无法查找到所请求的数据,说明当前还没有对这部分数据进行缓存,此时需要通过访问磁盘等方式获取数据,具体的获取方式这里不在详细说明。S306 向客户端返回数据。以上实施例介绍了本申请的缓存数据访问流程,下面将对记录缓存的数据添加方式进行说明。当出现新的热点数据时,需要将新的热点数据添加至记录缓存中,其中,根据S305 可知,新的热点数据可以是在页缓存中查找到的数据,也可以是在磁盘中查找到的数据。对于具有多个页类的数据表而言,需要将待添加的数据写入与其大小相应的页类,如果在相应页类的记录缓存中还有剩余空间,则直接将数据写入;如果相应页类的记录缓存空间已满,则需要对现有的记录缓存数据进行替换,替换的方式包括以下两种方式一在记录缓存中,选择与待添加数据具有相同数量级的数据进行替换;方式二 在记录缓存中,选择与待添加数据具有不同数量级的记录缓存页,回收该缓存页所占用的空间,利用所回收的空间为所述待添加数据分配新的记录缓存页,将所述待添加数据写入该新的记录缓存页。其中,方式一可以看做是对“记录”进行替换,而方式二可以看做是对“记录缓存页”进行替换。举例说明,某个数据表具有用于缓存100 200字节数据的第一页类、以及用于缓存200 300字节的第二页类,假设待添加的数据大小为160字节,那么方式一是将第一页类记录缓存页(100 200字节)中的某条数据删除,然后将待添加的数据(160字节)写入该记录缓存页,其中,所删除的数据一般是该记录缓存页中具有最小访问时间戳的数据;方式二是将某个第二页类记录缓存页QOO 300字节)的内存空间回收,将这部分空间重新分配为第一页类记录缓存页(100 200字节),然后将待添加的数据(160字节)写入该新分配的记录缓存页。具体替换方式的选择,可以采用预先设置的方式,也可以在使用过程中根据实际情况动态选择,下面对动态选择的方案做进一步的说明在动态选择替换方式时,应该综合考虑记录缓存页中各条记录被访问的综合情况。设对每条记录都记录一个最近访问时间戳,最理想的情况是若同级别记录的时间戳大于不同级别的记录缓存页中每条记录的时间戳,则显然应该替换记录缓存页,即上述的方式二。更为常见的情况是不同级别的记录缓存页中某些记录的时间戳在同级别记录时间戳之前,某些在其之后,这种情况下,可以统计记录缓存页内各记录访问时间戳的差异, 如果相差明显,则应该采用上述方式二,替换记录缓存页,这样有利于释放记录缓存页内那些不经常访问记录占用的空间,如果相差不明显则不应该替换记录缓存页。本申请实施例提供一种具体的方案是以记录缓存页内访问时间最早和最晚的两条记录的访问时间做为代表,估算该记录缓存页的整体访问频率,并采用以下策略决定是替换同级别记录(方式一)还是替换不同级别的记录缓存页(方式二)。首先定义记录的访问频率计算公式如下访问频率=1/(当前时间-记录访问时间戳)根据上述公式,可以计算得到与待添加数据具有相同数量级的记录数据的访问频率Free、不同数量级的记录缓存页中具有最小时间戳的记录的访问频率Fmin、以及具有最大时间戳的记录的访问频率Fmax (Fmin <= Fmax)。假设该记录缓存页的数据记录总量为 N,则可以估算该记录缓存页的访问频率Fpage为Fpage = (Fmin+Fmax) /2*N可见,当Free > Fpage时,显然应该选择方式二,即替换记录缓存页。但如果Free < Fpage时就替换记录,容易导致系统基本上倾向于选择替换记录,不利于实现不同级别记录空间之间的重分配。为了实现更为灵活的选择策略,可进一步引入一个可配置的替换控制参数 replace_page_ratio,其中 replace_page_ratio e (0,1],当Free > r印lace_page_ratio*Fpage时,选择方式二,即替换记录缓存页,否则选择方式一,即替换记录。此外,为了实现记录缓存数据的高效替换,可以采用页堆与页内LRU(最近最少使用)算法相结合的方法。一个记录缓存页内的记录维护成一个双向LRU链表,记录被访问时就移动到链表头,在记录缓存页头部维护链表首尾指针。这一双向链表的首尾指针都只用一个字节,为记录缓存页记录编号而不是偏移字节数。一个数据表中同一级别的各个缓存页组织成一个最小堆,各页的大小顺序由该页内访问时间戳最小的时间戳决定。为此在每个记录缓存页头部都会记录三个指针,即指向父节点和左右子节点,指针使用页号表示,这一最小堆称为最老缓存页堆。—个数据表中各级别缓存页最小堆的堆顶再组织成一个最小堆,大小顺序由上述的Fpage决定,这一最小堆的堆顶将成为记录缓存页替换时的候选。这一最小堆称为最低访问频繁缓存页堆。这样,首先通过记录缓存页最小堆找到包含访问时间戳最小记录所有记录缓存页,再根据页内LRU找到链表尾,就可以获取同级别中访问时间戳最小的记录用于替换。遍历各数据表最小堆的顶节点就可以获得用于替换的候选页。请参考图4,为本申请实施例提供的一种数据库管理的装置结构示意图,可以包括记录缓存建立单元410,用于预先为数据库中的数据表建立记录缓存,所述记录缓存以数据行为单位进行数据读写;第一查找单元420,用于当接收到客户端的数据查询请求时,在所述记录缓存中查找所请求的数据;第二查找单元430,用于当所述第一查找单元420查找失败时,在所述数据库的页缓存中查找所请求的数据;查找响应单元440,用于将在所述记录缓存或所述页缓存中查找到的数据返回至客户端。参见图5所示,所述服务器还可以包括
第一添加单元450,用于在记录缓存中对所述第一查找单元420查找到的数据添加更新标志位;周期性将记录缓存中带有更新标志位的数据统一更新至页缓存。第二添加单元460,用于向所述记录缓存中添加数据。其中,所述第二添加单元460,可以用于将所述第二查找单元在页缓存中查找到的数据添加至记录缓存中。所述第二添加单元460可以应用方式一或方式二向记录缓存中添加数据;所述方式一为在记录缓存中,选择与待添加数据具有相同数量级的记录数据进行替换;所述方式二为在记录缓存中,选择与待添加数据具有不同数量级的记录缓存页, 回收该缓存页所占用的空间,利用所回收的空间为所述待添加数据分配新的记录缓存页, 将所述待添加数据写入该新的记录缓存页。所述第二添加单元460,可以包括一方式选择子单元,用于获得与所述待添加数据具有相同数量级的记录数据的访问频率Free、以及与待添加数据具有不同数量级的记录缓存页的访问频率Fpage ;判断Free > replace_page_ratio*Fpage是否成立,如果是,则选择所述方式一,否则选择所述方式二 ;其中,replace_page_ratio ^ ] ^ ^^ , replace_page_ratio e (0,1]。Fpage = (Fmin+Fmax) /2*N ;Fmin为该记录缓存页中时间戳最早的数据的访问频率,Fmax为该记录缓存页中时间戳最晚的数据的访问频率,N为该记录缓存页的数据记录总量。为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备 (可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。本申请可用于众多通用或专用的计算系统环境或配置中。例如个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。 虽然通过实施例描绘了本申请,本领域普通技术人员知道,本申请有许多变形和变化而不脱离本申请的精神,希望所附的权利要求包括这些变形和变化而不脱离本申请的精神。
权利要求
1.一种数据库缓存管理方法,其特征在于,所述方法包括预先为数据库中的数据表建立记录缓存,所述记录缓存以数据行为单位进行数据读写;当接收到客户端的数据查询请求时,在所述记录缓存中查找所请求的数据; 若查找失败,则在所述数据库的页缓存中查找所请求的数据; 将在所述记录缓存或所述页缓存中查找到的数据返回至客户端。
2.根据权利要求1所述的方法,其特征在于,如果在所述记录缓存中查找到所请求的数据,则所述方法还包括在记录缓存中对查找到的数据添加更新标志位; 周期性将记录缓存中带有更新标志位的数据统一更新至页缓存。
3.根据权利要求1所述的方法,其特征在于,还包括 向所述记录缓存中添加数据。
4.根据权利要求3所述的方法,其特征在于,所述向记录缓存中添加数据,包括 将在页缓存中查找到的数据添加至记录缓存中。
5.根据权利要求3或4所述的方法,其特征在于,所述向记录缓存中添加数据,包括 方式一在记录缓存中,选择与待添加数据具有相同数量级的记录数据进行替换;或方式二 在记录缓存中,选择与待添加数据具有不同数量级的记录缓存页,回收该缓存页所占用的空间,利用所回收的空间为所述待添加数据分配新的记录缓存页,将所述待添加数据写入该新的记录缓存页。
6.根据权利要求5所述的方法,其特征在于,根据以下方法选择所述方式一或方式二 获得与所述待添加数据具有相同数量级的记录数据的访问频率Free、以及与待添加数据具有不同数量级的记录缓存页的访问频率Fpage ;判断Free > replace_page_ratio*Fpage是否成立,如果是,则选择所述方式一,否则选择所述方式二;其中 replace_page_ratio 为预设的替换控制参数,replace_page_ratio e (0,1]。
7.根据权利要求6所述的方法,其特征在于,所述与待添加数据具有不同数量级的记录缓存页的访问频率Fpage的获得方法为Fpage = (Fmin+Fmax)/2*N ;其中,Fmin为该记录缓存页中时间戳最早的数据的访问频率,Fmax为该记录缓存页中时间戳最晚的数据的访问频率,N为该记录缓存页的数据记录总量。
8.一种数据库服务器,其特征在于,包括记录缓存建立单元,用于预先为数据库中的数据表建立记录缓存,所述记录缓存以数据行为单位进行数据读写;第一查找单元,用于当接收到客户端的数据查询请求时,在所述记录缓存中查找所请求的数据;第二查找单元,用于当所述第一查找单元查找失败时,在所述数据库的页缓存中查找所请求的数据;查找响应单元,用于将在所述记录缓存或所述页缓存中查找到的数据返回至客户端。
9.根据权利要求7所述的服务器,其特征在于,所述服务器还包括第一添加单元,用于在记录缓存中对所述第一查找单元查找到的数据添加更新标志位;周期性将记录缓存中带有更新标志位的数据统一更新至页缓存。
10.根据权利要求7所述的服务器,其特征在于,还包括 第二添加单元,用于向所述记录缓存中添加数据。
11.根据权利要求10所述的服务器,其特征在于,所述第二添加单元,用于将所述第二查找单元在页缓存中查找到的数据添加至记录缓存中。
12.根据权利要求10或11所述的服务器,其特征在于,所述第二添加单元应用方式一或方式二向记录缓存中添加数据;所述方式一为在记录缓存中,选择与待添加数据具有相同数量级的记录数据进行替换;所述方式二为在记录缓存中,选择与待添加数据具有不同数量级的记录缓存页,回收该缓存页所占用的空间,利用所回收的空间为所述待添加数据分配新的记录缓存页,将所述待添加数据写入该新的记录缓存页。
13.根据权利要求12所述的服务器,其特征在于,所述第二添加单元,包括方式选择子单元,用于获得与所述待添加数据具有相同数量级的记录数据的访问频率Free、以及与待添加数据具有不同数量级的记录缓存页的访问频率Fpage ;判断Free > replace_page_ ratio^Fpage是否成立,如果是,则选择所述方式一,否则选择所述方式二 ;其中 replace_page_ratio 为预设的替换控制参数,replace_page_ratio e (0,1]。
14.根据权利要求13所述的服务器,其特征在于, Fpage = (Fmin+Fmax)/2*N ;其中,Fmin为该记录缓存页中时间戳最早的数据的访问频率,Fmax为该记录缓存页中时间戳最晚的数据的访问频率,N为该记录缓存页的数据记录总量。
全文摘要
本申请实施例公开了一种数据库缓存管理方法及一种数据库服务器。所述方法包括预先为数据库中的数据表建立记录缓存,所述记录缓存以数据行为单位进行数据读写;当接收到客户端的数据查询请求时,在所述记录缓存中查找所请求的数据;若查找失败,则在所述数据库的页缓存中查找所请求的数据;将在所述记录缓存或所述页缓存中查找到的数据返回至客户端。应用本申请方案,在同一个数据库服务器中,包括两种缓存,其中,记录缓存是以数据行为单位进行数据读写,当仅有少量热点数据发生变化时,可以只对记录缓存进行更新,从而提高数据库服务器缓存的利用率,降低对缓存的更新频率。
文档编号G06F17/30GK102331986SQ20101022518
公开日2012年1月25日 申请日期2010年7月12日 优先权日2010年7月12日
发明者张潇 申请人:阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1