一种数据写入方法及装置与流程

文档序号:16918722发布日期:2019-02-19 19:10阅读:139来源:国知局
一种数据写入方法及装置与流程

本说明书实施例涉及数据存储技术领域,尤其涉及一种数据写入方法及装置。



背景技术:

tps(transactionpersecond,每秒事务处理量),一个表达系统处理能力的性能指标,通常可以用它作为衡量数据库数据写入能力的重要指标。

在第三方支付中,随着用户数量的增多,第三方支付实时交易量级日益增大,传统的在数据库中实时写入数据的方式已出现瓶颈,例如单机oracle的tps为1万左右,显然无法满足实时交易量级日益增大的需求。

而为了解决上述问题,目前普遍采用的方式是:增加多台存储服务器,在增加的存储服务器上分别配置与原有数据库类型一致的数据库,将第三方支付中业务服务器产生的数据进行拆分,写入到多台存储服务器上的数据库。如此一来,相应的会增加硬件成本,同时也额外增加了存储服务器的维护成本。



技术实现要素:

针对上述技术问题,本说明书实施例提供一种数据写入方法及装置,技术方案如下:

一种数据写入方法,预先配置与数据库对应的数据缓存,以及配置相互独立工作的第一进程、第二进程,该方法包括:

第一进程接收业务服务器下发的写数据请求;

解析所述写数据请求中携带的待写入数据;

判断数据库的负载是否超过预设的阈值;

若是,将所述待写入数据存储至所述数据缓存;

第二进程确定数据库的负载状况;

在确定数据库的负载未超过预设的阈值的情况下,读取所述数据缓存中的待写入数据,将所读取的待写入数据写入数据库。

一种数据写入装置,预先配置与数据库对应的数据缓存,以及配置相互独立工作的第一进程、第二进程,该装置包括:

请求接收模块,用于第一进程接收业务服务器下发的写数据请求;

请求解析模块,用于解析所述写数据请求中携带的待写入数据;

判断模块,用于判断数据库的负载是否超过预设的阈值;

数据存储模块,用于若是,将所述待写入数据存储至所述数据缓存;

确定模块,用于第二进程确定数据库的负载状况;

数据读取模块,用于在确定数据库的负载未超过预设的阈值的情况下,读取所述数据缓存中的待写入数据;

数据写入模块,用于将所读取的待写入数据写入数据库。

本说明书实施例所提供的技术方案,在不增加成本的情况下,满足实时交易量级日益增大的需求。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书实施例。

此外,本说明书实施例中的任一实施例并不需要达到上述的全部效果。

附图说明

为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1是现有技术方案中业务服务器与存储服务器的连接示意图;

图2是本说明书实施例的数据库分库与数据缓存文件的对应关系示意图;

图3是本说明书实施例的数据写入方法的流程示意图;

图4是本说明书实施例的数据写入装置的结构示意图;

图5是用于配置本说明书实施例装置的一种设备的结构示意图。

具体实施方式

tps作为一个表达系统处理能力的性能指标,通常也用它来衡量数据库的数据写入能力,不同类型的数据库的数据写入能力不同。例如单机oracle的tps为1万左右。

在第三方支付中,随着用户数量的增多,第三方支付实时交易量级日益增大,尤其在特定的时刻,实时交易量级剧增,传统的在数据库中实时写入数据的方式已出现瓶颈,例如上述所说的单机oracle的tps为1万左右,显然无法满足实时交易量级日益增大的需求。

而为了解决上述问题,目前普遍采用的方式是:在原有存储服务器的基础上增加多台存储服务器,例如增加三台存储服务器,在增加的存储服务器上分别配置与原有数据库类型一致的数据库,例如在原有存储服务器a上配置的数据库为oracle,则在存储服务器b、存储服务器c、存储服务器d上分别配置oracle数据库,将第三方支付中业务服务器产生的数据进行拆分,例如将数据a拆分成数据a1、数据a2、数据a3、数据a4,将数据a1写入存储服务器a,数据a2写入存储服务器b,数据a3写入存储服务器c,数据a4写入存储服务器d,其连接示意图如图1所示。如此一来,相应的会增加硬件成本,同时也额外增加了存储服务器的维护成本。

