数据库访问的实现方法和装置与流程

文档序号:13282219阅读:227来源:国知局
数据库访问的实现方法和装置与流程

本说明书涉及数据库技术领域,尤其涉及一种数据库访问的实现方法和装置。



背景技术:

数据库(database)是按照数据结构来组织、存储和管理数据的仓库。当数据量较大时,可以采用读写分离的数据库架构。在读写分离的数据库架构中,可以由写库对外提供增加、删除、修改的功能,由读库对外提供读取功能。当插入数据量剧增时,需要提供更可靠的数据库访问的实现方案。



技术实现要素:

有鉴于此,本说明书提供一种数据库访问的实现方法和装置。

具体地,本说明书是通过如下技术方案实现的:

一种数据库访问的实现方法,应用于读写分离的数据库架构中,该读写分离的数据库架构包括主写库、弹性写库以及读库,其中,所述主写库与所述读库之间基于同步策略进行数据同步,所述数据库访问的实现方法包括:

接收到数据插入请求,所述数据插入请求中携带业务类型;

确定所述业务类型的访问状态;

当所述访问状态为日常状态时,基于主写库完成数据插入;

当所述访问状态为弹写状态时,基于弹性写库完成数据插入。

一种数据库访问的实现方法,应用于读写分离的数据库架构中,该读写分离的数据库架构包括主写库、弹性写库以及读库,其中,所述主写库与所述读库之间基于同步策略进行数据同步,所述数据库访问的实现方法包括:

在接收到数据插入请求时,确定数据库的访问状态;

当所述访问状态为日常状态时,基于主写库完成数据插入;

当所述访问状态为弹写状态时,基于弹性写库完成数据插入。

一种数据库访问的实现装置,应用于读写分离的数据库架构中,该读写分离的数据库架构包括主写库、弹性写库以及读库,其中,所述主写库与所述读库之间基于同步策略进行数据同步,所述数据库访问的实现装置包括:

请求接收单元,接收到数据插入请求,所述数据插入请求中携带业务类型;

状态确定单元,确定所述业务类型的访问状态;

主库插入单元,当所述访问状态为日常状态时,基于主写库完成数据插入;

弹性插入单元,当所述访问状态为弹写状态时,基于弹性写库完成数据插入。

一种数据库访问的实现装置,应用于读写分离的数据库架构中,该读写分离的数据库架构包括主写库、弹性写库以及读库,其中,所述主写库与所述读库之间基于同步策略进行数据同步,所述数据库访问的实现装置包括:

处理器;

用于存储机器可执行指令的存储器;

其中,通过读取并执行所述存储器存储的与数据库访问的实现逻辑对应的机器可执行指令,所述处理器被促使:

接收到数据插入请求,所述数据插入请求中携带业务类型;

确定所述业务类型的访问状态;

当所述访问状态为日常状态时,基于主写库完成数据插入;

当所述访问状态为弹写状态时,基于弹性写库完成数据插入。

由以上描述可以看出,本说明书可在访问状态是日常状态时,基于主写库完成对应业务类型的数据插入,在访问状态是弹写状态时,基于弹性写库完成对应业务类型的数据插入。通过对访问状态的区分,可以在插入数据量剧增时,基于弹性写库实现数据的稳定插入,提高数据库架构的可靠性。

附图说明

图1是本说明书一示例性实施例示出的一种数据库架构示意图。

图2是本说明书一示例性实施例示出的一种数据库访问的实现方法的流程示意图。

图3是本说明书一示例性实施例示出的另一种数据库访问的实现方法的流程示意图。

图4是本说明书一示例性实施例示出的一种用于数据库访问的实现装置的一结构示意图。

图5是本说明书一示例性实施例示出的一种数据库访问的实现装置的框图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。

在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

图1是本说明书一示例性实施例示出的一种数据库架构示意图。

请参考图1,所述数据库架构可以包括主写库、弹性写库以及读库。其中,主写库与读库之间基于同步策略进行数据同步,比如:主写库与读库之间可以基于设定的时间周期进行数据同步等。图1示出了两个读库,在实际应用中也可以设置1个、3个或者更多的读库,本说明书对此不作特殊限制。

在本实施例中,上述数据库架构可用于存储多种不同业务的数据。举例来说,上述数据库架构可以用于存储注册类业务的数据,还可以用于存储签约类业务的数据等。

