本申请涉及数据存储技术领域,尤其涉及一种高并发数据存储方法、装置、计算机设备和存储介质。
背景技术:
高并发(highconcurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指通过设计保证系统能够同时并行处理很多请求。高并发相关常用的一些指标有响应时间(responsetime),吞吐量(throughput),每秒查询率qps(querypersecond),并发用户数等。响应时间:系统对请求做出响应的时间。例如系统处理一个http请求需要200ms,这个200ms就是系统的响应时间。吞吐量:单位时间内处理的请求数量。qps:每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显。并发用户数:同时承载正常使用系统功能的用户数量。例如一个即时通讯系统,同时在线量一定程度上代表了系统的并发用户数。
在进行大量数据需要即时分享且即时入库的场景下,容易引发高并发事件。通常在出现高并发时采用的解决方式是利用kafka等开源软件对数据进行缓存,以减少并发发生的数目。
但是,在采用kafka等开源软件时,存在着只有一级缓存,导致在数据超大时,数据丢失或者处理慢的问题,无法应对大数据时代对数据获取及时性的要求。
技术实现要素:
有鉴于此,有必要针对大量数据入库时,发生高并发事件导致入库时间长,处理慢的问题,提供一种高并发数据存储方法、装置、计算机设备和存储介质。
一种高并发数据存储方法,包括如下步骤:
获取预存储到数据库中的所有数据,建立数据队列,对所述数据队列进行数据分组打包生成数个数据组;
将所述数据组进行汇聚,当汇聚后的数据量达到预设的数据块生成阈值时,打包生成一数据块;
获取预存储到数据库中的数据总数量和数据库写入频率阈值,建立数个数据缓存层,将所述数据块存入所述数据缓存层,获取分处于相邻上下两级所述数据缓存层中的数据块的通用节点,根据所述通用节点的数量确定每一级所述数据缓存层中的数据块数量。
在其中一个实施例中,所述获取预存储到数据库中的所有数据,建立数据队列,对所述数据队列进行数据分组打包生成数个数据组,包括:
对每一个需要写入到数据库中的数据来源进行id标识,从每一个具有id标识的数据来源中进行数据抽取;
汇集抽取出的数据,按照字母顺序或者数字顺序对从不同数据来源中抽取的数据进行排列,生成数据队列;
对所述数据队列进行特征字符检索,获取特征字符生成位置,根据所述特征字符生成位置对所述数据队列进行分组打包生成数个数据组。
在其中一个实施例中,所述将所述数据组进行汇聚,当汇聚后的数据量达到预设的数据块生成阈值时,打包生成一数据块,包括:
获取数据库中记载的每一个数据存储区域的数据量,得到所述数据块的生成阈值;
对将要写入到数据库中的数据组进行数据量统计,若任意一个数据组中的数据量均大于所述数据块的生成阈值,则应用哈希算法对所述数据块的生成阈值进行修订,使得所述数据块的生成阈值至少大于两个所述数据组的数据量之和;
汇聚将要写入到数据库中的所述数据组,当数据量之和达到所述数据块的生成阈值时,生成一数据块。
在其中一个实施例中,所述获取预存储到数据库中的数据总数量和数据库写入频率阈值,建立数个数据缓存层,将所述数据块存入所述数据缓存层,获取分处于相邻上下两级所述数据缓存层中的数据块的通用节点,根据所述通用节点的数量确定每一级所述数据缓存层中的数据块数量,包括:
获取预存储到数据库中的数据总数量和数据库写入频率阈值,将所述预存储到数据库中的数据总数量与所述数据库写入频率阈值做商得到数据写入时间,获取所述数据写入时间与预设写入时间的比值,根据所述比值确定数据缓存层的层数,根据所述数据缓存层的层数建立数个数据缓存层;
获取每一级数据缓存层的数据容量阈值,根据所述数据容量阈值,确定处于上一级数据块向处于下一级数据块进行数据抽取的频率;
按照数据抽取的频率生成预通用节点,应用神经网络模型对所述预通用节点进行训练得到所述通用节点;
根据相邻两级数据缓存层之间的通用节点的数量,确定每一级的数据块数量。
在其中一个实施例中,所述对每一个需要写入到数据库中的数据源进行id标识,包括:
获取所述数据来源所处的客户端ip地址,根据所述客户端ip地址对所述数据来源进行大类id标识;
根据包含所述数据来源的内容或者数据的应用对所述数据来源进行小类id标识;
拼接所述大类id标识和所述小类id标识,得到所述数据来源的id标识。
在其中一个实施例中,所述对所述数据队列进行特征字符检索,获取特征字符生成位置,根据所述特征字符生成位置对所述数据队列进行分组打包生成数个数据组,包括:
应用查询语言对所述数据队列进行特征字符检索;
获取每一个特征字符在所述数据列中的产生位置,设定数据分组的分组阈值,当相隔最短的两个特征字符之间的数据量大于所述分组阈值时,将这两个特征字符之间的数据进行打包,形成一个数据组;
若根据所述特征字符对所述数据队列进行分组后,各个所述数据组之间的数据量差额大于数据组数据量阈值,则采用非所述特征字符的其它特殊字符对所述数据队列进行重新分组,直到各个所述数据组的数据量差额小于数据组数据量阈值。
在其中一个实施例中,所述取每一级数据缓存层的数据容量阈值,根据所述数据容量阈值,确定处于上一级数据块向处于下一级数据块进行数据抽取的频率,包括:
根据数据写入到数据库中的频率,确定数据块的分级状况;
根据所述分级状况,确定相邻两级所述数据块之间的数据量差值;
获取所述数据块之间的数据量差值,确定各级数据块向下一级数据块进行数据抽取的频率,且相邻两级所述数据块之间的数据传输频率小于数据写入到数据库中的频率。
一种高并发数据存储装置,包括如下模块:
生成数据组模块,设置为获取预存储到数据库中的所有数据,建立数据队列,对所述数据队列进行数据分组打包生成数个数据组;
生成数据块模块,设置为将所述数据组进行汇聚,当汇聚后的数据量达到预设的数据块生成阈值时,打包生成一数据块;
数据缓存模块,设置为获取预存储到数据库中的数据总数量和数据库写入频率阈值,建立数个数据缓存层,将所述数据块存入所述数据缓存层,获取分处于相邻上下两级所述数据缓存层中的数据块的通用节点,根据所述通用节点的数量确定每一级所述数据缓存层中的数据块数量。
一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,使得所述处理器执行上述高并发数据存储方法的步骤。
一种存储有计算机可读指令的存储介质,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行上述高并发数据存储方法的步骤。
上述高并发数据存储方法、装置、计算机设备和存储介质,包括获取预存储到数据库中的所有数据,建立数据队列,对所述数据队列进行数据分组打包生成数个数据组;将所述数据组进行汇聚,当汇聚后的数据量达到预设的数据块生成阈值时,打包生成一数据块;获取预存储到数据库中的数据总数量和数据库写入频率阈值,建立数个数据缓存层,将所述数据块存入所述数据缓存层,获取分处于相邻上下两级所述数据缓存层中的数据块的通用节点,根据所述通用节点的数量确定每一级所述数据缓存层中的数据块数量。本技术方案针对大量数据入库时,发生高并发事件导致入库时间长,处理慢的问题,通过多级缓存的方式,并且提升了数据入库的效率。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本申请的限制。
图1为本申请一种高并发数据存储方法的整体流程图;
图2为本申请一种高并发数据存储方法中的生成数据组过程示意图;
图3为本申请一种高并发数据存储方法中的生成数据块过程示意图;
图4为本申请一种高并发数据存储方法装置的结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。
图1为本申请一个实施例中的高并发数据存储方法的流程图,如图1所示,一种高并发数据存储方法,包括以下步骤:
s1,获取预存储到数据库中的所有数据,建立数据队列,对所述数据队列进行数据分组打包生成数个数据组;
具体的,在建立数据队列时可以根据数据产生的时间循序,对预存储到数据库中的数据进行排序,比如,设置数个数据抽取时间节点,抽取在所述数据抽取时间节点所在时刻多个不同数据来源的数据,以时间节点为对数据队列打包生成数个数据组。
s2,将所述数据组进行汇聚,当汇聚后的数据量达到预设的数据块生成阈值时,打包生成一数据块;
具体的,所述数据块生成阈值是根据历史数据统计得到的,即获取历次进行数据存储时的实际情况获得,在进行历史数据统计时,距离现在时刻最近的历史数据的权重大于距离现在时刻远的历史数据的权重,计算加权平均数得到所述数据块生成阈值。
s3,获取预存储到数据库中的数据总数量和数据库写入频率阈值,建立数个数据缓存层,将所述数据块存入所述数据缓存层,获取分处于相邻上下两级所述数据缓存层中的数据块的通用节点,根据所述通用节点的数量确定每一级所述数据缓存层中的数据块数量。
具体的,数据缓存层是为了在数据存储到数据库时,能够逐级存储从而减少高并发情况下大量数据一起涌入数据库的写入接口造成数据库瘫痪,将数据总数量和数据库写入频率阈值做商得到写入时间,将写入时间与预设的写入时间进行比较,以确定数据层的层数。若上下两级数据缓存之间有3个通用节点,则说明上级数据缓存层中有3个数据块,而下级数据缓存层的通用节点数量则有其与再下一级数据缓存层之间的通用节点的数量确定。
本实施例,通过对将要存储到数据库中的数据进行逐级缓存,降低了高并发条件下,数据存储到数据库中的处理压力。
图2为本申请一种高并发数据存储方法中的生成数据组过程示意图,如图所示,获取预存储到数据库中的所有数据,建立数据队列,对所述数据队列进行数据分组打包生成数个数据组,包括:
s101、对每一个需要写入到数据库中的数据来源进行id标识,从每一个具有id标识的数据来源中进行数据抽取;
具体的,若数据来源来自外部,则获取数据来源的ip地址,将所述ip地址进行dns解析,得到dns解析代码,抽取所述dns解析代码中的前两位字符作为数据来源的id标识;若数据来源来自于本地,则获取所述数据来源在本地的存储位置,将存储位置的缩写字符作为数据来源的id标识。
s102、汇集抽取出的数据,按照字母顺序或者数字顺序对从不同数据来源中抽取的数据进行排列,生成数据队列;
具体的,将同一数据来源的数据先放入一个数据池中,等待抽取,然后获取排序规则,若按照字母排序,则从各个数据池中抽取出数据字符中首字母为“a”的数据,再抽取出首字母为“b”的数据依次类推,将所述数据池中的数据按照字母顺序排成以数据队列。
s103、对所述数据队列进行特征字符检索,获取特征字符生成位置,根据所述特征字符生成位置对所述数据队列进行分组打包生成数个数据组。
具体的,获取预设的特征字符文件,应用随机函数从所述特征字符文件中随机抽取出一个或者多个特征字符,根据抽取出的特征字符对所述数据队列进行特征词字符查询,记录特征字符在数据队列中的位置信息,根据所述位置信息将数据队列进行分割,分割后形成数个数据段,将一个或者多个所述数据段打包形成数据组。
本实施例,通过数据块生成过程进行设置,提升了数据组生成的准确性,同时也提升了数据存储时的效率。
图3为本申请一种高并发数据存储方法中的生成数据块过程示意图,如图所示,所述将所述数据组进行汇聚,当汇聚后的数据量达到预设的数据块生成阈值时,打包生成一数据块,包括
s201、获取数据库中记载的每一个数据存储区域的数据量,得到所述数据块的生成阈值;
具体的,数据库中每一个存储区域的数据量是根据数据库建库时的预先设定而得到的,在设定数据块的生成阈值时,不能超过数据存储区域的数据量,否则则会发生数据溢出的问题。
s202、对将要写入到数据库中的数据组进行数据量统计,若任意一个数据组中的数据量均大于所述数据块的生成阈值,则应用哈希算法对所述数据块的生成阈值进行修订,使得所述数据块的生成阈值至少大于两个所述数据组的数据量之和;
其中,本步骤的哈希算法可以采用余数法,先估计整个哈希表中的数据数目大小。然后用这个估计值作为除数去除每个原始值,得到商和余数。用余数作为哈希值。然后根据将生成阈值加减哈希值得到修正后的生成阈值。
s203、汇聚将要写入到数据库中的所述数据组,当数据量之和达到所述数据块的生成阈值时,生成一数据块。
本实施例,通过对数据块形成过程进行优化,从而提升了数据块中数据量准确性,从而能够更好的完成数据存储。
在一个实施例中,所述获取预存储到数据库中的数据总数量和数据库写入频率阈值,建立数个数据缓存层,将所述数据块存入所述数据缓存层,获取分处于相邻上下两级所述数据缓存层中的数据块的通用节点,根据所述通用节点的数量确定每一级所述数据缓存层中的数据块数量,包括:
获取预存储到数据库中的数据总数量和数据库写入频率阈值,将所述预存储到数据库中的数据总数量与所述数据库写入频率阈值做商得到数据写入时间,获取所述数据写入时间与预设写入时间的比值,根据所述比值确定数据缓存层的层数,根据所述数据缓存层的层数建立数个数据缓存层;
获取每一级数据缓存层的数据容量阈值,根据所述数据容量阈值,确定处于上一级数据块向处于下一级数据块进行数据抽取的频率;
按照数据抽取的频率生成预通用节点,应用神经网络模型对所述预通用节点进行训练得到所述通用节点;
其中,本实施例所使用的神经网络模型可以是卷积神神经网络模型,卷积神经网络是一种特殊的深层的神经网络模型,它的特殊性体现在两个方面,一方面它的神经元间的连接是非全连接的,另一方面同一层中某些神经元之间的连接的权重是共享的(即相同的)。它的非全连接和权值共享的网络结构使之更类似于生物神经网络,降低了网络模型的复杂度,减少了权值的数量。
根据相邻两级数据缓存层之间的通用节点的数量,确定每一级的数据块数量。
具体的,相邻两级数据缓存层之间的通用节点的数量即为位于上一级的数据缓存层中的数据块数量,而根据上下两级数据缓存层中数据量的差值和上下两级之间数据传输的频率值,可以确定出一个通用节点连接的下一级数据缓存层中数据块的数量,比如上下两级数据缓存层中数据的差值为1000,上级数据块的容量是100,下级数据块的容量是10,,则需设置10个通用节点,根据通用节点的数量可以倒推出各级数据缓存层中的数据块数量。
本实施例,通过对上下级数据缓存层中的数据块数量进行确定,可以更加快速的将数据写入到数据库中。
在一个实施例中,所述对每一个需要写入到数据库中的数据源进行id标识,包括:
获取所述数据来源所处的客户端ip地址,根据所述客户端ip地址对所述数据来源进行大类id标识;
根据包含所述数据来源的内容或者数据的应用对所述数据来源进行小类id标识;
拼接所述大类id标识和所述小类id标识,得到所述数据来源的id标识。
具体的,某一客户端的ip地址为256.256.256.1则将该客户端的数据来源大类id设为256;在数据来源大类为256的客户端,应用xxapp产生的数据来源记录为a;那么这个数据来源的id为256.a,则该数据来源产生的所有数据的id标识均为256.a。
本实施例中,通过对数据标识进行大类和小类分别标识,可以增加对数据来源,判断的准确性。
在一个实施例中,所述对所述数据队列进行特征字符检索,获取特征字符生成位置,根据所述特征字符生成位置对所述数据队列进行分组打包生成数个数据组,包括:
应用查询语言对所述数据队列进行特征字符检索;
其中,其中查询语言可以是sql语言,特征字符可以设定为“。”、“;”或者其它特殊符号;
获取每一个特征字符在所述数据列中的产生位置,设定数据分组的分组阈值,当相隔最短的两个特征字符之间的数据量大于所述分组阈值时,将这两个特征字符之间的数据进行打包,形成一个数据组;
若根据所述特征字符对所述数据队列进行分组后,各个所述数据组之间的数据量差额大于数据组数据量阈值,则采用非所述特征字符的其它特殊字符对所述数据队列进行重新分组,直到各个所述数据组的数据量差额小于数据组数据量阈值。
具体的,其它特征字符可以是与原来的特征字符归属于不同类别的特征字符,比如原特征字符是标点符号,那么其它特征字符则可以是罗马数字或者阿拉伯数字。
本实施例,通过对数据队列进行特征字符分割,形成数据组,提升了数据存储的速度和效率。
在一个实施例中,所述取每一级数据缓存层的数据容量阈值,根据所述数据容量阈值,确定处于上一级数据块向处于下一级数据块进行数据抽取的频率,包括:
根据数据写入到数据库中的频率,确定数据块的分级状况;
根据所述分级状况,确定相邻两级所述数据块之间的数据量差值;
获取所述数据块之间的数据量差值,确定各级数据块向下一级数据块进行数据抽取的频率,且相邻两级所述数据块之间的数据传输频率小于数据写入到数据库中的频率。
具体的,在确定数据写入到数据库的频率时,可以根据数据库的历史数据中的熔断情况进行设定,即在确定数据库中剩余存储空间的情况下,获取在该存储空间下,历史数据中所记载的熔断发生时,数据写入的频率,以此频率为数据写入数据库的频率最大值,数据写入数据库的频率不能大于频率最大值。若数据写入到数据块中的频率大于频率最大值,则需要进行分级,同时每一级数据缓存层的数据容量是一定的。根据频率最大值和每一级数据缓存层的数据容量即可以对数据块进行分级,然后根据分级情况得到各级数据块的差值,进而得到两级所述数据块之间的数据传输频率。
本实施例,实现对数据块分级的精确把控,从而使数据存储到数据库时更加的省时高效。
在一个实施例中,提出了高并发数据存储装置,如图4所示,包括如下模块:
生成数据组模块,设置为获取预存储到数据库中的所有数据,建立数据队列,对所述数据队列进行数据分组打包生成数个数据组;
生成数据块模块,设置为将所述数据组进行汇聚,当汇聚后的数据量达到预设的数据块生成阈值时,打包生成一数据块;
数据缓存模块,设置为获取预存储到数据库中的数据总数量和数据库写入频率阈值,建立数个数据缓存层,将所述数据块存入所述数据缓存层,获取分处于相邻上下两级所述数据缓存层中的数据块的通用节点,根据所述通用节点的数量确定每一级所述数据缓存层中的数据块数量。
一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,使得所述处理器执行上述高并发数据存储方法的步骤。
一种存储有计算机可读指令的存储介质,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行上述高并发数据存储方法的步骤。所述存储介质可以为非易失性存储介质。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(rom,readonlymemory)、随机存取存储器(ram,randomaccessmemory)、磁盘或光盘等。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请一些示例性实施例,其中描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。