本发明实施例涉及网络存储领域,特别涉及一种分布式数据库系统、数据库访问方法及装置。
背景技术:
Sqlite数据库是一种轻量级数据库。Sqlite数据库具有无需安装即可动态使用的特点。Sqlite数据库常应用于移动操作系统,比如安卓(Android)系统和IOS系统。Sqlite数据库在单机性质的移动操作系统上具有非常优秀的性能。
目前,现有技术也存在将Sqlite数据库应用于分布式数据库的场景。分布式数据库采用了共享文件系统,该共享文件系统包括分散设置的多个数据存储节点,多个数据存储节点之间通过网络相连,每个数据存储节点上设置有一个Sqlite数据库。
在实现本发明实施例的过程中,发明人发现现有技术至少存在以下问题:在实际使用中发现,Sqlite数据库对共享文件系统的支持较差。在并发访问共享文件系统的场景中,很容易出现卡死的现象。并发访问时指存在多个业务节点同时请求访问共享文件系统。
技术实现要素:
为了解决现有技术的问题,本发明实施例提供了一种基于共享文件系统的分布式数据库系统、访问方法及装置。所述技术方案如下:
第一方面,提供了一种分布式数据库系统。该分布式数据库系统包括:n个数据库集群节点、数据库主节点和共享文件系统,n≥3。数据库集群节点,用于通过线程向数据库主节点发送访问请求;数据库主节点,用于接收数据库集群节点发送的访问请求;将访问请求存储至分发队列,并向数据库集群节点发送接收响应;数据库集群节点,还用于根据接收响应挂起线程;数据库主节点,还用于从分发队列依次获取访问请求;根据访问请求从共享文件系统中读数据 或写数据;向数据库集群节点发送访问请求的返回响应;数据库集群节点,用于接收返回响应;根据返回响应唤醒线程。
本发明实施例提供的分布式数据库系统,当多个数据库集群节点并发访问数据库主节点时,数据库主节点同时接收多个访问请求并存储至分发队列,再从分发队列中逐个获取访问请求并执行,使得在使用Sqlite数据库的共享文件系统中,数据库主节点能接收和处理并发的多个访问请求,而不会出现卡死的现象,使Sqlite数据库也能实现共享文件系统的并发机制,扩大了Sqlite数据库的使用范围。
在第一方面的第一种可能的实施方式中,在数据库主节点根据访问请求从共享文件系统中写数据的方面:数据库主节点,用于解析访问请求;当访问请求的类型为写请求且写任务线程为空闲时,提交与访问请求对应的写任务至写任务线程,写任务线程用于根据写任务向共享文件系统写入数据。在本实施方式中,通过使用数据库主节点对访问请求进行解析并获得访问请求的类型,对于写请求,提交到写任务线程,能将读任务和写任务分开执行,互不影响,保证了数据的一致性。
在第一方面的第二种可能的实施方式中,在数据库主节点根据访问请求从共享文件系统中读数据的方面:数据库主节点,用于解析访问请求;当访问请求的类型为读请求时,提交与访问请求对应的读任务至读任务线程,读任务线程用于为读任务分配独立的数据库句柄;根据数据库句柄和读任务从共享文件系统读数据。在本实施方式中,通过使用数据库主节点对访问请求进行解析获得访问请求的类型,对于读请求,提交到读任务线程,能将读任务和写任务分开执行,互不影响,保证了数据的一致性。通过为读任务分配独立的数据库句柄,使读任务之间互相独立,达到了可以并发读取数据的效果。
结合第一方面、第一方面的第一种可能的实施方式或者第一方面的第二种可能的实施方式,在第三种可能的实施方式中,该系统还包括:备用数据库主节点;数据库集群节点,用于在第一预定时间内未接收到接收响应时,或者,在第二预定时间内未接收到返回响应时,重新向备用数据库主节点发送访问请求。在本实施方式中,通过使用备用数据库主节点,避免了因数据库主节点故障引起的整个分布式数据库系统的故障。
第二方面,提供了一种数据库访问方法,该方法包括:接收数据库集群节 点发送的访问请求;将访问请求存储至分发队列,并向数据库集群节点发送接收响应,接收响应用于触发数据库集群节点挂起与访问请求对应的线程;从分发队列依次获取访问请求;根据访问请求从共享文件系统中读数据或写数据;向数据库集群节点发送访问请求的返回响应;返回响应用于触发数据库集群节点唤醒线程。
在第二方面的第一种可能的实施方式中,根据访问请求从共享文件系统中写数据,包括:解析访问请求;当访问请求的类型为写请求且写任务线程为空闲时,提交与访问请求对应的写任务至写任务线程,写任务线程用于根据写任务向共享文件系统写入数据。
在第二方面的第二种可能的实施方式中,根据访问请求从共享文件系统中读数据,包括:解析访问请求;当访问请求的类型为读请求时,提交与访问请求对应的读任务至读任务线程,读任务线程用于为读任务分配独立的数据库句柄;根据数据库句柄和读任务从共享文件系统读数据。
第三方面,提供了一种数据库访问方法,该方法包括:通过线程向数据库主节点发送访问请求;接收数据库主节点发送的接收响应;根据接收响应挂起线程;接收数据库主节点发送的返回响应;根据返回响应唤醒线程。
在第三方面的第一种可能的实施方式中,该方法还包括:在第一预定时间内未接收到接收响应时,或者,在第二预定时间内未接收到返回响应时,重新向备用数据库主节点发送访问请求。
第四方面,提供了一种数据库主节点,所述数据库集群节点包括:处理器、与处理器相连的存储器和网络接口,所述处理器被配置为执行指令,所述处理器通过执行指令来实现上述第二方面的数据库访问方法。
第五方面,提供了一种数据库集群节点,所述数据库集群节点包括:处理器、与处理器相连的存储器和网络接口,所述处理器被配置为执行指令,所述处理器通过执行指令来实现上述第三方面的数据库访问方法。
第六方面,提供了一种数据库访问装置,数据库访问装置包括至少一个单元,该至少一个单元用于实现上述第四方面的数据库访问方法。
第七方面,提供了一种数据库访问装置,数据库访问装置包括至少一个单元,该至少一个单元用于实现上述第五方面的数据库访问方法。
第八方面,提供了一种计算机可读介质,该计算机可读介质存储用于实现 第二方面所提供的数据库访问方法的指令,或者,该计算机可读介质存储用于实现第三方面所提供的数据库访问方法的指令。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一示例性实施例提供的分布式数据库系统的结构示意图;
图2是本发明一示例性实施例提供的数据库集群节点的结构示意图;
图3是本发明一示例性实施例提供的数据库主节点的结构示意图;
图4是本发明一示例性实施例提供的数据库访问方法的流程图;
图5是本发明另一示例性实施例提供的数据库访问方法的流程图;
图6是本发明另一示例性实施例涉及的分发队列的示意图;
图7是本发明另一示例性实施例提供的数据库访问方法的流程图;
图8是本发明另一示例性实施例提供的数据库访问方法的流程图;
图9是本发明另一示例性实施例提供的数据库访问方法的流程图;
图10是本发明另一示例性实施例提供的数据库访问方法的流程图;
图11是本发明另一示例性实施例提供的数据库访问方法的流程图;
图12是本发明一示例性实施例提供的数据库访问装置的框图;
图13是本发明另一示例性实施例提供的数据库访问装置的框图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施例进行阐述。
在本文提及的“模块”是指存储在存储器中的能够实现某些功能的程序或指令;在本文中提及的“单元”是指按照逻辑划分的功能性结构,该“单元”可以由纯硬件实现,或者,软硬件的结合实现。
请参考图1,其示出了本发明一个示例性实施例提供的分布式数据库系统的 结构示意图。该分布式数据库系统包括:数据库业务节点110、数据库集群节点120、数据库主节点130和共享文件系统140。
在一个数据库集群中,存在多个数据库节点,选择其中一个数据库节点作为分布式数据库系统的数据库主节点130,则其余的每一个数据库节点均作为数据库集群节点120,即数据库集群节点120和数据库主节点130都是数据库节点。
可选的,数据库业务节点110可以是提供数据库业务的任意一个数据库业务节点,每一个数据库节点都可以和一个数据库业务节点相连。
在一个分布式数据库系统中,可选地,数据库集群节点120存在至少两个,每一个数据库集群节点120都与数据库主节点130通过有线网络或无线网络方式相连。
可选的,该分布式数据库系统还包括:备用数据库主节点150,当数据库主节点130发生故障时,由备用数据库主节点150代替数据库主节点130进行运行。可选的,备用数据库主节点150也与一个数据库业务节点110相连。
共享文件系统140包括:n个数据节点142,n≥3。
每一个数据节点142上设置有一个数据库,多个数据节点之间通过网络相互连接,可选的,该数据库为Sqlite数据库。
可选的,共享文件系统140是网络附属存储(Network Attached Storage,NAS),数据库主节点130通过以太网与共享文件系统140相连。
可选的,共享文件系统140可被替代实现为针对共享块存储的存储区域网络(Storage Area Network,SAN),则数据库主节点130与共享文件系统140之间通过光纤通道(Fibre Channel,FC)相连,共享文件系统140还可以被替代实现为其他共享存储系统,本公开实施例对此不作限定。
请参考图2,其示出了本发明一个示例性实施例提供的数据库集群节点120的结构示意图。该数据库集群节点120包括:处理器21、网络接口22、高速缓存器23、存储器24和总线25。
处理器21包括一个或者一个以上处理核心,处理器21通过运行软件程序以及模块,从而执行各种功能应用以及数据处理。
网络接口22可以为多个,其中一部分网络接口22用于数据库集群节点120与数据库业务节点110进行通信,另一部分网络接口22用于数据库集群节点120 与数据库主节点130或备用数据库主节点150进行通信。
存储器24与高速缓存器23分别通过总线25与处理器21相连。
存储器可用于存储软件程序以及模块。
存储器可以存储至少一个功能所需的应用程序模块26,应用程序模块26可以是发送模块261、接收模块262、执行模块263等。
发送模块261用于通过网络接口22通过线程向数据库主节点发送访问请求;以及用于根据返回响应唤醒该线程;以及在未接收到接收响应时,重新通过网络接口22向备用数据库主节点发送访问请求。
接收模块262用于通过网络接口22接收数据库主节点发送的接收响应,以及用于通过网络接口22接收数据库主节点发送的返回响应。
执行模块263用于根据接收响应挂起该线程。
存储器24可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
本领域技术人员可以理解,图2中所示出的数据库集群节点120的结构并不构成对数据库集群节点120的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
请参考图3,其示出了本发明一个示例性实施例提供的数据库主节点130的结构示意图。该数据库主节点130包括:处理器31、网络接口32、高速缓存器33、存储器34和总线35。
处理器31包括一个或者一个以上处理核心,处理器31通过运行软件程序以及模块,从而执行各种功能应用以及数据处理。
网络接口32可以为多个,其中一部分网络接口32用于数据库主节点130与数据库集群节点120进行通信,另一部分网络接口32用于数据库主节点130与共享文件系统140进行通信。
存储器34与高速缓存器33分别通过总线35与处理器31相连。
存储器可以存储至少一个功能所需的应用程序模块36,应用程序模块36可以是接收模块361、执行模块362、发送模块363等。
接收模块361用于通过网络接口32接收数据库集群节点发送的访问请求。
执行模块362用于将访问请求存储至分发队列,并通过网络接口32向数据库集群节点发送接收响应,接收响应用于触发数据库集群节点挂起与访问请求对应的线程;以及从分发队列依次获取访问请求;以及根据访问请求,通过网络接口32从共享文件系统中读数据或写数据。
发送模块363用于通过网络接口32向数据库集群节点发送访问请求的返回响应;返回响应用于触发数据库集群节点唤醒线程。
存储器34可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
本领域技术人员可以理解,图3中所示出的数据库主节点130的结构并不构成对数据库主节点130的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
请参考图4,其示出了本发明一个示例性实施例提供的数据库访问方法的流程图。本实施例以该方法用于如图1所示的分布式数据库系统中来举例说明,由如图2所示的数据库集群节点120的处理器21或如图3所示的数据库主节点130的处理器31执行下述步骤,该方法包括以下几个步骤:
步骤401,数据库集群节点通过线程向数据库主节点发送访问请求;
可选的,多个数据库集群节点分别通过不同线程向数据库主节点发送访问请求,即存在并发访问的场景。
步骤402,数据库主节点接收数据库集群节点发送的访问请求;
步骤403,数据库主节点将访问请求存储至分发队列,并向数据库集群节点发送接收响应,接收响应用于触发数据库集群节点挂起与访问请求对应的线程;
步骤404,数据库集群节点接收数据库主节点发送的接收响应;
步骤405,数据库集群节点根据接收响应挂起该线程;步骤406,数据库主节点从分发队列依次获取访问请求;
步骤407,数据库主节点根据访问请求从共享文件系统中读数据或写数据;
步骤408,数据库主节点向数据库集群节点发送访问请求的返回响应,返回 响应用于触发数据库集群节点唤醒该线程;
步骤409,数据库集群节点接收数据库主节点发送的返回响应;
步骤410,数据库集群节点根据返回响应唤醒该线程。
需要说明的是,上述步骤401、404、405、409和410可以单独形成数据库集群节点一侧的数据库访问方法,上述步骤402、403、406、407和408可以单独形成数据库主节点一侧的数据库访问方法。
综上所述,本公开实施例提供的数据库访问方法,通过当多个数据库集群节点并发访问数据库主节点时,数据库主节点同时接收多个访问请求并存储至分发队列,再从分发队列中逐个获取访问请求并执行,使得在使用Sqlite数据库的共享文件系统中,数据库主节点能接收和处理并发的多个访问请求,而不会出现卡死的现象,使Sqlite数据库也能实现共享文件系统的并发机制,扩大了Sqlite数据库的使用范围。
请参考图5,其示出了本发明一个示例性实施例提供的数据库访问方法的流程图。本实施例以该方法运用于如图1所示的分布式数据库系统中来举例说明,该方法包括以下几个步骤:
步骤501,数据库集群节点接收数据库业务节点发送的访问请求。
数据库业务节点是提供数据库业务的节点,数据库业务节点根据提供的业务类型向与其连接的数据库集群节点发送访问请求,访问请求的类型包括:读请求和写请求。
本步骤可以由数据库集群节点中的处理器调用接收模块来实现。
步骤502,数据库集群节点解析访问请求。
数据库集群节点接收数据库业务节点发送的访问请求,数据库集群节点根据数据库消息发送协议对访问请求进行解析,从而得到数据库的类型和访问请求中的操作字段,数据库集群节点确定访问请求的类型为读请求或写请求,当访问请求的类型为读请求时,表示数据库业务节点请求从数据库读取数据;当访问请求的类型为写请求时,表示数据库业务节点请求将数据写入数据库。
可选的,数据库集群节点解析访问请求后,还得到:请求访问的数据所在的数据库、数据库的类型、请求访问的数据所在的表、请求访问的数据所在的行和列等消息,本实施例对访问请求中的内容不做限定。
当访问请求是请求从数据库中读取数据A时,数据库集群节点查找缓存的数据库数据,数据库数据可以存储在数据库集群节点自身的高速缓存器或存储器中,若数据库集群节点缓存的数据库数据中包括数据A,则数据库集群节点直接执行步骤515;若数据库集群节点缓存的数据库数据中不包括数据A,则数据库集群节点执行步骤503。
当访问请求是请求将数据B写入到数据库中时,则数据库集群节点执行步骤503。
本步骤可以由数据库集群节点中的处理器调用执行模块来实现。
步骤503,数据库集群节点通过线程向数据库主节点发送访问请求。
可选的,多个数据库集群节点同时向数据库主节点发送访问请求,也即,多个数据库业务节点通过数据库集群节点并发访问数据库主节点。
本步骤可以由数据库集群节点中的处理器调用发送模块来实现。
步骤504,数据库主节点接收数据库集群节点发送的访问请求。
可选的,数据库主节点同时接收多个访问请求。
本步骤可以由数据库主节点中的处理器调用接收模块来实现。
步骤505,数据库主节点将访问请求存储至分发队列。
数据库主节点对于接收到的访问请求并不直接进行解析处理,而是先依次存储至分发队列。可选的,数据库主节点根据访问请求的接收时刻的先后顺序,将访问请求存储至分发队列,即将先接收到的访问请求先存储至分发队列,后接收到的访问请求后存储至分发队列。数据库主节点还可以根据数据库集群节点发送访问请求的时刻的先后顺序,或其他顺序将访问请求存储至分发队列,本实施例对此不作限定。
可选的,当存在多个并发的访问请求时,数据库主节点同时接收到多个访问请求,则数据库主节点对于同时接收到的多个访问请求进行存储的先后顺序可以是随机的,也可以提前设定每一个访问请求的优先级,根据优先级确定存储的先后顺序,本公开实施例对此不作限定。
分发队列存储在数据库主节点的高速缓存器或存储器中。
本步骤可以由数据库主节点中的处理器调用执行模块来实现。
步骤506,数据库主节点向数据库集群节点发送接收响应,接收响应用于触发数据库集群节点挂起与访问请求对应的线程。
当数据库主节点成功将访问请求存储至分发队列后,数据库主节点通过该访问请求对应的线程向数据库集群节点发送接收响应。
本步骤可以由数据库主节点中的处理器调用发送模块来实现。
步骤507,数据库集群节点接收数据库主节点发送的接收响应。
本步骤可以由数据库集群节点中的处理器调用接收模块来实现。
步骤508,数据库集群节点根据接收响应挂起该线程。
数据库集群节点接收到接收响应,并将该接收响应对应的访问请求所在的线程进行挂起。
可选的,该线程为数据库集群节点的执行线程。
由于数据库主节点将访问请求先依次存储至分发队列再进行处理,即数据库主节点异步处理访问请求,也即数据库集群节点通过线程发送访问请求的过程,与数据库主节点处理访问请求并访问共享文件系统的过程并不是同步进行的。为了使数据库集群节点的线程在发送访问请求后与数据库主节点保持同步,数据库集群节点挂起该线程。
本步骤可以由数据库集群节点中的处理器调用执行模块来实现。
步骤509,数据库主节点从分发队列依次获取访问请求。
数据库主节点从分发队列中依次获取访问请求,且从分发队列获取访问请求的顺序与访问请求存储至分发队列的顺序相同,如图6所示的分发队列的示意图:
访问请求1、访问请求2……访问请求n依次存储在分发队列中,当数据库主节点从分发队列获取访问请求时,按照访问请求1、访问请求2……访问请求n的顺序从分发队列中获取。
本步骤可以由数据库主节点中的处理器调用执行模块来实现。
步骤510,数据库主节点解析访问请求。
数据库主节点对访问请求进行解析的方法与步骤502中数据库集群节点对访问请求进行解析的方法相同,数据库主节点确定访问请求的类型为读请求或写请求。
可选的,数据库集群节点解析访问请求后,还可以得到:请求访问的数据所在的数据库、数据库的类型、请求访问的数据所在的表、请求访问的数据所在的行和列,本实施例对访问请求中的内容不做限定。
本步骤可以由数据库主节点中的处理器调用执行模块来实现。
步骤511,数据库主节点根据访问请求从共享文件系统中读数据或写数据;
根据访问请求的类型不同,该步骤在读数据或写数据时的具体步骤也不同;
本步骤可以由数据库主节点中的处理器调用执行模块来实现。
当访问请求的类型为读请求时,步骤511为数据库主节点根据访问请求从共享文件系统中读数据,具体包括以下几个步骤,如图7所示:
步骤701,数据库主节点提交与访问请求对应的读任务至读任务线程。
数据库主节点将一个读任务提交至一个读任务线程,可选的,存在多个读任务线程,每一个读任务线程执行一个读任务。
可选的,最多存在N个读任务线程,当N个读任务线程都在执行读任务时,数据库主节点停止将读请求提交到读任务线程;当N个读任务线程中存在至少一个读任务线程空闲时,数据库主节点继续将读请求提交到空闲的读任务线程。本实施例对N的取值不作限定。
本步骤可以由数据库主节点中的处理器调用执行模块来实现。
步骤702,数据库主节点中的读任务线程为读任务分配独立的数据库句柄。
每一个读任务线程都为与其对应的读任务分配一个数据库句柄,每一个读任务的数据库句柄都是独立的。
本步骤可以由数据库主节点中的处理器调用执行模块来实现。
步骤703,数据库主节点根据数据库句柄和读任务,通过该读任务线程从共享文件系统读数据。
对于每一个读任务,数据库主节点通过其所在的读任务线程读取其对应的数据库句柄,直接读取到读任务请求的数据库数据。
本步骤可以由数据库主节点中的处理器调用执行模块来实现。
如图7所示,当存在多个读任务时,同时存在多个读任务线程,则对于每一个读任务,数据库主节点都执行步骤701~703。
当访问请求的类型为写请求时,步骤511为数据库主节点根据访问请求向共享文件系统中写数据,具体包括以下几个步骤,如图8所示:
步骤801,当写任务线程为空闲时,数据库主节点提交与访问请求对应的写任务至写任务线程,写任务线程用于根据写任务向共享文件系统写入数据。
数据库主节点中只存在一个写任务线程,数据库主节点先判断该写任务线 程中是否有写任务在执行,若写任务线程空闲,则数据库主节点将访问请求对应的写任务提交至写任务线程。
可选的,若写任务线程中有写任务在执行,则数据库主节点停止将写请求提交到写任务线程。
本步骤可以由数据库主节点中的处理器调用执行模块来实现。
步骤802,数据库主节点中的写任务线程根据写任务向共享文件系统写入数据。
本步骤可以由数据库主节点中的处理器调用执行模块来实现。
当数据库主节点根据步骤703或步骤802从共享文件系统读取数据或将数据写入共享文件系统成功时,执行步骤512。
步骤512,数据库主节点向数据库集群节点发送访问请求的返回响应,返回响应用于触发数据库集群节点唤醒该线程。
可选的,数据库主节点确定对访问请求执行成功,则生成返回响应;或者,数据库主节点接收共享文件系统发送的返回响应,本实施例对此不作限定。
可选的,在访问请求的类型是读请求时,返回响应包括:请求读取的数据。在访问请求的类型是写请求时,返回响应包括:写入成功响应,其中,写入成功响应用于提示数据已经成功写入数据库中。本实施例对返回响应的内容不作限定。
数据库主节点将返回响应发送至对应的数据库集群节点。
本步骤可以由数据库主节点中的处理器调用发送模块来实现。
步骤513,数据库集群节点接收数据库主节点发送的返回响应。
本步骤可以由数据库集群节点中的处理器调用接收模块来实现。
步骤514,数据库集群节点根据返回响应唤醒该线程。
数据库集群节点接收访问请求对应的返回响应,根据返回响应唤醒该线程,并通过该线程将返回响应发送给数据库业务节点。
本步骤可以由数据库集群节点中的处理器调用执行模块来实现。
步骤515,数据库集群节点将返回响应发送给数据库业务节点。
若数据库集群节点缓存的数据库数据中包括数据库业务节点访问请求中请求读取的数据,则返回响应是数据库集群节点根据请求生成的。
若数据库集群节点缓存的数据库数据中不包括数据库业务节点访问请求中 请求读取的数据,返回响应是数据库集群节点执行上述数据库访问方法后获取到的。
本步骤可以由数据库集群节点中的处理器调用发送模块来实现。
综上所述,本公开实施例提供的数据库访问方法,当多个数据库集群节点并发访问数据库主节点时,数据库主节点同时接收多个访问请求并存储至分发队列,再从分发队列中逐个获取访问请求并执行,使得在使用Sqlite数据库的共享文件系统中,数据库主节点能接收和处理并发的多个访问请求,而不会出现卡死的现象,使Sqlite数据库也能实现共享文件系统的并发机制,扩大了Sqlite数据库的使用范围。
综上所述,本公开实施例提供的数据库访问方法,通过对访问请求进行解析获得访问请求的类型,对读请求,为每一个读请求分配一个独立的数据库句柄进行访问,读请求单独使用一个数据库句柄进行访问,使读任务之间相互独立,能够并发访问,使Sqlite数据库能够支持并发的读访问;对于写请求,数据库主节点在同一时间只执行一个写请求,保证了不会存在多个写请求对同一数据区域进行修改的情况,保证了数据的一致性。
可选的,在基于图5的其他可选实施例中,当数据库主节点出现故障,或当数据库主节点与数据库集群节点的连接断开,或在其他情况下,数据库集群节点不能接收到接收响应,则该实施例包括步骤507a,如图9所示:
步骤507a,数据库集群节点在第一预定时间内未接收到接收响应时,重新向备用数据库主节点发送访问请求。
数据库集群节点在第一预定时间内没有通过线程接收到数据库主节点发送的接收响应,则重新向备用数据库主节点发送访问请求,即重新执行上述图5所示实施例中的步骤503,本实施例对第一预定时间不作限定。
本步骤可以由数据库集群节点中的处理器调用发送模块来实现。
综上所述,本公开实施例提供的数据库访问方法,当数据库主节点出现故障时,数据库集群节点可以快速切换为向备用数据库主节点发送访问请求,减少数据库主节点切换所使用的时间,减小了数据库操作对数据库上层业务的影响。
可选的,在基于图5的其他可选实施例中,当数据库主节点从共享文件系统中读数据或对共享文件系统写入数据失败时,数据库主节点不向数据库集群节点发送返回响应,则该实施例包括以下步骤512a,如图10所示:
步骤512a,数据库集群节点在第二预定时间内未接收到返回响应时,重新向备用数据库主节点发送访问请求。
数据库集群节点在第二预定时间内没有通过线程接收到数据库主节点发送的返回响应,则重新向备用数据库主节点发送访问请求,即重新执行上述图5所示实施例中的步骤503,本实施例对第二预定时间不作限定。
本步骤可以由数据库集群节点中的处理器调用发送模块来实现。
综上所述,本公开实施例提供的数据库访问方法,当数据库主节点出现故障时,数据库集群节点可以快速切换为向备用数据库主节点发送访问请求,减少数据库主节点切换所使用的时间,减小了数据库操作对数据库上层业务的影响。
可选的,在基于图5的其他可选的实施例中,当数据库主节点从共享文件系统中读数据或对共享文件系统写入数据失败时,数据库主节点向数据库发送访问失败响应,则该实施例包括以下步骤,如图11所示:
步骤512b,数据库主节点向数据库集群节点发送访问失败响应。
可选的,数据库主节点确定对访问请求执行失败,则生成访问失败响应;或者,数据库主节点接收共享文件系统发送的访问失败响应,本实施例对此不作限定。
本步骤可以由数据库主节点中的处理器调用发送模块来实现。
步骤513b,数据库集群节点接收数据库主节点发送的访问失败响应。
本步骤可以由数据库集群节点中的处理器调用接收模块来实现。
步骤514b,数据库集群节点重新向备用数据库主节点发送访问请求。
访问失败响应用于向数据库集群节点提示数据库主节点访问共享文件系统失败,则数据库集群节点重新向备用数据库主节点发送访问请求,即重新执行上述图5所示实施例中的步骤503。
本步骤可以由数据库集群节点中的处理器调用发送模块来实现。
综上所述,本公开实施例提供的数据库访问方法,当数据库主节点出现故 障时,数据库集群节点可以快速切换为向备用数据库主节点发送访问请求,减少数据库主节点切换所使用的时间,减小了数据库操作对数据库上层业务的影响。
请参考图12,其示出了本发明一个实施例提供的数据库访问装置的框图。该数据库访问装置可以通过软件、硬件或者两者的结合实现成为数据库集群节点的全部或者一部分。该数据库访问装置可以包括:发送单元1210、接收单元1220和执行单元1230。
发送单元1210,用于实现上述步骤401功能。
接收单元1220,用于实现上述步骤404、步骤409中至少一个步骤的功能。
执行单元1230,用于实现上述步骤405、步骤410中至少一个步骤的功能。
相关细节可结合参考上述方法实施例。
请参考图13,其示出了本发明一个实施例提供的数据库访问装置的框图。该数据库访问装置可以通过软件、硬件或者两者的结合实现成为数据库主节点的全部或者一部分。该数据库访问装置可以包括:接收单元1310、执行单元1320和发送单元1330。
接收单元1310,用于实现上述步骤402的功能。
执行单元1320,用于实现上述步骤403、步骤406、步骤407中至少一个步骤的功能。
发送单元1330,用于实现上述步骤408的功能。
相关细节可结合参考上述方法实施例。
在另一个可选的实施例中,上述发送单元1210,用于实现步骤503、步骤507a、步骤512a、步骤514b、步骤515中的至少一个步骤的功能。
上述接收单元1220,用于实现步骤501、步骤507、步骤513b、步骤513中至少一个步骤的功能。
上述执行单元1230,用于实现步骤502、步骤508、步骤514中至少一个步骤的功能。
在另一个可选的实施例中,上述接收单元1310,用于实现步骤504的功能。
上述执行单元1320,用于实现步骤505、步骤509、步骤510、步骤511、步骤701、步骤702、步骤703、步骤801、步骤802中至少一个步骤的功能。
发送单元1330,用于实现上述步骤506、步骤512b、步骤512中至少一个步骤的功能。
需要说明的是,上述的发送单元1210可以通过数据库集群节点的处理器执行存储器中的发送模块来实现;上述的接收单元1220可以通过数据库集群节点的处理器执行存储器中的接收模块来实现;上述执行单元1230可以通过数据库集群节点的处理器执行存储器中的执行模块来实现;上述接收单元1310可以通过数据库主节点的处理器执行存储器中的接收模块来实现;上述执行单元1320可以通过数据库主节点的处理器执行存储器中的执行模块来实现;上述发送单元1330可以通过数据库主节点的处理器执行存储器中的发送模块来实现。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。