在本实施例中,可以为每种类型的业务设置对应的数据库访问状态。该访问状态可以划分为三种,分别为:日常状态、弹写状态以及回迁状态。其中,日常状态通常是默认的访问状态,表示插入数据量正常,未发生短期内插入数据量剧增等特殊情况。弹写状态表示一定时期内会发生插入数据量剧增等特殊情况,比如:服务提供方开展拉新活动,短期内有大量的新用户注册,可能导致注册类业务的插入数据量剧增。回迁状态表示插入数据量剧增的时期已经过去,插入数据量又恢复正常,可以将插入数据量剧增期间的数据回迁。其中,还可以将回迁状态详细划分为预回迁状态和正式回迁状态,预回迁状态表示即将进行回迁操作,而正式回迁状态表示回迁的整个过程等,本说明书对此不作特殊限制。

在实际应用中,可以为每种类型的业务设置数据库访问状态的标志位,比如:标志位是0表示日常状态,标志位是1表示弹写状态,标志位是2表示回迁状态等,本说明书对此不作特殊限制。

上述三种访问状态的切换可以由人工进行控制,比如:相关人员可以在开展拉新活动时,将注册类业务的访问状态由日常状态更新为弹写状态;在拉新活动结束后可将注册类业务的访问状态由弹写状态更新为回迁状态;在确定回迁结束后,可以将注册类业务的访问状态由回迁状态更新为日常状态。当然,还可以设置访问状态的自动更新方案,以注册类业务为例,可以在检测到插入数据量满足设定条件的时候,将该类业务的访问状态由日常状态更新到弹写状态等,本说明书对此不作特殊限制。

基于图1所示的数据库架构,请参考图2,本说明书提供的数据库访问的实现方法可以包括以下步骤:

步骤202,接收到数据插入请求,所述数据插入请求中携带业务类型。

在本实施例中,数据插入请求中通常携带有业务类型,比如:业务类型的标识信息等。

步骤204,确定所述业务类型的访问状态。

基于前述步骤202,可以根据数据插入请求的业务类型确定其对应的访问状态,比如:查找该业务类型的数据库访问状态标志位,根据标志位的取值确定其访问状态等。

步骤206,当所述访问状态为日常状态时,基于主写库完成数据插入。

基于前述步骤204的确定结果,若所述业务类型的访问状态是日常状态,则说明该类型业务的插入数据量正常,可基于主写库完成数据插入。

在日常状态下,数据的修改、删除都可以基于主写库完成,数据的查询可以基于读库完成。

步骤208,当所述访问状态为弹写状态时,基于弹性写库完成数据插入。

基于前述步骤204的确定结果,若所述业务类型的访问状态是弹写状态,则说明该类型业务的插入数据量可能会发生剧增,为确保数据插入不受到主写库和读库之间数据同步的限制,可以将该业务类型的数据插入到弹性库中。

举例来说,以注册类业务为例,在正常情况下,注册类业务的插入数据量是比较稳定的,比如:每天注册的新用户数量相对稳定,该注册类业务的访问状态是日常状态,可以基于主写库完成数据插入,即将新的注册信息插入到主写库中。

假设,服务提供方开展拉新活动,相关人员将注册类业务的访问类型更新为弹写状态,则可以基于弹性写库完成数据插入,即将新的注册信息插入到弹性写库中,以满足拉新活动期间内注册类业务的插入数据库剧增的需求。

可选的,在弹写状态下,还可以在弹性写库中维护与注册类业务对应的全局插入表,该全局插入表中可以记载所有插入到弹性写库中的注册类数据的列表,比如:以注册号为索引等,以便后续数据查询和回迁时使用。当然,若有多个业务类型的数据均写入到弹性写库中,则可以在弹性写库中维护多张全局插入表,分别与业务类型相对应。在实际应用中,也可以仅维护一张全局插入表,每条表项标记有对应的业务类型,本说明书对此不作特殊限制。

由以上描述可以看出,本说明书可在访问状态是日常状态时,基于主写库完成对应业务类型的数据插入,在访问状态是弹写状态时,基于弹性写库完成对应业务类型的数据插入。通过对访问状态的区分,可以在插入数据量剧增时,基于弹性写库实现数据的稳定插入,提高数据库架构的可靠性。

基于前述图2所示的实施例,在另一个例子中,当上述业务类型的访问状态由弹写状态更新为回迁状态时,可将弹性写库中该业务类型的数据回迁至主写库中,并在接收到针对该业务类型的数据插入请求时,基于主写库完成数据插入。

举例来说,仍以服务提供方开展拉新活动为例,当拉新活动结束后,相关人员可以将注册类业务的访问状态更新为回迁状态,当然,在实际应用中在设置弹写状态时,也可以设置对应的弹写时长,比如:3天,在到达所述弹写时长时,可以自动将访问状态由弹写状态更新为回迁状态,本说明书对此不作特殊限制。

在该回迁状态下,可以将弹性写库中注册类业务的数据回迁到主写库中,以实现对弹性写库存储资源的释放,比如:可以以注册类业务的全局插入表为依据,在弹性库中查找写入到弹性写库中的新的注册信息,然后将这些注册信息回迁到主写库中等。

在回迁状态下,若接收到相关业务类型的数据插入请求,则可以基于主写库完成数据插入。此外,为确保数据一致性,在回迁状态下,可以停止对弹性库进行该业务类型的数据修改和删除操作。

由以上描述可以看出,本说明书通过部署弹性写库,可以在插入数据量剧增时,实现数据的稳定插入,并在插入数据量恢复正常时释放弹性写库中的存储资源。通过对业务类型的区分,可以应对多业务类型的插入数据量剧增情况,节省了大量的存储成本。

基于前述图2所示的实施例,在弹写状态下,若接收到针对上述业务类型的数据查询请求,则可以先通过分析确定所述数据查询请求的查询类别,然后根据查询类别确定查询策略。其中,所述查询类别通常包括一对多查询和一对一查询。举例来说,由于登录号通常仅对应一个账号,所以基于登录号的查询是一对一查询;而手机号通常可以对应多个账号,所以基于手机号的查询是一对多查询。

在本实施例中,一对多查询表示要查询的数据可能存储在多张数据表中。仍以注册类业务为例,在日常状态下,注册信息插入到主写库中,后续可基于同步策略同步到读库中,而在弹写状态下,新的注册信息写入到弹性写库中,所以要查询的数据可能在读库中,也可能在弹性写库中,为确保查询到的数据准确全面,可以分别在读库和弹性写库中进行查询,然后将查询结果合并后返回。

在本实施例中,一对一查询表示要查询的数据存储在一张数据表中。仍以注册类业务为例,在弹写状态下,要查询的数据可能是以前的注册信息,存储于读库中,也可能是拉新活动时的注册信息,存储于弹性写库中,所以在查询时可以先查询读库,若查询到,则可以直接返回。若在读库中未查询到,则可以再查询弹性写库,并将查询结果返回。当然,在实际应用中,也可以先查询弹性写库,当弹性写库中未查询到时,再在读库中进行查询,本说明书对此不作特殊限制。

可选的,在回迁状态下,若接收到数据查询请求,则可以参照弹写状态下的查询策略进行查询,本说明书在此不再一一赘述。

基于前述图2所示的实施例,在弹写状态下,若接收到针对上述业务类型的数据修改或删除请求,则可以基于所述弹性写库中的全局插入表判断目标数据是否存储在弹性写库中,若目标数据存储在弹性写库中,则可基于弹性写库完成数据修改或删除;若目标数据未存储在弹性写库中,则可基于主写库完成数据修改或删除。

基于前述图2所示的实施例,仍以注册类业务为例,在弹写状态下,由于老的注册信息存储在读库中,而新的注册信息要插入到弹性写库中,为确保账号等字段的唯一性,可以由dal(dataaccesslayer,数据访问层)拦截器基于插入请求的目标字段判断是否需要加锁,比如:可以预先设定需要确保唯一性的字段,若插入请求的目标字段是命中预先设定需要确保唯一性的字段,则可以添加dao(dataaccessobject,数据访问对象)注解标示,所述dao注解标示通常包括:业务类型和所述目标字段。若不需要加锁,则可以不添加dao注解标示。

在添加dao注解标示后,可以启动异步线程基于所述注解标示进行加锁操作,若加锁成功,则可以进行数据插入操作,并在插入成功后释放锁资源;若加锁失败,则可以等待一定的时间后再次尝试加锁。当然,还可以设置定时任务删除过期的加锁线程等,加锁以及锁资源释放的过程可以参照相关技术,本说明书在此不再一一赘述。

在本实施例中,dal拦截器可以动态添加dao注解标示,实现加锁与业务逻辑的解耦。后续基于添加的dao注解标示,可以启动异步线程实现加锁操作,进而以低成本的方式实现全局唯一性的控制。

可选的,基于图1所示的数据库架构,当该数据库架构仅处理一种业务类型的数据时,也可以不进行业务类型的区分。在这种情况下,请参考图3,数据库访问的实现方法可以包括以下步骤:

步骤302,在接收到数据插入请求时,确定数据库的访问状态。

步骤304,当所述访问状态为日常状态时,基于主写库完成数据插入。

步骤306,当所述访问状态为弹写状态时,基于弹性写库完成数据插入。

在本实施例中,弹写状态下的数据修改、查询,以及回迁状态下的插入、修改等处理策略可以参考前述实施例,本说明书在此不再一一赘述。

与前述图2所示的数据库访问的实现方法的实施例相对应,本说明书还提供了数据库访问的实现装置的实施例。

本说明书数据库访问的实现装置的实施例可以应用在服务器上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在服务器的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图4所示,为本说明书数据库访问的实现装置所在服务器的一种硬件结构图,除了图4所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的服务器通常根据该服务器的实际功能,还可以包括其他硬件,对此不再赘述。

图5是本说明书一示例性实施例示出的一种数据库访问的实现装置的框图。

请参考图5,所述数据库访问的实现装置400可以应用于读写分离的数据库架构中,该读写分离的数据库架构包括主写库、弹性写库以及读库,其中,所述主写库与所述读库之间基于同步策略进行数据同步,所述数据库访问的实现装置400可以包括:请求接收单元401、状态确定单元402、主库插入单元403、弹性插入单元404、回迁单元405、停止单元406、数据查询单元407以及数据删改单元408。

其中,请求接收单元401,接收到数据插入请求,所述数据插入请求中携带业务类型;

状态确定单元402,确定所述业务类型的访问状态;

主库插入单元403,当所述访问状态为日常状态时,基于主写库完成数据插入;

弹性插入单元404,当所述访问状态为弹写状态时,基于弹性写库完成数据插入。

回迁单元405,当所述业务类型的访问状态由弹写状态更新为回迁状态时,将弹性写库中所述业务类型的数据回迁至主写库中,在接收到针对所述业务类型的数据插入请求时,通知主库插入单元基于主写库完成数据插入。

停止单元406,在所述回迁状态下,停止对弹性库进行所述业务类型的数据修改和数据删除操作。

数据查询单元407,在所述弹写状态下,若接收到针对所述业务类型的数据查询请求,则确定所述数据查询请求的查询类别;

若所述查询类别为一对多查询,则分别查询读库和弹性写库,并将查询结果合并后返回;

若所述查询类别为一对一查询,则查询读库,若在读库中未查询到,则查询弹性写库,并将查询结果返回。

数据删改单元408,在所述弹写状态下,若接收到针对所述业务类型的数据修改或删除请求,则基于所述弹性写库中的全局插入表判断目标数据是否存储在弹性写库中;

若目标数据存储在弹性写库中,则基于弹性写库完成数据修改或删除;

若目标数据未存储在弹性写库中,则基于主写库完成数据修改或删除。

可选的,所述弹性插入单元404基于弹性写库完成数据插入的过程,包括:

dal拦截器基于目标字段判断是否需要加锁;

若需要加锁,则添加dao注解标示,所述dao注解标示包括:业务类型和所述目标字段;

启动异步线程基于所述注解标示进行加锁操作;

若加锁成功,则进行数据插入,并在数据插入成功后释放锁资源。

上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。

与前述图2所示的数据库访问的实现方法的实施例相对应,本说明书还提供一种数据库访问的实现装置,应用于读写分离的数据库架构中,该读写分离的数据库架构包括主写库、弹性写库以及读库,其中,所述主写库与所述读库之间基于同步策略进行数据同步,该数据库访问的实现装置包括:处理器以及用于存储机器可执行指令的存储器。其中,处理器和存储器通常借由内部总线相互连接。在其他可能的实现方式中,所述设备还可能包括外部接口,以能够与其他设备或者部件进行通信。

在本实施例中,通过读取并执行所述存储器存储的与数据库访问的实现逻辑对应的机器可执行指令,所述处理器被促使:

接收到数据插入请求,所述数据插入请求中携带业务类型;

确定所述业务类型的访问状态;

当所述访问状态为日常状态时,基于主写库完成数据插入;

当所述访问状态为弹写状态时,基于弹性写库完成数据插入。

可选的,通过读取并执行所述存储器存储的与数据库访问的实现逻辑对应的机器可执行指令,所述处理器还被促使:

当所述业务类型的访问状态由弹写状态更新为回迁状态时,将弹性写库中所述业务类型的数据回迁至主写库中,并在接收到针对所述业务类型的数据插入请求时,基于主写库完成数据插入。

可选的,通过读取并执行所述存储器存储的与数据库访问的实现逻辑对应的机器可执行指令,所述处理器还被促使:

在所述回迁状态下,停止对弹性库进行所述业务类型的数据修改和数据删除操作。

可选的,通过读取并执行所述存储器存储的与数据库访问的实现逻辑对应的机器可执行指令,所述处理器还被促使:

在所述弹写状态下,若接收到针对所述业务类型的数据查询请求,则确定所述数据查询请求的查询类别;

若所述查询类别为一对多查询,则分别查询读库和弹性写库,并将查询结果合并后返回;

若所述查询类别为一对一查询,则查询读库,若在读库中未查询到,则查询弹性写库,并将查询结果返回。

可选的,通过读取并执行所述存储器存储的与数据库访问的实现逻辑对应的机器可执行指令,所述处理器还被促使:

在所述弹写状态下,若接收到针对所述业务类型的数据修改或删除请求,则基于所述弹性写库中的全局插入表判断目标数据是否存储在弹性写库中;

若目标数据存储在弹性写库中,则基于弹性写库完成数据修改或删除;

若目标数据未存储在弹性写库中,则基于主写库完成数据修改或删除。

可选的,在完成数据插入时,所述处理被促使:

基于目标字段判断是否需要加锁;

若需要加锁,则添加dao注解标示,所述dao注解标示包括:业务类型和所述目标字段;

启动异步线程基于所述注解标示进行加锁操作;

若加锁成功,则进行数据插入,并在数据插入成功后释放锁资源。

与前述图2所示的数据库访问的实现方法的实施例相对应,本说明书还提供一种计算机可读存储介质,应用于读写分离的数据库架构中,该读写分离的数据库架构包括主写库、弹性写库以及读库,其中,所述主写库与所述读库之间基于同步策略进行数据同步,所述计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现以下步骤:

接收到数据插入请求,所述数据插入请求中携带业务类型;

确定所述业务类型的访问状态;

当所述访问状态为日常状态时,基于主写库完成数据插入;

当所述访问状态为弹写状态时,基于弹性写库完成数据插入。

可选的,还包括:

当所述业务类型的访问状态由弹写状态更新为回迁状态时,将弹性写库中所述业务类型的数据回迁至主写库中,并在接收到针对所述业务类型的数据插入请求时,基于主写库完成数据插入。

可选的,还包括:

在所述回迁状态下,停止对弹性库进行所述业务类型的数据修改和数据删除操作。

可选的,还包括:

在所述弹写状态下,若接收到针对所述业务类型的数据查询请求,则确定所述数据查询请求的查询类别;

若所述查询类别为一对多查询,则分别查询读库和弹性写库,并将查询结果合并后返回;

若所述查询类别为一对一查询,则查询读库,若在读库中未查询到,则查询弹性写库,并将查询结果返回。

可选的,还包括:

在所述弹写状态下,若接收到针对所述业务类型的数据修改或删除请求,则基于所述弹性写库中的全局插入表判断目标数据是否存储在弹性写库中;

若目标数据存储在弹性写库中,则基于弹性写库完成数据修改或删除;

若目标数据未存储在弹性写库中,则基于主写库完成数据修改或删除。

可选的,所述完成数据插入的过程包括:

dal拦截器基于目标字段判断是否需要加锁;

若需要加锁,则添加dao注解标示,所述dao注解标示包括:业务类型和所述目标字段;

启动异步线程基于所述注解标示进行加锁操作;

若加锁成功,则进行数据插入,并在数据插入成功后释放锁资源。

上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1