分布式内存数据库数据更新方法
技术领域
本发明涉及一种分布式内存数据库的数据更新方法,该数据更新方法通过对各个数据库节点的数据更新流程进行管理,使得数据库节点在数据更新时不会与数据使用相冲突,实现数据更新与使用的热切换。属于计算机技术领域。
背景技术
内存数据库是将数据放在内存中直接操作的数据库。相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能。同时,内存数据库抛弃了磁盘数据管理的传统方式,基于全部数据都在内存中重新设计了体系结构,并且在数据缓存、快速算法、并行操作方面也进行了相应的改进,所以数据处理速度比传统数据库的数据处理速度要快很多,一般都在10倍以上。
分布式数据库系统通常使用较小的计算机系统,每台计算机可单独放在一个地方,每台计算机中都有DBMS的一份完整拷贝副本,并具有自己局部的数据库,位于不同地点的许多计算机通过网络互相连接,共同组成一个完整的、全局的大型数据库。
将这二者相结合的分布式内存数据库系统是当今数据库技术发展的前沿。这种数据库结构具有数据处理速度快、系统可靠性高、数据传输及管理成本低、数据库可扩展性强等特点。
但是,这种分布式内存数据库系统在对数据库节点上的数据进行更新时存在问题。数据库节点无法同时对内存数据库进行使用及更新操作,必须等待另一进程完成后,才能进行使用或更新操作。这很大程度上限制了该数据库系统的使用效率。
发明内容
本发明的发明目的在于解决现有技术中存在的问题,提供一种全新的分布式内存数据库的数据更新方法,使得数据库节点在数据更新时不会与数据使用相冲突,实现数据更新与使用的热切换。
本发明的发明目的是通过下述技术方案予以实现的:
分布式内存数据库,由服务器及若干内存数据库节点构成;所述各个内存数据库节点分别与服务器相连,其特征在于:
所述内存数据库节点的内存块由一块索引内存块和两个数据内存块构成;
所述索引内存块由使用内存块索引位、在使用内存块大小位和未使用内存块大小位构成;所述使用内存块索引位用以表示当前在被使用的数据内存块;所述在使用和未使用内存块大小位分别表示该内存数据库节点中在使用和未使用内存块的大小。
分布式内存数据库数据更新的控制方法,包括如下具体步骤:
1)获取目标数据库节点的内存块;
2)读取索引内存块,获取内存块索引位及两个数据内存块的大小信息;
3)判断所述内存块索引位是否为0?如果否,则执行步骤4);如果是,则执行步骤7);
4)将更新数据写入第0块数据内存块;
5)在索引内存块里把在使用内存块大小记录到未使用内存块大小里;
6)将内存块索引位修改为0,记录第0块数据内存块的大小,并结束此次数据更新;
7)将更新数据写入第1块数据内存块;
8)在索引内存块里把在使用内存块大小记录到未使用内存块大小里;
9)将内存块索引位修改为1,记录第1块数据内存块的大小,并结束此次数据更新。
分布式内存数据库内存文件预先加载方法,包括如下具体步骤:
1)数据库节点预先将内存文件加载到内存中,并提供查询服务;
2)用户提出查询请求;
3)数据库节点响应用户的查询请求;
4)读取索引内存块,获取内存块索引位及两个数据内存块的大小信息;
5)判断所述内存块索引位数值;如果该内存块索引位为0,则获取第0块数据内存块指针;如果该内存块索引位为1,则获取第1块数据内存块指针;
6)遍历该内存块索引位所指向的数据内存块,搜索查询结果;
7)将查询结果反馈给用户。
分布式内存数据库内存文件实时加载方法,包括如下具体步骤:
1)用户提出查询请求;
2)数据库节点响应用户的查询请求;
3)数据库节点判断用户所查询的内存文件是否存在?如果否,则返回空结果;如果是,则根据该内存文件构成内存文件路径;
4)判断该内存文件是否存在于数据内存块中?如果否,则将该内存文件加载到数据内存块中,再读取索引内存块,并获取内存块索引位及两个数据内存块的大小信息;如果是,则直接读取索引内存块,并获取内存块索引位及两个数据内存块的大小信息;
5)判断所述内存块索引位数值;如果该内存块索引位为0,则获取第0块数据内存块指针;如果该内存块索引位为1,则获取第1块数据内存块指针;
6)在内存块索引位所指向的数据内存块,查找该内存文件内容,查询结果;
7)将查询结果反馈给用户。
本发明的有益效果是:该分布式内存数据库的数据更新方法通过对数据库节点端内存块的划分及更新方法的设计,使得该内存块可以在不影响内存块使用的情况下实现数据更新,并达到热替换的目的。
附图说明
图1为索引内存块结构示意图;
图2为分布式内存数据库数据更新控制方法流程图;
图3为分布式内存数据库内存文件预先加载模式流程图;
图4为分布式内存数据库内存文件实时加载模式流程图。
具体实施方式
下面结合附图和实施例对本发明作进一步描述。
分布式内存数据库通常由服务器及若干内存数据库节点构成。所述各个内存数据库节点分别与服务器相连。
本发明中,所述内存数据库节点的内存块由一块索引内存块和两个数据内存块构成。两个数据内存块分别为第0块和第1块数据内存块。
如图1所示,所述索引内存块由使用内存块索引位、在使用内存块大小位和未使用内存块大小位构成。所述使用内存块索引位用以表示当前在被使用的数据内存块(0用以表示当前被使用的为第0块数据内存块,1用以表示当前被使用的为第1块数据内存块)。所述在使用和未使用内存块大小位分别表示该内存数据库节点中在使用和未使用内存块的大小。
所述两个数据内存块是对等的两个数据内存块,用以存储服务器发送来的数据库数据。两个数据内存块是可以用来互相更新替换的。
通过上述分布式内存数据库结构,当要更新数据库节点上已经存在内存块数据时,判断当前使用的是哪一块,先把未使用的内存块的数据更新掉,然后在索引内存块切换到已经更新好的内存块上,这样就可以在不影响内存块使用的情况下实现数据更新,并达到热替换的目的。
图2为该分布式内存数据库数据更新的控制方法流程图。如图所示,该数据更新的控制方法,包括如下具体步骤:
1)获取目标数据库节点的内存块;
2)读取索引内存块,获取内存块索引位及两个数据内存块的大小信息;
3)判断所述内存块索引位是否为0?如果否,则执行步骤4);如果是,则执行步骤7);
4)将更新数据写入第0块数据内存块;
5)在索引内存块里把在使用内存块大小记录到未使用内存块大小里;
6)将内存块索引位修改为0,记录第0块数据内存块的大小,并结束此次数据更新;
7)将更新数据写入第1块数据内存块;
8)在索引内存块里把在使用内存块大小记录到未使用内存块大小里;
9)将内存块索引位修改为1,记录第1块数据内存块的大小,并结束此次数据更新。
通过上述数据更新方法,该分布式内存数据库将要更新的数据内容首先写入未使用的内存块中,待写入完毕再通过修改内存块索引位完成内存块的切换。这样,内存块在被写入更新时,无需停止当前的访问使用,大大提高了数据库节点内存的读写效率,进而提高该数据库系统的更新速度。
另外,本发明针对不同类型内存文件的使用特点,设计了预先加载模式及实时加载模式两种内存文件的加载方法,具体如下:
预先加载模式:
图3为分布式内存数据库内存文件预先加载模式流程图。如图所示,该预先加载模式具体包括如下步骤:
1)数据库节点预先将内存文件加载到内存中,并提供查询服务;
2)用户提出查询请求;
3)数据库节点响应用户的查询请求;
4)读取索引内存块,获取内存块索引位及两个数据内存块的大小信息;
5)判断所述内存块索引位数值;如果该内存块索引位为0,则获取第0块数据内存块指针;如果该内存块索引位为1,则获取第1块数据内存块指针;
6)遍历该内存块索引位所指向的数据内存块,搜索查询结果;
7)将查询结果反馈给用户。
该预先加载模式,在提供查询服务之前,先通过程序或者手动加载内存文件到内存里,当查询请求来到时,就可以马上读取。这种模式的好处是每次请求都可以直接读取内存,响应时间短。这种模式必须要把内存映射路径写在代码或者配置文件里,不随请求的内容改变。这种模式适用于固定少量内存文件,适用于必须每次要访问的内存块例如IP库。
实时加载模式:
图4为分布式内存数据库内存文件实时加载模式流程图。如图所示,该实时加载模式具体包括如下步骤:
1)用户提出查询请求;
2)数据库节点响应用户的查询请求;
3)数据库节点判断用户所查询的内存文件是否存在?如果否,则返回空结果;如果是,则根据该内存文件构成内存文件路径;
4)判断该内存文件是否存在于数据内存块中?如果否,则将该内存文件加载到数据内存块中,再读取索引内存块,并获取内存块索引位及两个数据内存块的大小信息;如果是,则直接读取索引内存块,并获取内存块索引位及两个数据内存块的大小信息;
5)判断所述内存块索引位数值;如果该内存块索引位为0,则获取第0块数据内存块指针;如果该内存块索引位为1,则获取第1块数据内存块指针;
6)在内存块索引位所指向的数据内存块,查找该内存文件内容,查询结果;
7)将查询结果反馈给用户。
该实时加载模式,在提供查询服务之前,不加载内存文件到内存里。当第一次查询请求来到时,程序根据查询的内容才去加载内存文件到内存,再去读取,当第二次查询请求来时,内存里已经有该内存文件,直接去读取。这种模式的好处是可以根据请求内容去加载相应的内存文件,不需要一开始加载很多不经常使用的内存文件,节省内存。这种模式不需要把内存映射路径写在代码或者配置文件里,根据随请求的内容动态加载。这种适用于固定大量内存文件,只要内存够大可以支持不限数量的内存文件。
综上所述,本发明所设计的分布式内存数据库的数据更新方法通过对数据库节点端内存块的划分及更新方法的设计,使得该内存块可以在不影响内存块使用的情况下实现数据更新,并达到热替换的目的。本领域一般技术人员在此设计思想之下所做任何不具有创造性的改造,均应视为在本发明的保护范围之内。