本说明书实施例所提供的技术方案,在原有服务器配置的前提下,预先配置与数据库对应的数据缓存,在数据写入的过程中,通过判断数据库的负载状况,来决定待写入数据直接写入数据库,还是存储至数据缓存,后续在闲时将数据缓存中的待写入数据写入数据库。如此一来,在不增加成本的情况下,依然可以满足实时交易量级日益增大的需求。

具体的,本说明书实施例提供的技术方案如下:

预先配置与数据库对应的数据缓存,以及配置相互独立工作的第一进程、第二进程;

第一进程接收业务服务器下发的写数据请求;解析所述写数据请求中携带的待写入数据;判断数据库的负载是否超过预设的阈值;若是,将所述待写入数据存储至所述数据缓存;第二进程确定数据库的负载状况;在确定数据库的负载未超过预设的阈值的情况下,读取所述数据缓存中的待写入数据,将所读取的待写入数据写入数据库。

为了使本领域技术人员更好地理解本说明书实施例中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本说明书的一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于保护的范围。

在执行本说明书实施例提供的技术方案之前,预先配置与数据库对应的数据缓存,以及配置相互独立工作的第一进程、第二进程;

一般在数据库的使用过程中,为了充分使用某个数据库,一般都会选择分库分表,例如对于oracle数据库,一般会建立多个分库,每个分库中存在不同的数据表,例如所建立的分库为db_1、db_2……db_n。在上述场景下,预先配置与数据库对应的数据缓存,即为预先配置与数据库分库对应的数据缓存,其中所建立的数据缓存可以是cache内存空间,也可以是数据缓存文件,本说明书实施例对此不作限定。以数据缓存文件为例,预先配置与数据库分库对应的数据缓存文件,即file_1、file_2……file_n,数据库分库与数据缓存文件的对应关系图如图2所示。

另外,配置相互独立工作的第一进程以及第二进程,其中第一进程以及第二进程执行的步骤如下所示:

如图3所示,为本说明书实施例提供的数据写入方法的流程示意图,该方法可以包括以下步骤:

s301,第一进程接收业务服务器下发的写数据请求;

在原有业务服务器与存储服务器进行连接的情况下,如业务服务器与存储服务器a连接的情况下,第一进程接收业务服务器下发的写数据请求,其中在同一时刻,第一进程可以同时接收多个写数据请求,例如接收2万条写数据请求。

s302,解析所述写数据请求中携带的待写入数据;

针对s301中所接收的写数据请求,解析写数据请求中携带的待写入数据。一般写数据请求具有固定的格式,待写入数据在写数据请求中的位置固定,意味着写数据请求的发送方与接收方预先约定待写入数据在写数据请求中的拼接位置,写数据请求的发送方将待写入数据拼接至写数据请求中的指定位置,后续写数据请求的接收方根据双方约定的拼接位置,从写数据请求中的指定位置解析出待写入数据。例如,在支付场景下,待写入数据可以是交易数据,交易数据可以是交易流水号、收款方id、收款方账户、付款方id、付款方账户、消费金额等。

s303,判断数据库的负载是否超过预设的阈值;

一般用tps来衡量数据库的数据写入能力,意味着数据库每秒数据写入量存在上限,例如,单击oracle的tps为1万左右,数据库每秒数据写入量超过上限的话,数据库超负荷运行,可能导致数据库崩溃,无法提供数据写入或读取服务,因此需要确定数据库的负载状况,即判断数据库的负载是否超过预设的阈值。

不同类型的数据库的tps不同,阈值可以参考实际使用的数据库的类型来进行设置,例如以oracle数据库为例,oracle数据库的tps为10000,阈值则可以是每秒写入上限10000(一般设置的阈值会略小于数据库的tps,例如9500),相应的判断数据库的负载是否超过预设的阈值,可以是判断当前数据库每秒数据写入量是否超过预设的每秒写入上限10000,例如数据库为oracle,当前oracle数据库每秒数据写入量为9000,oracle数据库的tps为10000,很明显数据库的负载未超过预设的阈值。

s304,若是,将所述待写入数据存储至所述数据缓存;

针对s303中的判断结果,若数据库的负载超过预设的阈值,则表示数据库可能在超负荷运行,需要将原本要写入数据库的待写入数据暂时存储至数据缓存。

其中待写入数据暂时存储至数据缓存的过程中,例如原本要写入数据库分库db_1的待写入数据,暂时存储至与数据库分库db_1对应的数据缓存文件file_1,原本要写入数据库分库db_2的待写入数据,暂时存储至与数据库分库db_2对应的数据缓存文件file_2,以此类推。

其中在将待写入数据存储至数据缓存之前,确定写数据请求对应的业务类型,判断写数据请求对应的业务类型是否满足预设的规则,若数据库的负载超过预设的阈值且写数据请求对应的业务类型满足预设的规则,将待写入数据暂时存储至数据缓存。其中值得注意的是,判断数据库的负载是否超过预设的阈值以及确定写数据请求对应的业务类型,判断写数据请求对应的业务类型是否满足预设的规则,两者没有严格的先后顺序,也可以是先执行前者,然后执行后者,或者先执行后者,然后执行前者,或者两者同时执行,本说明书对此不作限定。

对于某些特定业务类型的业务,可以根据实时性(实时性表示的是业务产生的待写入数据是否需要实时写入数据库)划分等级,对于某些特定业务类型的业务,产生的待写入数据需要实时写入数据库,可以将该业务类型划分为第一等级(优先级最高),对于某些特定业务类型的业务,产生的待写入数据对于实时性没有较高的需求,可以将该业务类型划分为第二等级(弱优先级),以此类推,可以根据实际需要划分等级。因此上述判断写数据请求对应的业务类型是否满足预设的规则,可以是判断写数据请求对应的业务类型是否在第一等级或第二等级。

在数据库的负载超过预设的阈值,且待写入数据无需实时写入数据库的情况下,可以将待写入数据暂时存储至数据缓存。

另外,若数据库的负载未超过预设的阈值,表示数据库正常运行,则可以将待写入数据直接写入数据库,不必考虑上述实时性的因素。

s305,第二进程确定数据库的负载状况;

对于数据缓存中的待写入数据,可以在闲时写入数据库,即数据库的负载未超过预设的阈值的情况下写入数据库,因此第二进程需要确定数据库的负载状况,具体的确定数据库的负载状况存在以下方式:

方式一:第二进程按照预设的周期判断数据库的负载是否超过预设的阈值,以确定数据库的负载状况。例如第二进程每隔6个小时判断一次,以确定数据库的负载状况。

方式二:第二进程接收第一进程发送的针对数据库的负载是否超过预设阈值的判断结果,根据第一进程判断数据库的负载是否超过预设阈的结果,以确定数据库的负载状况。例如第一进程判断数据库的负载未超过预设的阈值,将此结果发送至第二进程,第二进程接收到判断结果,确定数据库的负载未超过预设的阈值。

s306,在确定数据库的负载未超过预设的阈值的情况下,读取所述数据缓存中的待写入数据,将所读取的待写入数据写入数据库。

针对s305中所确定的数据库的负载状况,在确定数据库的负载未超过预设的阈值的情况下,读取数据缓存中的待写入数据,将读取的待写入数据写入数据库中。

其中在将读取的待写入数据写入数据库的过程中,例如从数据库缓存文件file_1读取待写入数据,将读取的待写入数据写入与数据库缓存文件file_1对应的数据库分库db_1,从数据库缓存文件file_2读取待写入数据,将读取的待写入数据写入与数据库缓存文件file_2对应的数据库分库db_2,以此类推。

通过上述对本说明书提供的技术方案的描述,在原有服务器配置的前提下,预先配置与数据库对应的数据缓存,在数据写入的过程中,通过判断数据库的负载状况以及判断写数据请求对应的业务类型是否满足预设的规则,来决定待写入数据直接写入数据库,还是暂时存储至数据缓存,后续在闲时(数据库的负载未超过预设的阈值的情况下)将数据缓存中的待写入数据写入数据库。如此一来,在不增加成本的情况下,依然可以满足实时交易量级日益增大的需求。

