CN114490659A - 数据写入方法、装置、数据写入设备和存储介质 - Google Patents
数据写入方法、装置、数据写入设备和存储介质 Download PDFInfo
- Publication number
- CN114490659A CN114490659A CN202210121059.0A CN202210121059A CN114490659A CN 114490659 A CN114490659 A CN 114490659A CN 202210121059 A CN202210121059 A CN 202210121059A CN 114490659 A CN114490659 A CN 114490659A
- Authority
- CN
- China
- Prior art keywords
- target
- data
- partition
- timestamp
- preset
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2379—Updates performed during online database operations; commit processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及数据处理技术领域,尤其涉及一种数据写入方法、装置、数据写入设备和存储介质。该数据写入方法应用于将数据写入HBase数据库的数据写入设备,所述数据写入方法包括:获取目标数据表的预分区信息,所述预分区信息包括有序的分区键序列;根据预设的洗牌规则,对所述分区键序列进行处理,得到目标分区键序列;获取目标随机数;根据所述目标随机数与所述目标分区键序列,确定待写入数据在所述目标数据表中对应的目标分区;将所述待写入数据写入所述目标分区中。采用该数据写入方法,可有效避免均匀并发写入导致的各分区同时清空的问题,同时有效保障系统并发性能的稳定。
Description
技术领域
本申请涉及数据处理技术领域,尤其涉及一种数据写入方法、装置、数据写入设备和存储介质。
背景技术
随着大数据时代的到来,数据库之间导入或导出的数据量也越来越大。主流的开源数据库HBase常用于解决上述问题。HBase是一个分布式的、面向列的开源数据库,使用HBase数据库时,由于每张表初始默认只有一个分区(region),读写性能很差,因此目前常见的做法是在创建表的时候对表进行预分区,通过创建多个分区,提高表的读写并发性能。
然而,一方面,如果将数据时刻均匀的写入各分区,会因为长时间同时操作不同分区的多个文件数据表,底层磁盘I/O以及网络I/O的压力激增,从而导致表的写入/读取的速度急速下降。另一方面,如果写入数据分布不均匀,会导致各分区的数据出现数据倾斜,读写压力集中到数据热点的分区,从而造成系统性能瓶颈。
综上所述,如何有效写入数据,避免均匀并发写入导致的各分区同时清空以及系统性能降低,是当前需要解决的问题。
发明内容
有鉴于此,本申请实施例提供了一种数据写入方法、装置、数据写入设备和存储介质,可有效避免均匀并发写入导致的各分区同时清空的问题,同时有效保障系统并发性能的稳定。
本申请实施例的第一方面提供了一种数据写入方法,应用于将数据写入HBase数据库的数据写入设备,所述数据写入方法包括:
获取目标数据表的预分区信息,所述预分区信息包括有序的分区键序列;
根据预设的洗牌规则,对所述分区键序列进行处理,得到目标分区键序列;
获取目标随机数;
根据所述目标随机数与所述目标分区键序列,确定待写入数据在所述目标数据表中对应的目标分区;
将所述待写入数据写入所述目标分区中。
在第一方面的一种可能的实现方式中,所述根据所述目标随机数与所述目标分区键序列,确定待写入数据在所述目标数据表中对应的目标分区,包括:
根据所述目标随机数,从所述目标分区键序列中确定目标分区键;
基于所述目标分区键,确定所述待写入数据在所述目标数据表中对应的目标分区。
在第一方面的一种可能的实现方式中,所述根据预设的洗牌规则,对所述分区键序列进行处理,得到目标分区键序列,包括:
获取目标时间戳与预设时间戳,所述目标时间戳为系统的当前时间戳;
计算所述目标时间戳与所述预设时间戳的差值;
若所述目标时间戳与所述预设时间戳的差值大于预设洗牌时间阈值,则对所述分区键序列进行洗牌处理,并将经过洗牌处理后的分区键序列确定为目标分区键序列。
在第一方面的一种可能的实现方式中,所述数据写入方法还包括:
若所述目标时间戳与所述预设时间戳的差值小于或等于所述预设洗牌时间阈值,则所述分区键序列即为目标分区键序列。
在第一方面的一种可能的实现方式中,所述数据写入方法还包括:
若所述目标时间戳与所述预设时间戳的差值大于预设洗牌时间阈值,则更新所述预设时间戳,更新后的所述预设时间戳与所述目标时间戳相同。
在第一方面的一种可能的实现方式中,所述获取预设时间戳,包括:
若所述待写入数据为首条需写入所述目标数据表的数据,则所述预设时间戳为发起数据写入请求的客户端刚启动的时间戳;
若所述待写入数据非首条需写入所述目标数据表的数据,则所述预设时间戳为发起数据写入请求的客户端刚启动的时间戳,或者,所述预设时间戳与上一条待写入数据对应的目标时间戳相关。
在第一方面的一种可能的实现方式中,所述预分区信息还包括分区键数量,所述获取目标随机数,包括:
获取随机值与预设倍率,所述随机值为调用预设函数生成标准正态分布的一次随机取值,所述预设倍率用于放大所述随机值;
根据所述随机值、所述预设倍率以及所述分区键数量,生成目标随机数。本申请实施例的第二方面提供了一种数据写入装置,应用于将数据写入HBase数据库的数据写入设备,所述数据写入装置包括:
分区信息获取单元,用于获取目标数据表的预分区信息,所述预分区信息包括有序的分区键序列;
目标序列获取单元,用于根据预设的洗牌规则,对所述分区键序列进行处理,得到目标分区键序列;
随机数生成单元,用于获取目标随机数;
目标分区确定单元,用于根据所述目标随机数与所述目标分区键序列,确定待写入数据在所述目标数据表中对应的目标分区;
数据写入单元,用于将所述待写入数据写入所述目标分区中。
本申请实施例的第三方面提供了一种数据写入设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如本申请实施例的第一方面提供的数据写入方法的步骤。
本申请实施例的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如本申请实施例的第一方面提供的数据写入方法的步骤。
本申请实施例的第五方面提供了一种计算机程序产品,当计算机程序产品在终端设备上运行时,使得终端设备执行本申请实施例的第一方面所述的数据写入方法的步骤。
本申请实施例中,数据写入设备通过获取目标数据表的预分区信息,根据预设的洗牌规则,对所述预分区信息中的分区键序列进行处理,得到目标分区键序列,获取目标随机数,然后根据所述目标随机数与所述目标分区键序列,确定待写入数据在所述目标数据表中对应的目标分区,再将所述待写入数据写入所述目标分区,避免数据倾斜。本申请可以有效避免均匀并发写入导致各分区同时清空的问题,同时有效保障系统并发性能的稳定。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的数据写入方法的实现流程图;
图2是本申请实施例提供的数据写入方法中确定目标分区键序列的具体实现流程图;
图3是本申请实施例提供的数据写入方法中获取预设时间戳的具体实现流程图;
图4是本申请实施例提供的数据写入方法中获取目标随机数的具体实现流程图;
图5是本申请实施例提供的数据写入方法中确定目标分区的一种具体实现流程图;
图6是本申请实施例提供的数据写入装置的一个实施例的结构图;
图7是本申请实施例提供的数据写入设备的示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
另外,在本申请说明书和所附权利要求书的描述中,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
在本申请说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
应当理解,本申请各个方法实施例提供了一种数据写入方法适用于需要将数据写入HBase数据库的各种类型的终端设备或者数据写入设备,具体可以为服务器、HBase客户端。
下面结合具体实施例对本申请提供的数据写入方法进行示例性的说明。
图1示出了本申请实施例提供的数据写入方法的实现流程,该方法实现流程可以包括如下步骤S101至S105。
S101:获取目标数据表的预分区信息,所述预分区信息包括有序的分区键序列。
上述目标数据表具体为数据库HBase中可写入数据的表。HBase提供了预分区功能,用户可以在创建表的时候对表按照一定的规则分区。在本申请实施例中,上述预分区信息包括预分区的数量以及分区键序列,其中,所述分区键序列包括预分区后每一分区对应的分区键,分区键序列中的分区键数量与预分区的数量相等。例如,n个分区键(X0,X1…Xn-1)按顺序加入到序列L中。
在本申请实施例中,分区的具体数量可由用户自行设置。一般地,取决于HBase搭建的集群大小以及写入的数据规模,一般至少需要数倍于HBaseregionserver的节点数量,来保证每个节点在初期均会对外提供服务。
需说明的是,本实施例中,上述分区键序列中的分区键是有序的。在用户对表按照一定的规则分区时,记录预分区的时间戳。上述分区键用于索引分区。拥有相同分区键的数据记录必然在同一个数据分区中。本实施例中,HBase的表格存储能够保证对具有同一分区键的数据进行更改操作的一致性。
例如,在创建表时将表预分为26个分区。26个分区分别对应用于索引分区的分区键,26个分区键有序构成分区键序列。
S102:根据预设的洗牌规则,对所述分区键序列进行处理,得到目标分区键序列。
作为本申请一种可能的实施方式,图2示出了本申请实施例中确定目标分区键序列的一种具体实现流程:
A1:获取目标时间戳与预设时间戳,所述目标时间戳为系统的当前时间戳。所述系统为数据写入设备运行的系统。所述预设时间戳不是一直固定不变的,而是动态变化的。
A2:计算所述目标时间戳与所述预设时间戳的差值。
例如,系统的当前时间戳为t=1639706530429,所述预设时间戳为t0=1639706490429,所述目标时间戳与所述预设时间戳的差值即为t-t0。
A3:若所述目标时间戳与所述预设时间戳的差值大于预设洗牌时间阈值,则对所述分区键序列进行洗牌处理,并将经过洗牌处理后的分区键序列确定为目标分区键序列。此时,所述目标分区键序列中的分区键为乱序排列。
一些实施方式中,调用java.util.Collection中的shuffle函数对所述分区键序列中各分区键的顺序打乱。
本申请实施例中,对于上述shuffle操作,可以采用任意的均匀方案,只要保证每个分区键位于序列中的位置处于均匀分布。比如也可以采用L[0]=L[n-1],L[i]=L[i-1](0<i<n)来打乱分区键的顺序。
在本申请实施例中,若所述目标时间戳与所述预设时间戳的差值小于或等于所述预设洗牌时间阈值,则所述分区键序列即为目标分区键序列。
在本申请实施例中,根据所述目标时间戳与所述预设时间戳的差值与预设洗牌时间阈值的大小比对结果,确定目标分区键序列。当差值大于预设洗牌时间阈值时,则将所述分区键序列进行乱序处理,经过乱序处理后的分区键序列即为目标分区键序列。而当差值小于或者等于预设洗牌时间阈值时,则原分区键序列即为目标分区键序列。
在本申请实施例中,图3示出了本申请实施例中获取预设时间戳的具体实现流程,包括:
A11:若所述待写入数据为首条需写入所述目标数据表的数据,则所述预设时间戳为发起数据写入请求的客户端刚启动的时间戳。
当所述待写入数据为所述目标数据表创建后初次写入数据时,将用户预分区的时间戳确定为所述预设时间戳。
A12:若所述待写入数据非首条需写入所述目标数据表的数据,则所述预设时间戳为发起数据写入请求的客户端刚启动的时间戳,或者,所述预设时间戳与上一条待写入数据对应的目标时间戳相关。所述上一条写入数据具体是指目标时间戳与所述待写入数据的目标时间戳相邻、在所述待写入数据之前写入所述目标数据表的数据。
当所述待写入数据为所述目标数据表创建后初次写入数据时,所述预设时间戳可能为发起数据写入请求的客户端刚启动的时间戳,也可能为上一条待写入数据对应的目标时间戳。
S103:获取目标随机数。
在本申请实施例中,所述目标随机数用于指示目标分区键序列中的目标分区键。
作为本申请一种可能的实施方式,图4示出了本申请实施例提供的数据写入方法中获取目标随机数的一种具体实现流程,详述如下:
B1:获取随机值与预设倍率,所述随机值为调用预设函数生成标准正态分布的一次随机取值,所述预设倍率用于放大所述随机值。
在本申请实施例中,所述预设函数具体为java.util.Random中nextGaussian函数。通过调用java.util.Random中nextGaussian函数生成标准正态分布(N(0,1))的一次随机取值,得到随机值r0。
由于节点(分区数)的标识为0~n-1的整数,上述随机值r0为N(0,1)的正态分布,绝大部分数据落在(-1,1)区间,为了将区间有效映射到各个整数中,需要乘以一个放大系数,也即上述预设倍数,不然最终数据基本就会落在两到三个分区上,一般采用一个较大的整数即可,由于正态分布的特性,能保证落在每个分区的预期不同。
HBase基于LSM树(Log-Structured Merge Tree)存储引擎,如果时刻均匀的写入各region,会导致各region在差不多相同时间到达内存表memtable的清空(flush)阈值,从而触发flush,将数据从内存刷入磁盘,底层以多备份的方式存入分布式文件系统(HadoopDistributed File System,HDFS)。多region同时刻批量的flush操作会导致底层磁盘IO以及网络IO的压力激增,从而导致写入/读取的速度急速下降。
本申请采用正态分布作为添加各分区前缀的概率分布达到短时的不均匀写入,使各分区region的内存表memtable不在同一时刻进行清空flush,并定时通过随机调换各分区头的分布概率,使得长时间状态下各region数据分布均匀。
B2:根据所述随机值、所述预设倍率以及所述分区键数量,生成目标随机数。
本实施例中,根据下式(1)生成所述目标随机数:
r=r0*c+[n/2] (1)
其中,r表示目标随机数,r0表示上述随机值,c表示上述预设倍率,n表示分区键数量。[n/2]表示对n/2取整。
在本申请实施例中,若所述目标时间戳与所述预设时间戳的差值大于预设洗牌时间阈值,则更新所述预设时间戳,更新后的所述预设时间戳与所述目标时间戳相同。示例性地,当t-t0>Δt时,则更新t0,更新后的t0=t=1639706530429。
S104:根据所述目标随机数与所述目标分区键序列,确定待写入数据在所述目标数据表中对应的目标分区。
上述待写入数据是指用户需要写入数据库HBase的数据。
作为本申请一种可能的实施方式,图5示出了本申请实施例提供的数据写入方法中确定目标分区的一种具体实现流程,详述如下:
C1:根据所述目标随机数,从所述目标分区键序列中确定目标分区键。
C2:基于所述目标分区键,确定所述待写入数据在所述目标数据表中对应的目标分区。
本申请实施例中,根据所述目标随机数与所述目标分区键序列,确定目标分区键,进而根据所述目标分区键索引的分区,确定所述待写入数据在所述目标数据表中对应的目标分区。
在本申请实施例中,根据步骤S103中目标随机数绝对值对分区键数量取模的结果,从所述目标分区键序列中确定目标分区键。例如,取随机值r的绝对值,对分区键数量取模n取模得到i,从所述目标分区键序列中确定i对应的目标分区键。使用所述目标分区键作为所述待写入数据的主键的分区键。
示例性地,首先将预设好的n个分区键(X0,X1…Xn-1)按顺序加入一个序列表L中,选择一个倍率c作为差异值放大随机值,并设置一个预设洗牌时间阈值Δt,记录当前时间t0;对于每条会被写入HBase的数据,当检测到数据写入指令时,首先计算该数据写入指令中待写入数据的目标时间戳t与预设时间戳的差值t0,并判断该差值t-t0是否大于Δt,若小于或等于Δt,则不进行shuffle来打乱L中的分区键;如果大于Δt,则调用java.util.Collection中的shuffle函数对L中的各分区键顺序进行打乱,并将t赋值给t0;使用java.util.Random中nextGaussian()函数生成标准正态分布(N(0,1))的一次随机取值r0,求得随机数r=r0*c+n/2,取r的绝对值对n取模得到i,选择L[i]作为该待写入数据主键rowkey的目标分区键。
S105:将所述待写入数据写入所述目标分区中。
HBase支持基于主键的快速查询。由于HBase底层为顺序存储,所以一般需要在写入数据的主键(rowkey)前加入特定的区域标识(分区键)来确保数据写入对应分区。数据写入设备在确定目标分区键后,获取所述待写入数据的主键,将所述目标分区键插入在所述主键之前,根据该目标分区键将所述待写入数据写入所述目标分区中。
示例性地,以前缀为a-z 26个字母为例,共预分区26个,预处理,将26个字母加入一个序列Array a中,a=[‘a’,‘b’,‘c’,‘d’…‘z’],取一个有差异性的倍率c=200,设置洗牌时间为30s,记录当前时间戳t0=1639706490429,中间数n/2取整13。对于每条待写入数据进行以下操作:首先记录待写入数据的获取时间t=1639706530429,t-t0=40000>30000(30*1000,时间戳为ms单位),则触发shuffle操作,随机变更数组a,a变更为[‘v’,‘k’,‘c’,‘d’…,‘a’],并且更新t0,t0=t=1639706530429(如果t-t0<30000则不触发shuffle操作)。调用nextGaussian()函数生成一个正态分布随机数,假设生成数为0.15,则计算分区为(0.15*200+13)mod 26=17,则选取a[17](假定为‘f’)作为此次写入的分区键,加在该待写入数据的rowkey前方,保证该rowkey写入此分区键对应的分区。
以一个应用场景为例,HBase客户端启动时首先对每张表进行预分区,并根据上述方案确定目标分区键,然后对于每条将要写入的数据,将目标分区键拼接在rowkey前方,然后将待写入数据插入HBase中。在读取数据时,并发扫描所有分区键,可有效利用并发,同样可以提升扫描性能。
目前,对于每条数据进行应用随机的hash函数,该hash函数的结果通过规则映射/取模的方式映射到某个具体分区,然后将分区作为前缀加入该数据rowkey。然而这种方案容易出现数据热点问题,如果某类具有相同映射结果的数据大量出现,会导致各分区的数据出现数据倾斜,读写压力集中到数据热点的region,从而造成性能瓶颈。
本申请实施例可以有效避免均匀并发写入导致的各region同时flush的问题,在短时间内各region由于写入速度呈现正态分布,各region进行flush时刻被错开,有效平均了写入IO,防止了短时间同时flush集中写入带来的大量IO导致的读写性能严重下降。在长时间来看,由于定时进行分区键的轮换,使得从长期来看每个预分区region的写入概率保持均匀,可以保证没有数据倾斜的问题出现。
本申请实施例中,数据写入设备通过获取目标数据表的预分区信息,获取待写入数据,并记录所述待写入数据的目标时间戳,然后根据所述预分区信息与所述目标时间戳,确定所述待写入数据在所述目标数据表中对应的目标分区,再将所述待写入数据写入所述目标分区中。本申请基于预分区信息与待写入数据的目标时间戳确定目标分区,可以有效避免均匀并发写入导致的各分区同时清空的问题,同时有效保障系统并发性能的稳定。
应理解,上述各个实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
对应于上文实施例所述的数据写入方法,图6示出了本申请实施例提供的数据写入装置的结构框图,为了便于说明,仅示出了与本申请实施例相关的部分。
参照图6,该数据写入装置应用于将数据写入HBase数据库的数据写入设备,该数据写入装置包括:分区信息获取单元61,目标序列获取单元62,随机数生成单元63,目标分区确定单元64,数据写入单元65,其中:
分区信息获取单元61,用于获取目标数据表的预分区信息,所述预分区信息包括有序的分区键序列;
目标序列获取单元62,用于根据预设的洗牌规则,对所述分区键序列进行处理,得到目标分区键序列;
随机数生成单元63,用于获取目标随机数;
目标分区确定单元64,用于根据所述目标随机数与所述目标分区键序列,确定待写入数据在所述目标数据表中对应的目标分区;
数据写入单元65,用于将所述待写入数据写入所述目标分区中。
作为本申请一种可能的实施方式,所述目标分区确定单元64包括:
目标分区键确定模块,用于根据所述目标随机数,从所述目标分区键序列中确定目标分区键;
目标分区确定模块,用于基于所述目标分区键,确定所述待写入数据在所述目标数据表中对应的目标分区。
作为本申请一种可能的实施方式,上述目标序列获取单元62包括:
时间戳获取模块,用于获取目标时间戳与预设时间戳,所述目标时间戳为系统的当前时间戳;
差值计算模块,用于计算所述目标时间戳与所述预设时间戳的差值;
目标分区键序列确定模块,用于若所述目标时间戳与所述预设时间戳的差值大于预设洗牌时间阈值,则对所述分区键序列进行洗牌处理,并将经过洗牌处理后的分区键序列确定为目标分区键序列。
作为本申请一种可能的实施方式,上述目标分区键序列确定模块还用于:
若所述目标时间戳与所述预设时间戳的差值小于或等于所述预设洗牌时间阈值,则所述分区键序列即为目标分区键序列。
作为本申请一种可能的实施方式,上述数据写入装置还包括:
时间戳更新模块,用于若所述目标时间戳与所述预设时间戳的差值大于预设洗牌时间阈值,则更新所述预设时间戳,更新后的所述预设时间戳与所述目标时间戳相同。
作为本申请一种可能的实施方式,上述时间阈值获取模块具体用于:
若所述待写入数据为首条需写入所述目标数据表的数据,则所述预设时间戳为发起数据写入请求的客户端刚启动的时间戳;
若所述待写入数据非首条需写入所述目标数据表的数据,则所述预设时间戳为发起数据写入请求的客户端刚启动的时间戳,或者,所述预设时间戳与上一条待写入数据对应的目标时间戳相关。
作为本申请一种可能的实施方式,所述预分区信息还包括分区键数量,上述随机数生成单元63包括:
随机信息获取模块,用于获取随机值与预设倍率,所述随机值为调用预设函数生成标准正态分布的一次随机取值,所述预设倍率用于放大所述随机值;
目标随机数生成模块,用于根据所述随机值、所述预设倍率以及所述分区键数量,生成目标随机数。
本申请实施例中,数据写入设备通过获取目标数据表的预分区信息,根据预设的洗牌规则,对所述预分区信息中的分区键序列进行处理,得到目标分区键序列,获取目标随机数,然后根据所述目标随机数与所述目标分区键序列,确定待写入数据在所述目标数据表中对应的目标分区,再将所述待写入数据写入所述目标分区,避免数据倾斜。本申请可以有效避免均匀并发写入导致各分区同时清空的问题,同时有效保障系统并发性能的稳定。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如图1至图5表示的任意一种数据写入方法的步骤。
本申请实施例还提供一种计算机程序产品,当该计算机程序产品在终端设备上运行时,使得终端设备执行实现如图1至图5表示的任意一种数据写入方法的步骤。
图7是本申请一实施例提供的数据写入设备的示意图。如图7所示,该实施例的数据写入设备7包括:处理器70、存储器71以及存储在所述存储器71中并可在所述处理器70上运行的计算机程序72。所述处理器70执行所述计算机程序72时实现上述各个数据写入方法的实施例中的步骤,例如图1所示的步骤S101至S105。或者,所述处理器70执行所述计算机程序72时实现上述各装置实施例中各模块/单元的功能,例如图6所示单元61至65的功能。
所述计算机程序72可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器71中,并由所述处理器70执行,以完成本申请。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序72在所述数据写入设备7中的执行过程。
所称处理器70可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器71可以是所述数据写入设备7的内部存储单元,例如数据写入设备7的硬盘或内存。所述存储器71也可以是所述数据写入设备7的外部存储设备,例如所述数据写入设备7上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(SecureDigital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器71还可以既包括所述数据写入设备7的内部存储单元也包括外部存储设备。所述存储器71用于存储所述计算机程序以及所述数据写入设备所需的其他程序和数据。所述存储器71还可以用于暂时地存储已经输出或者将要输出的数据。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括是电载波信号和电信信号。
以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。
Claims (10)
1.一种数据写入方法,其特征在于,应用于将数据写入HBase数据库的数据写入设备,所述数据写入方法包括:
获取目标数据表的预分区信息,所述预分区信息包括有序的分区键序列;
根据预设的洗牌规则,对所述分区键序列进行处理,得到目标分区键序列;
获取目标随机数;
根据所述目标随机数与所述目标分区键序列,确定待写入数据在所述目标数据表中对应的目标分区;
将所述待写入数据写入所述目标分区中。
2.如权利要求1所述的数据写入方法,其特征在于,所述根据所述目标随机数与所述目标分区键序列,确定待写入数据在所述目标数据表中对应的目标分区,包括:
根据所述目标随机数,从所述目标分区键序列中确定目标分区键;
基于所述目标分区键,确定所述待写入数据在所述目标数据表中对应的目标分区。
3.如权利要求1所述的数据写入方法,其特征在于,所述根据预设的洗牌规则,对所述分区键序列进行处理,得到目标分区键序列,包括:
获取目标时间戳与预设时间戳,所述目标时间戳为系统的当前时间戳;
计算所述目标时间戳与所述预设时间戳的差值;
若所述目标时间戳与所述预设时间戳的差值大于预设洗牌时间阈值,则对所述分区键序列进行洗牌处理,并将经过洗牌处理后的分区键序列确定为目标分区键序列。
4.如权利要求3所述的数据写入方法,其特征在于,所述数据写入方法还包括:
若所述目标时间戳与所述预设时间戳的差值小于或等于所述预设洗牌时间阈值,则所述分区键序列即为目标分区键序列。
5.如权利要求3所述的数据写入方法,其特征在于,所述数据写入方法还包括:
若所述目标时间戳与所述预设时间戳的差值大于预设洗牌时间阈值,则更新所述预设时间戳,更新后的所述预设时间戳与所述目标时间戳相同。
6.如权利要求3所述的数据写入方法,其特征在于,所述获取预设时间戳,包括:
若所述待写入数据为首条需写入所述目标数据表的数据,则所述预设时间戳为发起数据写入请求的客户端刚启动的时间戳;
若所述待写入数据非首条需写入所述目标数据表的数据,则所述预设时间戳为发起数据写入请求的客户端刚启动的时间戳,或者,所述预设时间戳与上一条待写入数据对应的目标时间戳相关。
7.如权利要求1至6任一项所述的数据写入方法,其特征在于,所述预分区信息还包括分区键数量,所述获取目标随机数,包括:
获取随机值与预设倍率,所述随机值为调用预设函数生成标准正态分布的一次随机取值,所述预设倍率用于放大所述随机值;
根据所述随机值、所述预设倍率以及所述分区键数量,生成目标随机数。
8.一种数据写入装置,其特征在于,应用于将数据写入HBase数据库的数据写入设备,所述数据写入装置包括:
分区信息获取单元,用于获取目标数据表的预分区信息,所述预分区信息包括有序的分区键序列;
目标序列获取单元,用于根据预设的洗牌规则,对所述分区键序列进行处理,得到目标分区键序列;
随机数生成单元,用于获取目标随机数;
目标分区确定单元,用于根据所述目标随机数与所述目标分区键序列,确定待写入数据在所述目标数据表中对应的目标分区;
数据写入单元,用于将所述待写入数据写入所述目标分区中。
9.一种数据写入设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7中任一项所述的数据写入方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7中任一项所述的数据写入方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210121059.0A CN114490659A (zh) | 2022-02-09 | 2022-02-09 | 数据写入方法、装置、数据写入设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210121059.0A CN114490659A (zh) | 2022-02-09 | 2022-02-09 | 数据写入方法、装置、数据写入设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114490659A true CN114490659A (zh) | 2022-05-13 |
Family
ID=81478168
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210121059.0A Pending CN114490659A (zh) | 2022-02-09 | 2022-02-09 | 数据写入方法、装置、数据写入设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114490659A (zh) |
-
2022
- 2022-02-09 CN CN202210121059.0A patent/CN114490659A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107622091B (zh) | 一种数据库查询方法和装置 | |
EP2069979B1 (en) | Dynamic fragment mapping | |
WO2020041928A1 (zh) | 数据存储方法、系统及终端设备 | |
JP2002202902A (ja) | パーティション作成方法および削除方法、プログラムを記録した記録媒体、情報処理装置 | |
JP2021518021A (ja) | データ処理方法、装置及びコンピュータ読み取り可能な記憶媒体 | |
CN111475105A (zh) | 监控数据存储方法、设备、服务器及存储介质 | |
CN107092624B (zh) | 数据存储方法、装置及系统 | |
CN109460406A (zh) | 一种数据处理方法及装置 | |
CN114064979A (zh) | 一种加速获取raid的存储数据的方法、计算机及存储介质 | |
CN117093579A (zh) | 数据查询、数据存储方法、装置、设备及存储介质 | |
CN114490659A (zh) | 数据写入方法、装置、数据写入设备和存储介质 | |
CN111459408A (zh) | 一种提升dram中数据查找速率的方法及系统 | |
CN100447758C (zh) | 逻辑磁盘管理器的快照管理方法 | |
US20130218851A1 (en) | Storage system, data management device, method and program | |
CN114217741A (zh) | 存储装置的存储方法及存储装置 | |
CN112015672A (zh) | 一种存储系统中数据处理方法、装置、设备及存储介质 | |
CN113722623A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN115543992A (zh) | 一种操作请求处理方法及相关装置 | |
US20240320203A1 (en) | Method for data processing, database system, computer equipment, and storage medium | |
JP2002032359A (ja) | Fftのためのインプレイスメモリ管理 | |
CN118567577B (zh) | 基于分布式块存储的数据访问方法、装置、电子设备 | |
CN117909296B (zh) | 一种基于lsm树的文件合并方法及相关设备 | |
CN111459949B (zh) | 针对数据库的数据处理方法、装置及设备和索引更新方法 | |
CN116150212B (zh) | 数据处理方法及设备 | |
JPS62287350A (ja) | インデツクス一括更新方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |