数据访问方法、装置与分布式数据库系统
技术领域
本发明涉及数据库技术领域,特别是涉及一种数据访问方法、一种数据访问装置和一种分布式数据库系统。
背景技术
在互联网的技术应用中,数据库服务占据了非常重要的地位。而随着技术的发展,互联网的后台服务需要数据库拥有更快的响应速度,在这种需求下,催生了内存数据库的出现。内存数据库和传统的数据库不同,内存数据库的数据都保存在内存中。由于网络服务的数据可能非常庞大,内存数据库服务器无法在单台内存数据库服务器上加载所有的数据,这就需要对内存数据库服务器进行分布式的管理。
一种分布式内存服务器系统管理的实现方案如下,包括:内存数据库从接口机查询得到自己负责的数据库表的信息,然后从对应的真实数据库中读入该数据库表中的数据;当接口机在接收到访问客户端的SQL(StructuredQueryLanguage,结构化查询语言)请求后,根据所述SQL请求中的数据库表及所述接口机存储的真实数据库中各个数据库表和内存数据库的对应关系,将所述SQL请求分发到相应的内存数据库中;所述内存数据库根据接口机分发得到的SQL请求,对内存数据库中的数据进行查询或非查询操作。当对内存数据库中的数据进行了非查询操作时,内存数据库将该非查询操作所操作的数据写入预定的文件中,并通过该预定的文件,将非查询操作的操作结果同步到真实数据库中。
上述实现方案在数据库服务器故障时,虽然能够在一定程度上可以通过预定的文件保障数据的可恢复性,但是,一方面,故障数据库服务器在数据恢复时,需要先读取预定文件的内容,再进行数据恢复,导致数据恢复不够及时;另一方面,若该分布式内存数据库服务器系统需要扩容时,则需要重建该分布式内存数据库服务器系统,可见,该分布式内存数据库服务器系统的可扩容性较差。
因此,如何保证分布式内存数据库服务器系统中数据的可恢复性以及分布式内存数据库服务器系统的可扩容性,成为亟待解决的问题。
发明内容
本发明提供了一种数据访问方法、一种数据访问装置和一种分布式数据库系统,以解决现有分布式内存数据库服务器系统中数据的可恢复性差以及分布式内存数据库服务器系统的可扩容性差的问题。
为了解决上述问题,本发明公开了一种数据访问方法,包括:当接收到添加数据库服务器请求或删除数据库服务器请求时,对待添加的数据库服务器或待删除的数据库服务器进行数据迁移;根据所述数据迁移生成第二对应关系,保存所述第二对应关系,以及所述数据迁移前的第一对应关系,其中,所述第一对应关系用于指示所述数据迁移前的数据与服务器的对应关系,所述第二对应关系用于指示根据所述数据迁移生成的新的数据与服务器的对应关系;在进行所述数据迁移的过程中,接收数据访问请求;根据所述数据访问请求和存储的所述第一对应关系和所述第二对应关系,确定待访问的数据所在的服务器,对确定的所述服务器上的所述待访问的数据进行访问。
为了解决上述问题,本发明还公开了数据访问装置,包括:迁移模块,用于当接收到添加数据库服务器请求或删除数据库服务器请求时,对待添加的数据库服务器或待删除的数据库服务器进行数据迁移;存储模块,用于根据所述数据迁移生成第二对应关系,保存所述第二对应关系,以及所述数据迁移前的第一对应关系,其中,所述第一对应关系用于指示所述数据迁移前的数据与服务器的对应关系,所述第二对应关系用于指示根据所述数据迁移生成的新的数据与服务器的对应关系;访问模块,用于在进行所述数据迁移的过程中,接收数据访问请求;根据所述数据访问请求和存储的所述第一对应关系和所述第二对应关系,确定待访问的数据所在的服务器,对确定的所述服务器上的所述待访问的数据进行访问。
为了解决上述问题,本发明还公开了一种分布式数据库系统,包括:调度服务器、磁盘数据库服务器集群和内存数据库服务器集群;其中,所述调度服务器包括:迁移模块,用于当接收到所述添加数据库服务器请求或所述删除数据库服务器请求时,对待添加的数据库服务器或待删除的数据库服务器进行数据迁移,其中,所述待添加的数据库服务器或待删除的数据库服务器为所述磁盘数据库服务器集群中的服务器,所述数据迁移为所述磁盘数据库服务器之间的数据迁移;或者,所述待添加的数据库服务器或待删除的数据库服务器为所述内存数据库服务器集群中的服务器,所述数据迁移为所述内存数据库服务器之间的数据迁移;存储模块,用于根据所述数据迁移生成第二对应关系,保存所述第二对应关系,以及所述数据迁移前的第一对应关系,其中,所述第一对应关系用于指示所述数据迁移前的数据与服务器的对应关系,所述第二对应关系用于指示根据所述数据迁移生成的新的数据与服务器的对应关系;访问模块,用于在进行所述数据迁移的过程中,接收所述数据访问请求;根据所述数据访问请求和存储的所述第一对应关系和所述第二对应关系,确定待访问的数据所在的服务器,对确定的所述服务器上的所述待访问的数据进行访问。
与现有技术相比,本发明具有以下优点:
在分布式内存数据库服务器系统中,当数据库服务器故障或删除时,相关调度或管理服务器会收到删除数据库服务器请求;当系统扩容增加数据库服务器时,相关调度或管理服务器会收到添加数据库服务器请求。在这种情况下,相关调度或管理服务器会及时进行数据迁移,如将待删除的数据库服务器上的数据迁移到其它服务器上,或者,将其它数据库服务器中的数据迁移到新添加的数据库服务器上。在进行数据迁移的同时,相关调度或管理服务器可以并行接收数据访问请求,并根据原数据与服务器的对应关系即第一对应关系,和新的数据与服务器的对应关系即第二对应关系,确定数据所在的服务器,进行相关的数据访问处理。使用上述方案,一方面,数据迁移与数据访问可以并行执行,数据恢复及时且不会影响数据访问速度;另一方面,因同时保存了第一对应关系和第二对应关系,使得数据访问能够正常进行,不必等到数据完全恢复后再进行访问,实现了及时、正确的数据访问;再一方面,当系统扩容增加数据库服务器时,能够及时方便地将已经存在的其它数据库服务器中的数据迁移到新添加的服务器,无须进行大规模的系统重建和改动,提高了系统的可扩容性,实现了灵活方便的系统扩容。
附图说明
图1是根据本发明实施例一的一种数据访问方法的步骤流程图;
图2是根据本发明实施例二的一种数据访问方法的步骤流程图;
图3是根据本发明实施例三的一种数据访问方法中的分布式内存数据库服务器系统的结构示意图;
图4是图3所示分布式内存数据库服务器系统中的读取层数据库集群的结构示意图;
图5是根据本发明实施例三的一种数据访问方法中的调度服务器的处理流程图;
图6是根据本发明实施例三的一种数据访问方法中的写入层数据库集群的数据迁移流程图;
图7是根据本发明实施例三的一种数据访问方法中的读取层数据库集群的数据迁移流程图;
图8是根据本发明实施例四的一种数据访问装置的结构框图;
图9是根据本发明实施例五的一种分布式数据库系统的结构示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
实施例一
参照图1,示出了根据本发明实施例一的一种数据访问方法的步骤流程图。
本实施例的数据访问方法包括以下步骤:
步骤S102:调度服务器当接收到添加数据库服务器请求或删除数据库服务器请求时,对待添加的数据库服务器或待删除的数据库服务器进行数据迁移。
当系统需要扩容时,会添加新的数据库服务器,新添加的数据库服务器可能是内存数据库服务器,也可能是磁盘数据库服务器。新添加的数据库服务器会向调度服务器发送添加数据库服务器请求,但不限于此,也可以是调度服务器通过监控发现新添加了数据库服务器,生成添加数据库服务器请求。当数据库服务器故障或者需要删减时,调度服务器会收到删除数据库服务器请求,同样,待删除的数据库服务器可能是内存数据库服务器,也可能是磁盘数据库服务器,删除数据库服务器请求可能是调用服务器通过监控生成,也可能是待删除的数据库服务器发送。
数据迁移可以是已存在的数据库服务器上的数据向新添加的数据库服务器迁移数据,也可以是待删除的数据库服务器向其它数据库服务器迁移数据。
另外,本实施例的调度服务器仅为示例性说明,其它具有管理和控制功能的设备也同样适用。调度服务器可以为一台,既负责磁盘数据库服务器访问又负责内存数据库服务器访问;也可以为多台,分别负责不同的功能,如一台负责磁盘数据库服务器访问,一台负责内存数据库服务器访问,一台负责磁盘数据库服务器和内存数据库服务器之间的数据同步等,本领域技术人员可以根据实际情况适当设置,本申请对此不作限制。
步骤S104:调度服务器根据数据迁移生成第二对应关系,保存第二对应关系,以及数据迁移前的第一对应关系。
其中,第一对应关系用于指示数据迁移前的数据与服务器的对应关系,第二对应关系用于指示根据数据迁移生成的新的数据与服务器的对应关系。
步骤S106:调度服务器在进行数据迁移的过程中,接收数据访问请求。
其中,数据访问请求可以是数据写入请求,也可以是数据读取请求,也可以是数据更新请求,还可以是数据同步请求等等。
步骤S108:调度服务器根据数据访问请求和存储的第一对应关系和第二对应关系,确定待访问的数据所在的服务器,对确定的服务器上的待访问的数据进行访问。
因为进行了数据迁移,因此在数据迁移过程中对数据进行访问时,需要先确定数据所在的服务器,进而访问数据。
通过本实施例,在分布式内存数据库服务器系统中,当数据库服务器故障或删除时,相关调度或管理服务器会收到删除数据库服务器请求;当系统扩容增加数据库服务器时,相关调度或管理服务器会收到添加数据库服务器请求。在这种情况下,相关调度或管理服务器会及时进行数据迁移,如将待删除的数据库服务器上的数据迁移到其它服务器上,或者,将其它数据库服务器中的数据迁移到新添加的数据库服务器上。在进行数据迁移的同时,相关调度或管理服务器可以并行接收数据访问请求,并根据原数据与服务器的对应关系即第一对应关系,和新的数据与服务器的对应关系即第二对应关系,确定数据所在的服务器,进行相关的数据访问处理。使用本实施例的方案,一方面,数据迁移与数据访问可以并行执行,数据恢复及时且不会影响数据访问速度;另一方面,因同时保存了第一对应关系和第二对应关系,使得数据访问能够正常进行,不必等到数据完全恢复后再进行访问,实现了及时、正确的数据访问;再一方面,当系统扩容增加数据库服务器时,能够及时方便地将已经存在的其它数据库服务器中的数据迁移到新添加的服务器,无须进行大规模的系统重建和改动,提高了系统的可扩容性,实现了灵活方便的系统扩容。
实施例二
参照图2,示出了根据本发明实施例二的一种数据访问方法的步骤流程图。
本实施例中,设置了调度服务器、包括至少一台内存数据库服务器的内存数据库服务器集群、包括至少一台磁盘数据库服务器的磁盘数据库服务器集群,内存数据库服务器集群中的服务器数量可以和磁盘数据库服务器集群中的服务器数量相同或不同。其中,调度服务器实现内存数据库服务器集群和磁盘数据库服务器集群的调度、访问、同步和管理等功能,内存数据库服务器集群实现数据读取,磁盘数据库服务器集群实现数据写入,内存数据库服务器集群通过数据同步实现与磁盘数据库服务器集群的数据一致。优选地,内存数据库服务器集群中的部分或全部内存数据库服务器可以通过虚拟主机技术,将该部分或全部内存数据库服务器中的每个服务器都虚拟为多个内存数据库服务器节点,即,从逻辑上看,一台内存数据库服务器可以表现为多台内存数据库服务器,但从物理上看,该多台内存数据库服务器是同一台物理服务器。通过虚拟化内存数据库服务器,尤其是大容量的内存数据库服务器,既可以方便对数据的组织和管理,也可以保证服务器的负载均衡。此外,优选地,内存数据库服务器可以包括主内存数据库服务器和从内存数据库服务器,其中,主内存数据库服务器用于接收磁盘数据库服务器中的数据进行数据同步,从内存数据库服务器用于数据读取。通过对主人内存数据库服务器进行功能划分,能够有效保证连接和数据访问效率,以及数据安全。
基于以上设置,本实施例的数据访问方法包括以下步骤:
步骤S202:将内存数据库服务器集群中的一个或多个内存数据库服务器中的每个内存数据库服务器虚拟为多个内存数据库服务器节点。
通过将一个内存数据库服务器虚拟为多个内存数据库服务器节点,以更为有效地实现负载均衡和数据的组织管理。后续的数据迁移和访问可以将虚拟的内存数据库服务器节点当作真实的内存数据库服务器进行数据迁移和访问。
步骤S204:调度服务器当接收到添加数据库服务器请求或删除数据库服务器请求时,对待添加的数据库服务器或待删除的数据库服务器进行数据迁移。
添加数据库服务器请求包括添加内存或磁盘数据库服务器请求,删除数据库服务器请求包括删除内存或磁盘数据库服务器请求。相对应地,待添加的数据库服务器或待删除的数据库服务器可以是内存数据库服务器,进行内存数据库服务器之间的数据迁移;也可以是磁盘数据库服务器,进行磁盘数据库服务器之间的数据迁移。
也即,当添加数据库服务器请求指示添加内存数据库服务器,或者,删除数据库服务器请求指示删除内存数据库服务器时,对待添加的数据库服务器或待删除的数据库服务器进行数据迁移包括:对待添加的内存数据库服务器或待删除的内存数据库服务器进行内存数据库服务器之间的数据迁移,其中,内存数据库服务器用于数据读取,以及接收磁盘数据库服务器中的数据进行数据同步;当添加数据库服务器请求指示添加磁盘数据库服务器,或者,删除数据库服务器请求指示删除磁盘数据库服务器时,对待添加的数据库服务器或待删除的数据库服务器进行数据迁移包括:对待添加的磁盘数据库服务器或待删除的磁盘数据库服务器进行磁盘数据库服务器之间的数据迁移,其中,磁盘数据库服务器用于数据写入,以及将磁盘数据库服务器中的数据发送到内存数据库中进行数据同步。
步骤S206:调度服务器根据数据迁移生成第二对应关系,并保存第二对应关系,以及数据迁移前的第一对应关系。
其中,第一对应关系用于指示数据迁移前的数据与服务器的对应关系,第二对应关系用于指示根据数据迁移生成的新的数据与服务器的对应关系。数据与服务器的对应关系可以由本领域技术人员根据实际需要采用适当的方式生成,如采用hash(哈希)函数的方式生成。
一个使用hash函数生成数据与服务器对应关系的具体实例如下:假如目前有三台服务器(内存数据库服务器和磁盘数据库服务器均适用)A、B、C,三台服务器均采用KV(key-value,键值)存储。待存储的数据的key使用较为常见的BKDR哈希算法重新映射,生成存储在数据库中的key,该key的范围为1到4294967296。考虑到当前有三台服务器,因此将上述key的区间平均划分为三份,分别为A上存储的key值范围为[1,1431655766],B上存储的key值范围为[1431655767,2863311532],C上存储的key值范围为[2863311533,4294967296]。假设数据a的key为500,则数据a存储在A上,数据b为1431655000,也存储在数据库A上。此时,调度服务器存储a与A的对应关系,和b与A的对应关系。
当增加了一台服务器D的时候,上述的key的区间需要均等的划分为四份,此时,A上存储的key值范围为[1,1073741824],B上存储的key值范围为[1073741825,2147483648],C上存储的key值范围为[2147483649,3221225472],D上存储的key值范围为[3221225473,4294967296]。因此,a不需要迁移,b需要迁移至B服务器。也就是说在只有三台服务器的时候,如果key的取值在[1,1431655765]时,该数据存储在A上;当有四台服务器时,如果key取值在[1,1073741825]之间时,该数据存储在A上,因此b需要迁移。
在数据迁移之前以及正在执行数据迁移工作时,调度服务器需要存储数据和新旧服务器之间的对应关系,以便在数据迁移进行中的时候正常执行查询和写入操作。上例中,在数据迁移之前以及正在执行数据迁移工作时,调度服务器上不仅存储有原来的a与A的对应关系,和b与A的对应关系,并且重新存储了a与A的对应关系,和b与B的对应关系。当数据迁移完成之后,调度服务器中只保存当前的数据和服务器的对应关系。数据迁移前,调度服务器中存储有数据与服务器的第一对应关系,如数据a存储在A服务器上;数据迁移后,假如数据a迁移到了B服务器上,则调度服务器也存储该新的第二对应关系。
步骤S208:调度服务器在进行数据迁移的过程中,接收数据访问请求。
本实施例中,针对不同的数据库服务器集群,数据访问请求也不同。如,对于内存数据库服务器集群中的服务器,可接受的数据访问请求可以是数据读取请求和/或数据同步请求,其中,数据同步请求又可以分为数据插入请求和数据更新请求。数据读取请求用于请求读取数据,可以由客户端发出;数据同步请求用于将磁盘数据库服务器上的数据同步到内存服务器中,可以由调度服务器或磁盘数据库服务器发出。而对于磁盘数据库服务器集群中的服务器,可接受的数据访问请求可以是数据写入请求和/或数据更新请求,均可由客户端发出,数据写入请求用于请求向服务器的数据库中写入数据,数据更新请求用于请求更新数据库中已存在的数据。
步骤S210:调度服务器在进行数据迁移的过程中,根据数据访问请求和存储的第一对应关系和第二对应关系,确定待访问的数据所在的服务器,对确定的服务器上的待访问的数据进行访问。
包括:
(1)在进行内存数据库服务器之间的数据迁移的过程中
步骤A1:调度服务器在进行内存数据库服务器之间的数据迁移过程中,接收到数据访问请求,包括数据读取请求和/或数据同步请求。
本实施例中,因采用了主从内存服务器的方式,主从内存服务器分管不同的功能,所以当有数据读取请求时,可以交由从内存数据库服务器处理;当有数据同步请求时,可以交由主内存数据库服务器处理;当同时有数据读取请求和数据同步请求时,可以由主、从内存数据库服务器并行或顺序进行处理。
另外,主从数据库服务器的功能划分仅为示例性说明,本领域技术人员可以根据实际需要适当设置或增减功能。
步骤B1:调度服务器判断数据访问请求的类型,若为数据读取请求,则执行步骤C1;若为数据同步请求,则执行步骤D1。
步骤C1:调度服务器根据数据读取请求和存储的第一对应关系,查找待读取的数据所在的内存服务器,并判断是否查找到;若是,则根据查找结果确定待读取的数据所在的内存服务器,读取待读取的数据;若否,则根据第二对应关系查找并确定待读取的数据所在的内存服务器,从确定的内存服务器中读取待读取的数据,结束流程。
需要说明的是,若根据第二对应关系也无法查找到待读取的数据所在的内存服务器,则可以进行错误处理,如提示错误可无法找到等,结束流程。
步骤D1:调度服务器判断数据同步请求的请求类型,若为数据插入请求,则执行步骤E1;若为数据更新请求,则执行步骤F1。
步骤E1:调度服务器判断数据同步请求为数据插入请求,根据第二对应关系,确定待插入的数据应在的内存服务器,在内存服务器中插入待插入的数据。
即,直接将待插入数据插入第二对应关系指示的新的服务器中。
步骤F1:调度服务器判断数据同步请求为数据更新请求,根据第一对应关系,查找待更新的数据所在的内存服务器,并判断是否查找到,若找到,则执行步骤G1;若未找到,则执行步骤H1。
步骤G1:调度服务器根据第二对应关系,将待更新的数据迁移到新的内存服务器并根据数据更新请求更新待更新的数据。
步骤H1:调度服务器根据第二对应关系查找并确定待更新的数据所在的内存服务器,根据数据更新请求更新待更新的数据。
(2)在进行磁盘数据库服务器之间的数据迁移的过程中
步骤A2:调度服务器在进行磁盘数据库服务器之间的数据迁移过程中,接收到数据访问请求,包括数据写入请求和/或数据更新请求。
其中,当同时接收到数据写入请求和数据更新请求时,数据写入请求和数据更新请求可以并行或顺序执行。
步骤B2:调度服务器判断数据访问请求的类型,若为数据写入请求,则执行步骤C2;若为数据更新请求,则执行步骤D2。
步骤C2:调度服务器根据数据写入请求和存储的第二对应关系,确定待写入的数据应在的磁盘服务器,将待写入的数据写入磁盘服务器。
即,若在数据迁移过程中,有数据需要写入,则调度服务器将待写入的数据写入数据迁移后的新磁盘服务器。
步骤D2:调度服务器根据数据更新请求判断待更新的数据是否需要进行数据迁移,若否,执行步骤E2;若是,执行步骤F2。
其中,可以通过以下方式判断待更新的数据是否需要进行数据迁移,包括:调度服务器获取数据更新请求中的待更新数据;根据第一对应关系和第二对应关系,分别获取待更新数据所在的第一磁盘服务器和第二磁盘服务器;判断第一磁盘服务器和第二磁盘服务器是否为相同的服务器,若是,则确定待更新的数据不需要进行数据迁移;若否,则确定待更新的数据需要进行数据迁移。
例如,可以通过生成第一对应关系的第一hash函数计算待更新数据对应的第一磁盘服务器,再通过生成第二对应关系的第二hash函数计算待更新数据对应的第二磁盘服务器,若计算结果相同,即第一磁盘服务器和第二磁盘服务器为相同的服务器,则确定不需要进行数据迁移;若计算结果不相同,即第一磁盘服务器和第二磁盘服务器为不相同的服务器,则确定需要进行数据迁移。
步骤E2:调度服务器判断待更新的数据不需要进行数据迁移,则根据第一对应关系确定待更新的数据所在的磁盘服务器,并根据数据更新请求对磁盘服务器中的数据进行更新,结束本次更新流程。
步骤F2:调度服务器判断待更新的数据需要进行数据迁移,则根据第二对应关系确定待更新的数据所在的磁盘服务器,判断是否能在该磁盘服务器中查找到待更新的数据,若能,则执行步骤G2;若不能,则执行步骤H2。
步骤G2:调度服务器根据数据更新请求更新待更新的数据。
步骤H2:调度服务器根据第二对应关系,将待更新的数据迁移到新的磁盘服务器中并根据数据更新请求更新待更新的数据。
通过本实施例,实现了分布式内存数据库服务器系统的高效组织和管理,能够方便灵活地进行服务器集群的扩容和集群中服务器的删减,并且能够保证数据的及时同步和快速访问。
实施例三
本实施例以一个分布式内存数据库系统为例,对本发明的数据访问方法进行说明。
本实施例的分布式内存数据库系统的结构如图3所示,包括写入层调度服务器、数据同步服务器、读取层调度服务器、WDC(Writing-layerDatabaseCluster,写入层数据库集群)、和RDC(Reading-layerDatabaseCluster,读取层数据库集群)。其中,WDC为磁盘数据库服务器集群,RDC为内存数据库服务器集群。写入层调度服务器、数据同步服务器和读取层调度服务器在物理上属于同一台机器,但是在逻辑上将其划分为三个逻辑节点。当然,也可以是实际的三台物理机器。
其中,写入层调度服务器的主要功能是对WDC进行控制,更新WDC中服务器列表,分配数据访问请求到相应的服务器节点上。该调度服务器使用一致性hash算法获取能够执行数据写入服务的磁盘数据库服务器。每当有新的数据访问请求(包括数据写入请求和/或数据更新请求)进入时,该调度服务器根据hash算法获取当前应该写入数据的磁盘数据库服务器节点,将数据写入;当WDC中的磁盘数据库服务器发生故障或者需要删减或者进行磁盘数据库服务器扩容时,写入层调度服务器会自动生成新的一致性hash算法(一致性hash算法和服务器节点的数量相关)。例如,使用简单的hash函数,该函数使用如下规则:
key=Hash(value),key∈[1,Range];
n=Find(key)=[key*N/(Range)];
其中,value为需要存储的数据,Range为key的取值上限,key为通过hash算法得到的值,N为存储集群中服务器的台数,n为该数据应该写入的服务器编号,并且,n使用了向下取整计算,以得到服务器的整数编号。那么,当服务器的个数由于故障或者扩容产生了变化,会实时的更新到计算公式中,因此计算得到的数据应该存储到哪台服务器上的值也会改变,也即,服务器会自动生成新的一致性hash算法。
本实施例中,WDC可以采用持久化的KV(Key-Value,键值)存储系统,将数据存储在硬盘中,保证数据的不易失性。但不限于此,本领域技术人员应当明了,其它存储系统也同样适用本发明的数据访问方案。只有当读RDC失败时,读取访问请求才会访问WDC读取数据。
数据同步服务器负责将WDC的数据同步到RDC中。
读取层调度服务器主要对RDC进行控制,更新RDC的服务器列表,将数据访问请求(包括数据读取请求和/或数据同步请求)分配到相应的服务器节点上。该调度服务器也使用一致性hash算法获取读取服务器节点。
本实施例的RDC采用内存数据库,保证查询的实时性。RDC只负责读取并返回数据给请求的服务,其数据由WDC更新。RDC采用了主从同步方式,如图4所示。图4展示了RDC的总体框架,其内存数据库服务器集群采用了主从同步的方式对数据进行备份,预防单点故障。并且,主从同步服务器中的主服务器只负责同步写操作(同步写操作来自于WDC的同步数据),而从服务器负责读操作。此外,RDC采用虚拟主机的技术,在一台物理数据库服务器节点上挂载多个虚拟服务器节点,在服务器节点数量较少的时候可以保证负载均衡。
基于以上结构,本实施例分别从调度服务器整体调度和WDC及RDC的数据迁移方面对本发明的数据访问方法进行说明。
以下,首先对调度服务器整体调度流程进行说明。
参照图5,示出了根据本实施例的一种数据访问方法中的调度服务器的处理流程图。
在该调度服务器的处理流程,用户直接和调度服务器进行交互,而非数据库本身。调度服务器在物理上属于同一个服务器节点,但是在逻辑上可以分为写入层调度器、读取层调度器以及数据同步调度器。调度服务器根据数据访问请求的种类,执行查询或者写入操作,或者更新服务器的列表(服务器扩容或者出现故障节点)。其中,在处理添加和删除服务器请求的时候,会在后台调用数据库迁移工作。
该调度服务器的处理流程包括以下步骤:
步骤S302:调度服务器接受数据访问请求。
本处理流程中,数据访问请求包括:数据读取请求、数据写入请求、添加/删除数据库服务器请求,以及无效请求(除数据读取请求、数据写入请求、添加/删除数据库服务器请求外的请求均可视为无效请求)。
步骤S304:调度服务器判断数据访问请求的类型,若为数据读取请求,则执行步骤S306;若为数据写入请求,则执行步骤S312;若为添加/删除数据库服务器请求,则执行步骤S318;若为无效请求,则执行步骤S328。
步骤S306:调度服务器根据数据读取请求,使用一致性hash算法获取需要连接的内存数据库服务器,执行步骤S308。
本处理流程中的数据读取为非数据迁移过程中的数据读取。
步骤S308:调度服务器将数据读取请求发送至相应的内存数据库服务器,进行数据读取,执行步骤S310。
步骤S310:调度服务器接收内存数据库服务器返回的数据读取结果,并返回数据读取结果至请求方,结束本次数据读取流程。
步骤S312:调度服务器根据数据写入请求,使用一致性hash算法获取需要连接的磁盘数据库服务器,执行步骤S314。
本处理流程中的数据写入为非数据迁移过程中的数据读取。
步骤S314:调度服务器将数据写入请求发送至相应的磁盘数据库服务器,进行数据写入,执行步骤S316。
步骤S316:调度服务器接收磁盘数据库服务器返回的数据写入结果,并返回数据写入结果至请求方,结束本次数据写入流程。
步骤S318:调度服务器根据添加/删除数据库服务器请求,判断是添加/删除磁盘数据库服务器请求,还是添加/删除内存数据库服务器请求;若是添加/删除磁盘数据库服务器请求,则执行步骤S320;若是添加/删除内存数据库服务器请求,则执行步骤S324。
步骤S320:调度服务器根据添加/删除磁盘数据库服务器请求,添加/删除写入数据库服务器列表(即磁盘数据库服务器列表)中相应的数据库服务器,执行步骤S322。
步骤S322:调度服务器进行写入数据库服务器的数据迁移,结束请求处理流程。
写入数据库服务器的数据迁移将在下文进行说明,在此不再详述。
步骤S324:调度服务器根据添加/删除内存数据库服务器请求,添加/删除读取数据库服务器列表(即内存数据库服务器列表)中相应的数据库服务器,执行步骤S326。
步骤S326:调度服务器进行读取数据库服务器的数据迁移,结束请求处理流程。
读取数据库服务器的数据迁移将在下文进行说明,在此不再详述。
步骤S328:调度服务器对无效请求进行异常情况处理,结束无效请求处理流程。
对无效请求的处理可以由本领域技术人员根据实际情况采用相关的适当方式进行,如不进行处理,提示出错等等,本发明对此不作限制。
以下,对WDC中磁盘数据库服务器的数据迁移流程进行说明。
参照图6,示出了根据本实施例的一种数据访问方法中的WDC中磁盘数据库服务器的数据迁移流程图。图6中,符号“||”表示并行处理。
该WDC中磁盘数据库服务器的数据迁移包括以下步骤:
步骤S402:调度服务器接收到添加/删除磁盘数据库服务器请求,添加/删除磁盘数据库服务器列表中相应的数据库服务器,启动磁盘数据库服务器之间的数据迁移。
在磁盘数据库服务器之间的数据迁移过程中,调度服务器并行接收并处理数据访问请求。
步骤S404:调度服务器在进行磁盘数据库服务器之间的数据迁移的过程中,接收数据访问请求。
步骤S406:调度服务器判断数据访问请求的类型,若为数据更新请求,则执行步骤S408;若为数据写入请求,则执行步骤S418。
步骤S408:调度服务器判断待更新的数据是否需要进行数据迁移,若否,执行步骤S410;若是,执行步骤S412。
当数据库集群增删节点时,hash函数会产生变化。系统会保留原来的旧hash函数和变化后的新hash函数这两个hash函数。
当有数据更新请求时,首先需要判断待更新的数据是否需要被迁移,判断是否需要迁移的方法是使用新旧两个hash函数执行计算,如果返回的服务器节点相同,则不需要迁移,否则需要执行数据的迁移。
步骤S410:调度服务器根据原(旧)hash函数的计算结果确定待更新数据所在的磁盘数据库服务器,更新该磁盘数据库服务器上的待更新数据。
步骤S412:调度服务器根据新hash函数的计算结果确定待更新数据所在的磁盘数据库服务器,判断在该磁盘数据库服务器上是否查找到待更新数据,若查找到,执行步骤S414;若未查找到,执行步骤S416。
当数据需要迁移的时候,如果在新的数据库服务器节点中查询到了对应的数据,则更新在新的数据库服务器节点中的数据;否则,将旧数据库服务器节点中的数据删除,将被更新的数据插入到新的数据库服务器节点中,或者,将旧数据库服务器节点中的数据迁移到新的数据库服务器节点后,删除旧数据库服务器节点中的数据,然后更新新数据库服务器节点上的数据。
步骤S414:调度服务器在新hash函数的计算结果确定的磁盘数据库服务器上更新数据,结束本次更新流程。
步骤S416:调度服务器将待更新数据从原hash函数的计算结果确定的磁盘数据库服务器迁移到新hash函数的计算结果确定的磁盘数据库服务器,并进行更新。
步骤S418:调度服务器根据数据写入请求,使用新的hash函数获取待写入的磁盘数据库服务器,向该磁盘数据库服务器写入数据。
当有数据写入请求时,调度服务器使用新的hash函数获取数据库节点,将数据写入对应的数据库服务器节点中。
在数据迁移工作完成之前,所有的数据写入和更新操作都需要按照上述的流程进行。
通过上述WDC的数据迁移过程,保证了在数据迁移的过程中仍然可以提供正常的数据访问服务。
以下,对RDC中内存数据库服务器的数据迁移流程进行说明。
参照图7,示出了根据本实施例的一种数据访问方法中的RDC中的服务器的数据迁移流程图。图7中,符号“||”表示并行处理。
该RDC中内存数据库服务器的数据迁移包括以下步骤:
步骤S502:调度服务器接收到添加/删除内存数据库服务器请求,添加/删除内存数据库服务器列表中相应的数据库服务器,启动内存数据库服务器之间的数据迁移。
在内存数据库服务器之间的数据迁移过程中,调度服务器并行接收并处理数据访问请求。
步骤S504:调度服务器在进行内存数据库服务器之间的数据迁移的过程中,接收数据访问请求。
步骤S506:调度服务器判断数据访问请求的类型,若为数据读取请求,则执行步骤S508;若为数据同步请求,则执行步骤S514。
步骤S508:调度服务器使用原hash函数查找待读取数据所在的内存数据库服务器,若查找到,执行步骤S510;若未查找到,执行步骤S512。
步骤S510:调度服务器根据查找结果确定待读取数据所在的内存数据库服务器,从该内存数据库服务器读取数据,结束本次数据读取流程。
步骤S512:调度服务器使用新hash函数查找待读取数据所在的内存数据库服务器,若查找到,从该内存数据库服务器读取数据;若未查找到,则记录查找失败的日志。结束本次数据读取流程。
从上述过程可以看出,在执行数据迁移的过程中,执行数据读取操作时,可以首先查询旧的hash函数,查看数据是否在以前的数据库服务器节点中,如果找到了数据,则直接返回;否则,说明该数据已经被迁移了、或者根本不存在,从而需要使用新的hash函数计算新的数据库服务器节点位置,并查询新的数据库服务器节点,如果查询到该数据则正确返回,否则记录错误日志(数据不存在等情况)。
因为RDC本身也划分了读取层(从服务器)和写入层(主服务器),上述读取过程主要在读取层进行。
步骤S514:调度服务器判断数据同步请求具体为数据插入请求还是数据更新请求,若为数据插入请求,则执行步骤S516;若为数据更新请求,则执行步骤S518。
步骤S516:调度服务器使用新的hash函数为待插入数据确定内存数据库服务器,将待插入数据插入该内存数据库服务器中,结束本次数据同步流程。
步骤S518:调度服务器根据数据更新请求,使用原hash函数查询待更新数据所在的内存数据库服务器,若查询到,执行步骤S520;若未查询到,则执行步骤S524。
步骤S520:调度服务器将待更新数据从原内存数据库服务器迁移到根据新hash函数确定的新内存数据库服务器中,执行步骤S522。
步骤S522:调度服务器更新迁移到新内存数据库服务器中的待更新数据,结束本次数据更新流程。
步骤S524:调度服务器使用新hash函数查询待更新数据所在的内存数据库服务器,若查询到,则更新该内存数据库服务器中的待更新数据;若未查找到,则记录错误日志,结束本次数据更新流程。
因为RDC本身也划分了读取层(从服务器)和写入层(主服务器),上述同步过程主要在写入层进行。
在数据迁移工作完成之前,所有的数据读取和同步操作都需要按照上述的流程进行。
通过上述RDC的数据迁移过程,保证了在数据迁移的过程中仍然可以提供正常的数据访问服务。
通过实施例三,能够使得分布式内存数据库服务器集群易于管理,提升了数据库服务器动态增删节点时的高可用性,对于数据库服务器集群的扩容和故障产生的数据同步问题都能够自动化地解决,并且通过将数据的存储细化为写入层存储以及读取层存储,而读取层存储又细化为主从服务器存储,实现了数据的分层备份;而从同一份数据的存储次数的维度来说,本实施例同一份数据在写入层、读取层主服务器和读取层从服务器上都有存储,拥有多份备份,实现了数据的多次备份,通过分层备份和多次备份保证了数据的高稳定性,这样,对于对数据敏感的服务具有很好的支持作用。
实施例四
参照图8,示出了根据本发明实施例四的一种数据访问装置的结构框图。
本实施例的数据访问装置包括:迁移模块602,用于当接收到添加数据库服务器请求或删除数据库服务器请求时,对待添加的数据库服务器或待删除的数据库服务器进行数据迁移;存储模块604,用于根据数据迁移生成第二对应关系,保存第二对应关系,以及数据迁移前的第一对应关系,其中,第一对应关系用于指示数据迁移前的数据与服务器的对应关系,第二对应关系用于指示根据数据迁移生成的新的数据与服务器的对应关系;访问模块606,用于在进行数据迁移的过程中,接收数据访问请求;根据数据访问请求和存储的第一对应关系和第二对应关系,确定待访问的数据所在的服务器,对确定的服务器上的待访问的数据进行访问。
优选地,迁移模块602,用于当接收到指示添加内存数据库服务器的添加数据库服务器请求,或者,接收到指示删除内存数据库服务器的删除数据库服务器请求时,对待添加的内存数据库服务器或待删除的内存数据库服务器进行内存数据库服务器之间的数据迁移,其中,内存数据库服务器用于数据读取,以及接收磁盘数据库服务器中的数据进行数据同步;或者,迁移模块602,用于当接收到指示添加磁盘数据库服务器的添加数据库服务器请求,或者,接收到指示删除磁盘数据库服务器的删除数据库服务器请求时,对待添加的磁盘数据库服务器或待删除的磁盘数据库服务器进行磁盘数据库服务器之间的数据迁移,其中,磁盘数据库服务器用于数据写入,以及将磁盘数据库服务器中的数据发送到内存数据库中进行数据同步。
优选地,访问模块606,用于在进行内存数据库服务器之间的数据迁移过程中,接收数据读取请求和/或数据同步请求;根据数据读取请求和存储的第一对应关系,查找待读取的数据所在的内存服务器,并判断是否查找到;若是,则根据查找结果确定待读取的数据所在的内存服务器,读取待读取的数据;若否,则根据第二对应关系查找并确定待读取的数据所在的内存服务器,从确定的内存服务器中读取待读取的数据;和/或,判断数据同步请求的请求类型;若为数据插入请求,则根据第二对应关系,确定待插入的数据应在的内存服务器,在内存服务器中插入待插入的数据;若为数据更新请求,则根据第一对应关系,查找待更新的数据所在的内存服务器,并判断是否查找到;若是,则根据第二对应关系,将待更新的数据迁移到新的内存服务器并根据数据更新请求更新待更新的数据;若否,则根据第二对应关系查找并确定待更新的数据所在的内存服务器,根据数据更新请求更新待更新的数据。
优选地,访问模块606,用于在进行磁盘数据库服务器之间的数据迁移过程中,接收数据写入请求和/或数据更新请求;根据数据写入请求和存储的第二对应关系,确定待写入的数据应在的磁盘服务器,将待写入的数据写入磁盘服务器;和/或,根据数据更新请求判断待更新的数据是否需要进行数据迁移;若否,则根据第一对应关系确定待更新的数据所在的磁盘服务器,并根据数据更新请求对磁盘服务器中的数据进行更新;若是,则根据第二对应关系确定待更新的数据所在的磁盘服务器,判断是否能在磁盘服务器中查找到待更新的数据,若能,则根据数据更新请求更新待更新的数据;若不能,则根据第二对应关系,将待更新的数据迁移到新的磁盘服务器中并根据数据更新请求更新待更新的数据。
优选地,访问模块606在根据数据更新请求判断待更新的数据是否需要进行数据迁移时,获取数据更新请求中的待更新数据;根据第一对应关系和第二对应关系,分别获取待更新数据所在的第一磁盘服务器和第二磁盘服务器;判断第一磁盘服务器和第二磁盘服务器是否为相同的服务器,若是,则确定待更新的数据不需要进行数据迁移;若否,则确定待更新的数据需要进行数据迁移。
优选地,内存数据库服务器包括主内存数据库服务器和从内存数据库服务器,主内存数据库服务器用于接收磁盘数据库服务器中的数据进行数据同步,从内存数据库服务器用于数据读取。
优选地,本实施例的数据访问装置还包括:虚拟模块608,用于在迁移模块602当接收到添加数据库服务器请求或删除数据库服务器请求时,对待添加的数据库服务器或待删除的数据库服务器进行数据迁移之前,将一个或多个内存数据库服务器中的每个内存数据库服务器虚拟为多个内存数据库服务器节点。
本实施例的数据访问装置用于实现前述多个方法实施例中相应的数据访问方法,并具有相应的方法实施例的有益效果,在此不再赘述。
实施例五
参照图9,示出了根据本发明实施例五的一种分布式数据库系统的结构示意图。
本实施例的分布式数据库系统包括:调度服务器702、磁盘数据库服务器集群704和内存数据库服务器集群706。
其中,调度服务器702包括:迁移模块7022,用于当接收到添加数据库服务器请求或删除数据库服务器请求时,对待添加的数据库服务器或待删除的数据库服务器进行数据迁移,其中,待添加的数据库服务器或待删除的数据库服务器为磁盘数据库服务器集群中的服务器,数据迁移为磁盘数据库服务器之间的数据迁移;或者,待添加的数据库服务器或待删除的数据库服务器为内存数据库服务器集群中的服务器,数据迁移为内存数据库服务器之间的数据迁移;存储模块7024,用于根据数据迁移生成第二对应关系,保存第二对应关系,以及数据迁移前的第一对应关系,其中,第一对应关系用于指示数据迁移前的数据与服务器的对应关系,第二对应关系用于指示根据数据迁移生成的新的数据与服务器的对应关系;访问模块7026,用于在进行数据迁移的过程中,接收数据访问请求;根据数据访问请求和存储的第一对应关系和第二对应关系,确定待访问的数据所在的服务器,对确定的服务器上的待访问的数据进行访问。
优选地,内存数据库服务器集群中的服务器用于数据读取,以及接收磁盘数据库服务器集群中的服务器发送的数据进行数据同步;磁盘数据库服务器集群中的服务器用于数据写入,以及将磁盘数据库服务器集群中的服务器上的数据发送到内存数据库集群中的服务器上进行数据同步。
优选地,访问模块7026,用于在进行内存数据库服务器之间的数据迁移过程中,接收数据读取请求和/或数据同步请求;根据数据读取请求和存储的第一对应关系,查找待读取的数据所在的内存服务器,并判断是否查找到;若是,则根据查找结果确定待读取的数据所在的内存服务器,读取待读取的数据;若否,则根据第二对应关系查找并确定待读取的数据所在的内存服务器,从确定的内存服务器中读取所述待读取的数据;和/或,判断数据同步请求的请求类型;若为数据插入请求,则根据第二对应关系,确定待插入的数据应在的内存服务器,在内存服务器中插入所述待插入的数据;若为数据更新请求,则根据第一对应关系,查找待更新的数据所在的内存服务器,并判断是否查找到;若是,则根据第二对应关系,将待更新的数据迁移到新的内存服务器并根据数据更新请求更新所述待更新的数据;若否,则根据第二对应关系查找并确定待更新的数据所在的内存服务器,根据数据更新请求更新待更新的数据。
优选地,访问模块7026,用于在进行磁盘数据库服务器之间的数据迁移过程中,接收数据写入请求和/或数据更新请求;根据数据写入请求和存储的第二对应关系,确定待写入的数据应在的磁盘服务器,将待写入的数据写入磁盘服务器;和/或,根据数据更新请求判断待更新的数据是否需要进行数据迁移;若否,则根据第一对应关系确定待更新的数据所在的磁盘服务器,并根据数据更新请求对磁盘服务器中的数据进行更新;若是,则根据第二对应关系确定待更新的数据所在的磁盘服务器,判断是否能在磁盘服务器中查找到待更新的数据,若能,则根据数据更新请求更新待更新的数据;若不能,则根据第二对应关系,将待更新的数据迁移到新的磁盘服务器中并根据数据更新请求更新待更新的数据。
优选地,访问模块7026在根据数据更新请求判断待更新的数据是否需要进行数据迁移时,获取数据更新请求中的待更新数据;根据第一对应关系和第二对应关系,分别获取待更新数据所在的第一磁盘服务器和第二磁盘服务器;判断第一磁盘服务器和第二磁盘服务器是否为相同的服务器,若是,则确定待更新的数据不需要进行数据迁移;若否,则确定待更新的数据需要进行数据迁移。
优选地,内存数据库服务器包括主内存数据库服务器和从内存数据库服务器,主内存数据库服务器用于接收磁盘数据库服务器中的数据进行数据同步,从内存数据库服务器用于数据读取。
优选地,调度服务器702还包括:虚拟模块7028,用于在迁移模块7022当接收到添加数据库服务器请求或删除数据库服务器请求时,对待添加的数据库服务器或待删除的数据库服务器进行数据迁移之前,将一个或多个内存数据库服务器中的每个内存数据库服务器虚拟为多个内存数据库服务器节点。
本实施例的分布式数据库系统可以实现前述多个方法实施例中相应的数据访问方法,并具有相应的方法实施例的有益效果,在此不再赘述。
需要说明的是,本发明的多个实施例中,使内存数据库服务器和磁盘数据库服务器执行了不同的功能,但本领域技术人员应当明了,常规的内存数据库服务器,即,既可提供数据读取服务又可提供数据写入服务的内存数据库服务器也同样适用本发明的数据访问方案。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置和系统实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上对本发明所提供的一种数据访问方法、装置、和分布式数据库系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。