相对于上述提供的技术方案,本说明书实施例提供另一种技术方案,第二进程可以接收用户输入的数据缓存数据读取指令,即通过人工的方式触发读取数据缓存中的待写入数据,后续第二进程将读取的待写入数据写入数据库,至于配置与数据库对应的数据缓存,配置第一进程,以及第一进程执行的操作与上述技术方案类似,在此不再一一赘述。

相对于上述方法实施例,本说明书实施例还提供一种数据写入装置,如图4所示,可以包括:请求接收模块410、请求解析模块420、判断模块430、数据存储模块440、确定模块450、数据读取模块460、数据写入模块470。

请求接收模块410,用于第一进程接收业务服务器下发的写数据请求;

请求解析模块420,用于解析所述写数据请求中携带的待写入数据;

判断模块430,用于判断数据库的负载是否超过预设的阈值;

数据存储模块440,用于若是,将所述待写入数据存储至所述数据缓存;

确定模块450,用于第二进程确定数据库的负载状况;

数据读取模块460,用于在确定数据库的负载未超过预设的阈值的情况下,读取所述数据缓存中的待写入数据;

数据写入模块470,用于将所读取的待写入数据写入数据库。

根据本说明书提供的一种具体实施方式,所述数据存储模块440具体用于:

确定所述写数据请求对应的业务类型;

判断所述写数据请求对应的业务类型是否满足预设的规则;

若数据库的负载超过预设的阈值且所述写数据请求对应的业务类型满足预设的规则,将所述待写入数据存储至所述数据缓存。

根据本说明书提供的一种具体实施方式,所述装置还包括:

写入模块480,用于若数据库的负载未超过预设的阈值,将所述待写入数据直接写入数据库。

根据本说明书提供的一种具体实施方式,所述确定模块450具体用于:

第二进程按照预设的周期判断数据库的负载是否超过预设的阈值,以确定数据库的负载状况。

根据本说明书提供的一种具体实施方式,所述确定模块450具体用于:

第二进程接收第一进程发送的针对数据库的负载是否超过预设阈值的判断结果,以确定数据库的负载状况。

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

通过上述对本说明书提供的技术方案的描述,在原有服务器配置的前提下,预先配置与数据库对应的数据缓存,在数据写入的过程中,通过判断数据库的负载状况以及判断写数据请求对应的业务类型是否满足预设的规则,来决定待写入数据直接写入数据库,还是暂时存储至数据缓存,后续在闲时(数据库的负载未超过预设的阈值的情况下)将数据缓存中的待写入数据写入数据库。如此一来,在不增加成本的情况下,依然可以满足实时交易量级日益增大的需求。

本说明书实施例还提供一种计算机设备,如图5所示,该设备可以包括:处理器510、存储器520、输入/输出接口530、通信接口540和总线550。其中处理器510、存储器520、输入/输出接口530和通信接口540通过总线550实现彼此之间在设备内部的通信连接。

处理器510可以采用通用的cpu(centralprocessingunit,中央处理器)、微处理器、应用专用集成电路(applicationspecificintegratedcircuit,asic)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。

存储器520可以采用rom(readonlymemory,只读存储器)、ram(randomaccessmemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器520可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器520中,并由处理器510来调用执行。

输入/输出接口530用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。

通信接口540用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如usb、网线等)实现通信,也可以通过无线方式(例如移动网络、wifi、蓝牙等)实现通信。

总线550包括一通路,在设备的各个组件(例如处理器510、存储器520、输入/输出接口530和通信接口540)之间传输信息。

需要说明的是,尽管上述设备仅示出了处理器510、存储器520、输入/输出接口530、通信接口540以及总线550,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。

本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述的数据写入方法。该方法至少包括:

一种数据写入方法,预先配置与数据库对应的数据缓存,以及配置相互独立工作的第一进程、第二进程,该方法包括:

第一进程接收业务服务器下发的写数据请求;

解析所述写数据请求中携带的待写入数据;

判断数据库的负载是否超过预设的阈值;

若是,将所述待写入数据存储至所述数据缓存;

第二进程确定数据库的负载状况;

在确定数据库的负载未超过预设的阈值的情况下,读取所述数据缓存中的待写入数据,将所读取的待写入数据写入数据库。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。

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

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。

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