CN103593436A - 文件合并方法和装置 - Google Patents
文件合并方法和装置 Download PDFInfo
- Publication number
- CN103593436A CN103593436A CN201310561317.8A CN201310561317A CN103593436A CN 103593436 A CN103593436 A CN 103593436A CN 201310561317 A CN201310561317 A CN 201310561317A CN 103593436 A CN103593436 A CN 103593436A
- Authority
- CN
- China
- Prior art keywords
- data
- file
- node
- key assignments
- key
- 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.)
- Granted
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/10—File systems; File servers
- G06F16/17—Details of further file system functions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
- G06F16/1824—Distributed file systems implemented using Network-attached Storage [NAS] architecture
- G06F16/183—Provision of network file services by network file servers, e.g. by using NFS, CIFS
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供一种文件合并方法和装置,包括:根据用户数据的键值信息对集群***中各节点所负责的区间分别进行分区;对于每一个节点,确定节点满足第一触发条件,从节点的磁盘中读取至少两个第一文件至节点的缓存中,根据各第一文件中存储的各用户对应的数据的键值分别确定各键值所属的目标分区;将具有相同键值的数据进行合并,并将合并后各键值对应的数据存储在对应的目标分区内。通过对节点内区间进行分区,经过一次数据合并,将具有相同键值的数据存储在同一分区内。在查询时,根据键值确定数据所在的分区,然后扫描分区内各文件,由于分区内的文件个数较少,只需要从较少的文件中进行数据筛选,从而达到读性能提升。
Description
技术领域
本发明实施例涉及数据通讯技术,尤其涉及一种文件合并方法和装置。
背景技术
随着互联网不断的发展,互联网应用的规模不断壮大,这些应用依赖的数据库存储面临越来越大的挑战。传统的关系型数据已经很难满足海量数据的存储需求,非关系型数据库NoSql应用而生,例如:Google开发的BigTable,Facebook的Cassandra都是非关系型数据库。通常非关系型数据库是一个分布式***,它所存储的数据分布在各个节点上,目前大多非关系型数据库都是通过一致性哈希(hash)来实现,所谓一致性hash,是将hash函数所有的hash值组成一个首尾相连接的环(最大值和最小值相连接),而非关系型数据库集群中的每一个节点负责这个环的一部分,同样的,对需要存储的数据也进行哈希,通过哈希值就可以找到负责数据存储的节点,这样就达到了数据存储和节点的对应。
就每个节点的数据存储物理存储结构而言,传统的关系型数据库有着固定的块,可以反复进行数据的读写,而非关系型数据库为了保证并发写性能,采用了磁盘随机写模式,以磁盘上的一个逻辑数据文件为最小的数据存储单元,不删除旧数据,而是通过时间戳新旧确定最新的数据,这种不同于关系型数据库的数据持久化方式是当前许多非关系型数据库所采用的。图1为非关系型数据库的数据存放示意图,如图1所示,在写数据时,首先将数据写到内存表(memory table)中,当内存表中的数据满时,将内存表中的待写数据通过flush方式写到磁盘成为一个文件组,该文件组的数据输出格式可以是有序字符串表(SSTable,Sorted String Table)的。每个文件组包括一组文件,各个文件分别用于存储用户数据、文件的索引信息、键值的哈希算法、静态统计文件。如图1所示,将内存表(待写)中的数据正在写入到文件组n中。相同用户的数据可能分散在多个不同的文件中,随着文件的不断增多,每一次的数据读都需要从多个文件中进行数据筛选,通过对比相同记录的时间戳新旧,才能决定需要返回哪一条记录给客户。在这样的场景下,时间越久,数据文件越多,那整个数据库的读性能会有呈指数级下降。因此在许多非关系型数据库产品中已经提出了并实现了数据合并的方法,利用键值相同,将数据由分布在零散的数据文件中通过合并比较(MAP-REDUCE)整合到一个大的数据文件中,通过多次合并比较,将文件数量减少,以此来提升数据库的读性能。现有技术中,即使通过文件合并的方法,节点上存储的文件的个数仍然较大,每一次的数据读都需要从多个文件中进行数据筛选,整个数据库的读性能仍然不高。
发明内容
本发明实施例提供一种文件合并方法和装置,能够提升文件的读性能。
本发明第一方面提供一种文件合并方法,包括:
根据用户数据的键值信息对集群***中各节点所负责的区间分别进行分区,所述各节点的各分区与用户数据的键值一一对应;
对于每一个节点,确定所述节点满足第一触发条件,从所述节点的磁盘中读取至少两个第一文件至所述节点对应的缓存中,所述各第一文件未进行过合并,所述各第一文件中存储有至少一个用户对应的数据,每个用户对应的数据的键值不同;
根据所述各第一文件中各用户对应的数据的键值分别确定所述各键值所属的目标分区;
根据所述各键值对所述各第一文件中具有相同键值的数据进行合并,并将合并后所述各键值对应的数据存储在对应的目标分区内。
在本发明第一方面的第一种可能的实现方式中,所述根据所述各第一文件中各用户对应的数据的键值分别确定所述各键值所属的目标分区,包括:
根据所述各用户对应的数据的键值分别计算所述各键值对应的哈希值;
根据所述各键值对应的哈希值确定所述各键值所属的目标分区。
在本发明第一方面的第二种可能的实现方式中,根据所述各键值对所述各目标文件中具有相同键值的数据进行合并,并将合并后所述各键值对应的数据存储在对应的目标分区内之后,还包括:
确定所述目标分区满足第二触发条件,从所述目标分区所在的节点的磁盘中读取所述目标分区内的至少两个第二文件至缓存中,所述各第二文件中存储有至少一个用户对应的数据,每个用户对应的数据的键值不同;
根据所述各用户对应的数据的键值对所述各第二文件中具有相同键值的数据进行合并,并将合并后所述各键值对应的数据存储在所述目标分区的第三文件中。
结合本发明第一方面以及第一方面的第一种和第二种可能的实现方式,在本发明第一方面的第三种可能的实现方式中,根据所述各键值对所述各目标文件中具有相同键值的数据进行合并,并将合并后所述各键值对应的数据存储在对应的目标分区内之后,还包括:
当接收到数据查询请求时,根据所述数据查询请求获取待查询数据的键值;
根据所述待查询数据的键值确定所述待查询数据所在的待查询分区,根据所述待查询数据的键值扫描所述待查询分区内的所有文件,获取所述待查询数据的键值对应的待查询数据。
在本发明第一方面的第四种可能的实现方式中,根据所述待查询数据的键值确定所述待查询数据所在的待查询分区,包括:
计算所述待查询数据的键值对应的哈希值;
根据所述待查询数据的键值对应的哈希值确定所述待查询数据所在的待查询分区。
在本发明第一方面的第五种可能的实现方式中,所述确定所述节点满足第一触发条件,包括:
判断所述节点上存储的第一文件的个数是否达到预设的第一文件合并个数M1,其中,M1的取值为大于等于2的正整数;
若是,则确定所述节点满足第一触发条件。
在本发明第一方面的第六种可能的实现方式中,所述确定所述节点满足第一触发条件,包括:
判断所述节点上存储的第一文件的个数是否达到预设的第一文件合并个数M1,其中,M1的取值为大于等于2的正整数;
若是,根据所述各第一文件的大小确定所述各第一文件是否满足第一合并条件;
若是,则确定所述节点满足第一触发条件。
在本发明第一方面的第七种可能的实现方式中,所述确定所述目标分区满足第二触发条件,包括:
判断所述目标分区上存储的第二文件的个数是否达到预设的第二文件合并个数M2,其中,M2的取值为大于等于2的正整数;
若是,则确定所述目标分区满足第二触发条件。
在本发明第一方面的第八种可能的实现方式中,所述确定所述目标分区满足第二触发条件,包括:
判断所述目标分区上存储的第二文件的个数是否达到预设的第二文件合并个数M2,其中,M2的取值为大于等于2的正整数;
若是,根据所述各第二文件的大小确定所述各第二文件是否满足第二合并条件;
若满足,则确定所述目标分区满足第二触发条件。
在本发明第一方面的第九种可能的实现方式中,所述根据用户数据的键值信息对集群***中各节点所负责的区间分别进行分区,包括:
如果所述集群***所负责的区间为(min,min+2^127],将所述集群***所负责的区间按照2^N进行拆分,得到分区步长S,S=2^127/2^N,其中,min表示所述集群***所负责的区间的最小哈希值,min+2^127表示所述集群***所负责的区间的最大哈希值,min的取值为大于等于0的正整数,N为分区因子,N的取值为大于等于1的正整数;
对于所述各节点,如果节点所负责的区间为(r1,r2],则根据所述分区步长S对所述节点进行分区,得到|r1–r2|/S个区间,顺序相邻的两个区间形成一个左开右闭区间(rn,rn+1],其中,0<n<|r1–r2|/S–1,n为正整数,所述每个区间为所述节点的一个分区,r1表示所述节点所负责的区间的最小哈希值,r2表示所述节点所负责的区间的最大哈希值,r1和r2的取值都为大于等于0的正整数,且r2大于r1,|r1–r2|表示取r1和r2差值的绝对值。
本发明第二方面提供一种文件合并装置,包括:
分区模块,用于根据用户数据的键值信息对集群***中各节点所负责的区间分别进行分区,所述各节点的各分区与用户数据的键值一一对应;
文件读取模块,用于对于每一个节点,确定所述节点满足第一触发条件,从所述节点的磁盘中读取至少两个第一文件至所述节点对应的缓存中,所述各第一文件未进行过合并,所述各第一文件中存储有至少一个用户对应的数据,每个用户对应的数据的键值不同;
分区确定模块,用于根据所述各第一文件中各用户对应的数据的键值分别确定所述各键值所属的目标分区;
文件合并模块,用于根据所述各键值对所述各第一文件中具有相同键值的数据进行合并,并将合并后所述各键值对应的数据存储在对应的目标分区内。
在本发明第二方面的第一种可能的实现方式中,所述分区确定模块具体用于:
根据所述各用户对应的数据的键值分别计算所述各键值对应的哈希值;
根据所述各键值对应的哈希值确定所述各键值所属的目标分区。
在本发明第二方面的第二种可能的实现方式中,所述读取模块还用于:
确定所述目标分区满足第二触发条件,从所述目标分区所在的节点的磁盘中读取所述目标分区内的至少两个第二文件至缓存中,所述各第二文件中存储有至少一个用户对应的数据,每个用户对应的数据的键值不同;
所述文件合并模块,还用于根据所述各用户对应的数据的键值对所述各第二文件中具有相同键值的数据进行合并,并将合并后所述各键值对应的数据存储在所述目标分区的第三文件中。
结合本发明第二方面以及第二方面的第一种和第二种可能的实现方式,在本发明第二方面的第三种可能的实现方式中,还包括:接收模块、键值获取模块和查询模块;
所述接收模块,用于接收数据查询请求;
所述键值获取模块,用于当所述接收模块接收到数据查询请求时,根据所述数据查询请求获取待查询数据的键值;
所述分区确定模块还用于:根据所述待查询数据的键值确定所述待查询数据所在的待查询分区;
所述查询模块,用于根据所述待查询数据的键值扫描所述待查询分区内的所有文件,获取所述待查询数据的键值对应的待查询数据。
在本发明第二方面的第四种可能的实现方式中,所述分区确定模块具体用于:
计算所述待查询数据的键值对应的哈希值;
根据所述待查询数据的键值对应的哈希值确定所述待查询数据所在的待查询分区。
在本发明第二方面的第五种可能的实现方式中,所述文件读取模块具体用于:
判断所述节点上存储的第一文件的个数是否达到预设的第一文件合并个数M1,其中,M1的取值为大于等于2的正整数;
若是,则确定所述节点满足第一触发条件,从所述节点的磁盘中读取至少两个第一文件至所述节点对应的缓存中。
在本发明第二方面的第六种可能的实现方式中,所述文件读取模块具体用于:
判断所述节点上存储的第一文件的个数是否达到预设的第一文件合并个数M1,其中,M1的取值为大于等于2的正整数;
若是,根据所述各第一文件的大小确定所述各第一文件是否满足第一合并条件;
若是,则确定所述节点满足第一触发条件,从所述节点的磁盘中读取至少两个第一文件至所述节点对应的缓存中。
在本发明第二方面的第六种可能的实现方式中,所述文件读取模块具体用于:
判断所述目标分区上存储的第二文件的个数是否达到预设的第二文件合并个数M2,其中,M2的取值为大于等于2的正整数;
若是,则确定所述目标分区满足第二触发条件,从所述目标分区所在的节点的磁盘中读取所述目标分区内的至少两个第二文件至缓存中。
在本发明第二方面的第六种可能的实现方式中,所述文件读取模块具体用于:
判断所述目标分区上存储的第二文件的个数是否达到预设的第二文件合并个数M2,其中,M2的取值为大于等于2的正整数;
若是,根据所述各第二文件的大小确定所述各第二文件是否满足第二合并条件;
若满足,则确定所述目标分区满足第二触发条件,从所述目标分区所在的节点的磁盘中读取所述目标分区内的至少两个第二文件至缓存中。
在本发明第二方面的第九种可能的实现方式中,所述分区模块具体用于:
如果所述集群***所负责的区间为(min,min+2^127],将所述集群***所负责的区间按照2^N进行拆分,得到分区步长S,S=2^127/2^N,其中,min表示所述集群***所负责的区间的最小哈希值,min+2^127表示所述集群***所负责的区间的最大哈希值,min的取值为大于等于0的正整数,N为分区因子,N的取值为大于等于1的正整数;
对于所述各节点,如果节点所负责的区间为(r1,r2],则根据所述分区步长S对所述节点进行分区,得到|r1–r2|/S个区间,顺序相邻的两个区间形成一个左开右闭区间(rn,rn+1],其中,0<n<|r1–r2|/S–1,n为正整数,所述每个区间为所述节点的一个分区,r1表示所述节点所负责的区间的最小哈希值,r2表示所述节点所负责的区间的最大哈希值,r1和r2的取值都为大于等于0的正整数,且r2大于r1,|r1–r2|表示取r1和r2差值的绝对值。
本发明实施例的文件合并方法和装置,通过对节点所负责的区间进行分区,当满足第一触发条件时,触发节点上的未经过合并的文件进行一次合并,经过一次数据合并后,将具有相同键值的用户数据存储在同一分区内,使数据存放的粒度降低。在查询时,首先根据键值确定数据所在的分区,在所属分区扫描各数据文件查询需要的数据,由于分区内文件个数较少,只需要从较少的文件中进行数据筛选,从而提升读性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为非关系型数据库的数据存放示意图;
图2为集群分布***图;
图3为现有技术中一种文件合并的示意图;
图4为本发明文件合并方法实施例一的流程图;
图5为本发明文件合并方法实施例二的流程图;
图6为本实施例所适用的节点分区示意图;
图7为本发明文件合并装置实施例一的结构示意图;
图8为本发明文件合并装置实施例二的结构示意图;
图9为本发明文件合并装置实施例三的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在介绍本发明各实施例之前,先简单介绍一下本发明各实施例所适用的一个场景,本发明各实施例主要适用于非关系型数据库,非关系型数据库可以通过一致性哈希来实现,所谓一致性hash,是将hash函数所有的hash值组成一个首尾相连接的哈希环,该哈希环的第一个为最大值,最后一个为最小值,即最大值和最小值相连接,该哈希环上的所有哈希值组成了非关系型数据库集群***的区间,而集群中的每一个节点负责该哈希环的部分区间,即每个节点上存储的数据对应的哈希值必须落在该节点负责的区间内,同样的,对需要存储的数据也进行哈希,通过哈希值就可以找到负责数据存储的节点,这样就达到了数据存储和节点的对应。
图2为集群分布***图,如图2所示,图2中的集群分布***共有四个节点,图中哈希环上分布的四个大圆圈分别表示四个节点,这四个大圆圈为虚线箭头所指向的圆圈,四个节点分别为节点1、节点2、节点3、节点4,每个节点对应一个缓存和磁盘,各个大圆圈之间的小圆圈表示用户数据。集群***所负责的哈希值的区间为(0,2^32],按照顺时针方向,节点4和节点1之间的区间为节点1负责的区间,节点1和节点2之间的区间为节点2负责的区间,节点2和节点3之间的区间为节点3负责的区间,节点3和节点4之间的区间为节点4所负责的区间。各个节点负责的区间的哈希值不同,当每个节点接收到数据时,先获取数据所对应的用户的键值信息,计算键值所对应的哈希值,判断键值对应的哈希值落在哪个节点所负责的区间内,将用户数据存储在该节点上。图2只是举例进行说明,集群***的节点可能会更多。
图4为本发明文件合并方法实施例一的流程图,本实施例提供的方法由各个节点分别执行,每个节点都按照本实施例提供的方法对自己节点上的文件按照如下方法进行合并,如图4所示,本实施例提供的文件合并方法包括以下步骤:
步骤101、根据用户数据的键值信息对集群***中各节点所负责的区间分别进行分区。
对节点所负责的区间进行分区,是指按照一定的规则将节点所负责的区间划分为更小的区间,划分后的每个区间即为一个分区,这个分区就是一个该区间的子区间,在本发明的各个实施例中,分区就是某个区间的子区间。本实施例提供的方法,通过对各节点所负责的区间进一步的划分为更小的分区,每个分区负责一个更小的区间,各分区与用于数据的键值一一对应。
步骤102、对于每一个节点,确定该节点满足第一触发条件,从该节点的磁盘中读取至少两个第一文件至该节点对应的缓存中,各第一文件未进行过合并,各第一文件中存储有至少一个用户对应的数据,每个用户对应的数据的键值不同。
每个节点上有专门的模块负责文件的合并,该模块通过确定该节点上满足第一触发条件,当该节点满足第一触发条件时触发文件合并任务。确定该节点是否满足第一触发条件,具体为,判断该节点上存储的第一文件的个数是否达到预设的第一文件合并个数M1,M1的取值为大于等于2的正整数,若是,则确定节点满足第一触发条件。预设的第一文件合并个数例如为4,则当节点上的第一文件数达到4个时,就触发文件的合并任务,这里第一文件是指未进行过合并的文件,当该节点接收到用户数据时,将用户数据存储到节点上的文件中,该节点上也存储有一些已经进行过合并的文件,如果节点上个各文件满足该第一触发条件,则触发合并任务。
当然,第一触发条件还可以包括其他预设的条件,例如当该节点上的第一文件的个数到达预设的文件合并个数,进一步根据各第一文件的大小确定各第一文件是否满足第一合并条件;若是,则确定节点满足第一触发条件。这里,根据各第一文件的大小确定各第一文件是否满足第一合并条件,具体为判断各第一文件的大小差异满足预设的阈值,若各第一文件的大小差异满足预设的阈值,才触发文件合并任务,如果各第一合并文件大小差异很大,则不进行文件合并,具体通过一个例子来说明,如果有4个第一文件,分别用1、2、3、4表示,文件1大小为100M,文件2大小为200M,文件3大小为300M,文件4大小为50M,当读取到文件1和文件2后,取文件1和文件2大小的平均值为150M,然后用平均值乘以最大加权因子和最小加权因子,通常情况下,最大加权因子为1.5,最小加权因子为0.5,本实施例中,平均值乘以最大加权因子和最小加权因子分别得到75M和225M,如果文件3的大小落在【75M,225M】区间内,则说明文件3的大小合适满足合并条件,能够与文件1、2进行合并,本实施例中文件3大小为300M超出了【75M,225M】区间,所以不满足合并条件,然后可以用同样的方法继续比较文件4的大小,本实施例中文件4大小为50M,虽然没有落在【75M,225M】区间内,但是由于文件4本身很小,即使合并也不会占用多少资源,因此,对于小文件可以不满足上述区间,可以设置一个阈值,如果文件小于该阈值,则直接对文件进行合并,例如将阈值设置为50M。这里,指示举了一个例子来说明如果判断各文件大小差异是否满足预设的阈值,当然也可以通过其他方法来判断,这里不再一一列举。
步骤103、根据各第一文件中各用户对应的数据的键值分别确定各键值所属的目标分区。
读取待合并的第一文件后,根据第一文件中各用户对应的数据的键值分别确定各键值所属的目标分区,即判断各用户对应的数据的键值落在哪个分区内。根据各用户对应的数据的键值分别确定各键值所属的目标分区,具体为:首先,根据各用户对应的数据的键值分别计算各键值对应的哈希值;然后,根据各键值对应的哈希值确定各键值所属的目标分区,不同的键值对应的哈希值可能落在不同的分区内。
步骤104、根据各键值对各第一文件中具有相同键值的数据进行合并,并将合并后各键值对应的数据存储在对应的目标分区内。
本步骤中,将各第一文件中具有相同键值的数据进行合并,例如A用户的数据分别存储在文件1、文件2和文件3中,则从这三个文件中分别读取A用户的数据,A用户的数据在三个文件中的键值相同,则将A用户的数据合并后存储在目标分区内,目标分区是根据A用户数据对应的键值的哈希值确定的。在文件合并完成后,会将合并后的数据存储在目标分区的第二文件中,例如存储在目标分区A的第二文件中,每一个文件都会对应一个静态统计文件,静态统计文件用于存储有该文件相关的信息,例如数据写入的时间,文件的大小等信息,本实施例中,通过将该第二文件与所属目标分区的对应关系保存到静态统计文件中,后续当节点重新启动的时候,根据静态统计文件可以直接将该第二文件加载到该目标分区对应的分区文件列表中,分区文件列表中记录有该目标分区内所有文件的信息,例如该目标分区内的各文件分别位于磁盘上的存储地址信息,当节点重新启动时,根据静态统计文件将目标分区内的所有的文件都加载在该目标分区对应的分区文件列表中,在进行数据查询的时候,根据静态统计文件中该第二文件与所属目标分区的对应关系,找到该分区文件列表,然后根据该分区文件列表从磁盘上读取数据。
需要说明的是,如果用户A的数据只存储在文件1中,在文件2和文件3中没有存储A用户的数据,这时,实际上在合并的过程中,对用户A的数据来说,并没有合并,只是将用户A的数据按照键值对应的目标分区,将A用户的数据存储到目标分区上的第二文件中,只有当两个第一文件中的存储有键值相同的数据时,才对数据进行了合并。
本实施例提供的方法,通过对节点所负责的区间进行分区,当满足第一触发条件时,触发节点上的未经过合并的文件进行合并,各文件中存储有至少一个用户对应的数据,每个用户对应的数据的键值不同,根据各用户对应的数据的键值分别计算各键值对应的哈希值,并确定各键值对应的哈希值所属的目标分区,然后将待合并的文件中具有相同键值的数据进行合并,并根据该键值对应的哈希值所属的目标分区,将合并后的数据存储到该目标分区内。通过对节点内区域进行分区,然后经过一次数据合并,将具有相同键值的用户数据存储在同一分区内,使数据存放的粒度降低。当查询时,首先根据键值确定数据所在的分区,在所属分区扫描各数据文件查询需要的数据,由于分区内文件个数较少,只需要从较少的文件中进行数据筛选,从而达到读性能提升。
图5为本发明文件合并方法实施例二的流程图,本实施例提供的方法由各个节点分别执行,每个节点都按照本实施例提供的方法对自己节点上的文件按照如下方法进行合并,和实施例一相比,本实施例在实施例一的基础上,当分区内满足合并条件时,对该分区内的文件进一步进行合并。如图5所示,本实施例提供的文件合并方法包括以下步骤:
步骤201、根据用户数据的键值信息对集群***中各节点所负责的区间分别进行分区。
对节点所负责的区间进行分区,是指按照一定的规则将节点所负责的区间划分为更小的区间,划分后的每个区间即为一个分区。本实施例中,可通过以下方式进行分区:如果集群***所负责的区间为(min,min+2^127],将集群***所负责的区间按照2^N进行拆分,得到分区步长S,S=2^127/2^N,其中,min表示集群***所负责的区间的最小哈希值,min+2^127表示集群***所负责的区间的最大哈希值,min的取值为大于等于0的正整数,N为分区因子,N的取值为大于等于1的正整数,分区因子N可以根据实际需要进行设置。
对于每个节点,如果节点所负责的区间为(r1,r2],则根据分区步长S对节点进行分区,得到|r1–r2|/S个区间,顺序相邻的两个区间形成一个左开右闭区间(rn,rn+1],其中,0<n<|r1–r2|/S–1,n为正整数,每个区间为节点的一个分区,r1表示节点所负责的区间的最小哈希值,r2表示节点所负责的区间的最大哈希值,r1和r2的取值都为大于等于0的正整数,且r2大于r1,|r1–r2|表示取r1和r2差值的绝对值。
这里只是列举了一种分区方法,在分区时,各个分区的大小可以相同也可以不同,本发明并不对此进行限制。
以下将通过一个具体例子来说明,图6为本实施例所适用的节点分区示意图,如图6所示,上图中圆圈表示整个集群***,集群***中共有四个节点,分别是节点A、节点B、节点C、节点D,节点A负责的区间对应的哈希值的范围为(70,10],其中,70和10表示哈希值,节点B负责的区间为(10,30],节点C负责的区间为(30,50],节点D负责的区间为(50,70]。以节点B为例进行说明,首先将节点B负责的区间为(10,30]划分为三个分区,分别为分区(slice)B1,分区B2和分区B3,分区B1的区间为(10,15],分区B2的区间为(15,25],分区B3的区间为(25,30]。节点B上有5个待合并的第一文件,将这5个文件合并为3个第二文件,合并后的3个第二文件分别属于不同的分区,将合并后的第二文件分别存储到对对应的目标分区,如图6中所示,箭头指示的方向即表示各第二文件所属的目标分区,以下将通过具体的例子来说明,假设节点B上有5个待合并的第一文件分别为:文件1、文件2、文件3、文件4和文件5,其中,文件1上存储有三个用户的数据,用户A1的数据对应的键值为a1,用户A2的数据对应的键值为a2、用户A3的数据对应的键值为a3;文件2上存储有用户A1和A2的数据,文件3上存储有用户A1的数据,还存储有用户A4和A5的数据,用户A4的数据对应的键值为a4,用户A5的数据对应的键值为a5,文件4上存储有用户A3和用户A4的数据,文件5上存储有用户A2、A3、A4、A5的数据。这里以键值为a1的数据进行合并为例进行说明,首先,按照哈希算法计算键值a1对应的哈希值,然后确定键值a1对应的哈希值落在哪个分区内,假设键值a1对应的哈希值落在分区B1内,则将分区B1确定为键值a1所属的目标分区,最后,将文件1、文件2和文件3中键值为a1的数据进行合并,并将合并后的数据存储在分区B1上的文件6中。按照同样的方法,对键值为a2、a3、a4和a5分别进行合并,假设键值a2和a5所属的目标分区为分区B2,键值a1和a3所属的目标分区为分区B1,键值a4所属的目标分区为分区B3,则将键值a1和a3合并后的数据存储在文件6中,文件6属于分区B1,将键值a2和a5合并后的数据存储在文件7中,文件7属于B2,将键值a4合并后的数据存储在文件8中,文件8属于B3,文件6、文件7、文件8都是第二文件。通过上述的合并,将五个第一文件中的数据合并到三个第二文件中,每个第二文件属于不同的片区,从而将用户A1、A3的数据通过合并都存储在分区B1上,用户A2、A5的数据通过合并都存储在分区B2上,用户A4的数据通过合并后存储在分区B3上。
步骤202、对于每一个节点,确定该节点满足第一触发条件,从该节点的磁盘中读取至少两个第一文件至该节点对应的缓存中。
本步骤中,第一文件是指未进行过合并的文件,各第一文件中存储有至少一个用户对应的数据,每个用户对应的数据的键值不同。具体实现方式可参照实施例一种步骤102中的描述。
步骤203、根据各第一文件中各用户对应的数据的键值分别确定各键值所属的目标分区。
不同用户对应的数据可通过键值来区分,对于每个用户来说,该用户所有的数据的键值都相同,用户数据和键值一一对应,在查询时根据键值找到该用户对应的数据。本实施例中,根据各用户对应的数据的键值分别确定各键值所属的目标分区具体为:首先,根据各用户对应的数据的键值分别计算各键值对应的哈希值,在得到键值对应的哈希值后,判断各哈希值分别属于哪个分区,每个分区负责一个区间,各键值对应的哈希值所属的分区即为各键值所属的目标分区。
步骤204、根据各键值对各第一文件中具有相同键值的数据进行合并,并将合并后各键值对应的数据存储在对应的目标分区内。
本步骤中,将各第一文件中具有相同键值的数据合并,并将合并后的数据存储在目标分区的第二文件中。在合并完成后,将该第二文件与所属的目标分区的关系存储在该第二文件对应的静态统计文件中,每一个文件都对应一个静态统计文件,后续当节点重新启动的时候,可以根据静态统计文件直接将该第二文件加载到该目标分区对应的分区文件列表中,在进行数据查询的时候,根据静态统计文件中该第二文件与所属的目标分区的关系,找到该目标分区的分区文件列表,然后根据该目标分区的分区文件列表从磁盘上读取数据。
步骤205、确定目标分区满足第二触发条件,从目标分区所在的节点的磁盘中读取目标分区内的至少两个第二文件至缓存中。
上述步骤201-204中,通过对节点内区域进行分区,将数据存放的粒度再次降低,对未进行过合并的文件进行一次合并,通过一次合并将数据分散到不同的分区内。而本步骤中,当某个分区内的文件满足合并条件时,对分区内的文件再次进行合并,各个分区都是独立,在进行合并时,只对本分区内的文件进行合并。具体地,当目标分区满足第二触发条件时,从目标分区所在的节点的磁盘中读取目标分区内的待合并的至少两个第二文件至缓存中,各第二文件中存储有至少一个用户对应的数据,每个用户对应的数据的键值不同。
本实施例中,确定目标分区是否满足第二触发条件,具体为,判断目标分区上存储的第二文件的个数是否达到预设的第二文件合并个数M2,M2的取值为大于等于2的正整数,当然,第二触发条件还可以包括其他预设的条件,例如当该目标分区上的第二文件的个数到达预设的第二文件合并个数,进一步根据各第二文件的大小确定各第二文件是否满足第二合并条件,确定各第二文件是否满足第二合并条件具体指判断各第二文件的大小差异是否满足预设的最大阈值,若各第二文件大小差异满足预设的最大阈值才触发文件合并任务,如果各第二文件大小差异很大,则不进行文件合并,本实施例中,判断各第二文件大小差异是否满足预设的最大阈值,可采用实施例一中判断各第一文件大小差异是否满足预设的最大阈值的方法,这里不再赘述,但具体的参数设置可以不同。举例来说,如果一个第二文件大小为500M,而另一个第二文件大小为30M,则不进行合并。预设的文件合并个数M2可根据实际的需要设置,如果对查询速率要求高,则可将M2的值设置的小一些,增加合并次数,以减少文件的个数,提高查询效率。
步骤206、根据各用户对应的数据的键值对各第二文件中具有相同键值的数据进行合并,并将合并后各键值对应的数据存储在目标分区的第三文件中。
本步骤中,将目标分区内各待合并的第二文件中具有相同键值的数据合并在同一个第三文件中,使得同一分区内数据高度聚合。图3为现有技术中一种文件合并的示意图,如图3所示,当文件个数超过4个后,就会发起合并任务,将4个文件合并成为一个新的文件,如果再有新的数据文件生成时,会通过大小的比较,选取大小相近的数据文件进行合并。具体实现方式是,将同一张表下的所有sstable按大小进行分组,将大小相似的sstable归为一组,这样就形成n个组(n>=1),再从这n个组中获取平均大小最小的一个组形成一个task进行compaction的操作。每组的大小必须在(4,32]的范围内,数量过多的组将进行截断,之后通过map-reduce的方式将有相同键值的数据合并到一起,从而形成新的数据文件。且该方法中支持多线程并发执行多个任务,每个任务选取的数据文件不相同。但是现有技术也存在以下问题,数据文件合并的触发条件低,4个文件即可触发,每天发生合并的次数多,大量的文件合并会占用相当大的内存、CPU、I/O等资源,而且在数据文件经过多轮合并后,键值已经达到相当高的整合度,此时再进行的合并,仅仅是进行键值数据的搬迁,只有少量的合并动作,造成***资源的浪费。本实施例提供的方法通过将大文件拆分成小的分区文件,合并时只有当分区内的文件满足合并条件时,才对分区内的文件进行合并,由于分区内文件个数相对于现有技术中一个节点上的文件个数很少,从而能够减少合并次数,提高合并效率,在数据平均分布的情况下,每个分区上存储的文件大小相同,相同数据量的合并效率可以提升30%以上。
步骤207、当接收到数据查询请求时,根据数据查询请求获取待查询数据的键值,根据待查询数据的键值确定待查询数据所在的待查询分区,根据待查询数据的键值扫描待查询分区内的所有文件,获取待查询数据的键值对应的待查询数据。
数据查询时,首先根据待查询数据的键值确定待查询数据所在的分区,然后对所属分区内的数据文件进行过滤扫描,进而将得到符合条件的结果并返回。具体地,当接收到数据查询请求时,解析出待查询数据的键值信息,然后,计算待查询数据的键值对应的哈希值,根据待查询数据的键值对应的哈希值确定待查询数据所在的待查询分区。根据待查询数据的键值扫描待查询分区内的所有文件,获取键值对应的待查询数据并返回。
本实施提供的方法,还能够提升查询效率,在查询过程中,对比以前的查询扫描方式,需要对磁盘上所有文件进行一次判断,确定要查询的数据是否在此数据文件中,使得查询效率低,而且需要从磁盘上频繁的读取数据,增加了***的I/O开销,同时也会占用过多的CPU和内存,造成资源的浪费。假设数据平均分布,数据量为100G,查询深度为1000,如果将节点分为四个分区,分区查询效率可以提升25%。
本实施例提供的方法,通过对节点内区域进行分区,将数据存放的粒度再次降低,通过一次合并,将数据分散到不同的分区内,而当分区内满足合并条件时,对分区内的文件进行合并,将分区内具有相同键值的数据合并到一个文件中,提高了分区内文件的聚合度。在查询过程中,首先根据键值确定要查询的数据所在的分区,对所属分区内的数据文件进行过滤扫描,进而将得到符合条件的结果并返回,由于分区内文件个数少,而且每个文件中的数据高度聚合,能够减少查询次数,提高了查询效率。
图7为本发明文件合并装置实施例一的结构示意图,本实施例提供的文件合并装置可以集成在集群***的各节点上,当然也可以独立设置,如图7所示,本实施例提供的文件合并装置包括:分区模块31、文件读取模块32、分区确定模块33、文件合并模块34。
其中,分区模块31,用于根据用户数据的键值信息对集群***中各节点所负责的区间分别进行分区,各节点的各分区与用户数据的键值一一对应;
文件读取模块32,用于对于每一个节点,确定节点满足第一触发条件,从节点的磁盘中读取至少两个第一文件至节点对应的缓存中,各第一文件未进行过合并,各第一文件中存储有至少一个用户对应的数据,每个用户对应的数据的键值不同;
分区确定模块33,用于根据各第一文件中各用户对应的数据的键值分别确定各键值所属的目标分区;
文件合并模块34,用于根据各键值对各第一文件中具有相同键值的数据进行合并,并将合并后各键值对应的数据存储在对应的目标分区内。
本实施例中,分区确定模块33具体用于:根据各用户对应的数据的键值分别计算各键值对应的哈希值;根据各键值对应的哈希值确定各键值所属的目标分区。
本实施例提供的文件合并装置,可用于执行方法实施例一提供的技术方案,具体实现方式和技术效果类型,这里不再赘述。
图8为本发明文件合并装置实施例二的结构示意图,本实施例提供的文件合并装置可以集成在集群***的各节点上,当然也可以独立设置,如图8所示,本实施例提供的文件合并装置包括:分区模块41、文件读取模块42、分区确定模块43、文件合并模块44。
其中,分区模块41,用于根据用户数据的键值信息对集群***中各节点所负责的区间分别进行分区,各节点的各分区与用户数据的键值一一对应;
文件读取模块42,用于对于每一个节点,确定节点满足第一触发条件,从节点的磁盘中读取至少两个第一文件至节点对应的缓存中,各第一文件未进行过合并,各第一文件中存储有至少一个用户对应的数据,每个用户对应的数据的键值不同;
分区确定模块43,用于根据各第一文件中各用户对应的数据的键值分别确定各键值所属的目标分区;
文件合并模块44,用于根据各键值对各第一文件中具有相同键值的数据进行合并,并将合并后各键值对应的数据存储在对应的目标分区内。
本实施例中,分区模块41具体通过以下方式对集群***的各节点进行分区:如果集群***所负责的区间为(min,min+2^127],将集群***所负责的区间按照2^N进行拆分,得到分区步长S,S=2^127/2^N,其中,min表示集群***所负责的区间的最小哈希值,min+2^127表示集群***所负责的区间的最大哈希值,min的取值为大于等于0的正整数,N为分区因子,N的取值为大于等于1的正整数;对于各节点,如果节点所负责的区间为(r1,r2],则根据分区步长S对节点进行分区,得到|r1–r2|/S个区间,顺序相邻的两个区间形成一个左开右闭区间(rn,rn+1],其中,0<n<|r1–r2|/S–1,n为正整数,每个区间为节点的一个分区,r1表示节点所负责的区间的最小哈希值,r2表示节点所负责的区间的最大哈希值,r1和r2的取值都为大于等于0的正整数,且r2大于r1,|r1–r2|表示取r1和r2差值的绝对值。
文件读取模块42具体用于:判断节点上存储的第一文件的个数是否达到预设的第一文件合并个数M1,其中,M1的取值为大于等于2的正整数;若是,则确定节点满足第一触发条件,从节点的磁盘中读取至少两个第一文件至节点对应的缓存中。或者,文件读取模块42具体用于:判断节点上存储的第一文件的个数是否达到预设的第一文件合并个数M1,其中,M1的取值为大于等于2的正整数;若是,根据各第一文件的大小确定各第一文件是否满足第一合并条件;若是,则确定节点满足第一触发条件,从节点的磁盘中读取至少两个第一文件至节点对应的缓存中。
分区确定模块43具体用于:根据各用户对应的数据的键值分别计算各键值对应的哈希值;根据各键值对应的哈希值确定各键值所属的目标分区。
对于每一个节点,在通过一次合并后,将文件分布到该节点的各分区内,本实施例中,当各分布满足合并条件时,进一步对分区内的文件进行合并,使各分区内的文件高度聚合,因此,本实施例中,文件读取模块42还用于:确定目标分区满足第二触发条件,从目标分区所在的节点的磁盘中读取目标分区内的至少两个第二文件至缓存中,各第二文件中存储有至少一个用户对应的数据,每个用户对应的数据的键值不同。相应地,文件合并模块44,还用于根据各用户对应的数据的键值对各第二文件中具有相同键值的数据进行合并,并将合并后各键值的对应的数据存储在目标分区的第三文件中。
本实施例中,文件读取模块42具体通过以下两种方式确定目标分区是否满足第二触发条件:第一种,判断目标分区上存储的第二文件的个数是否达到预设的第二文件合并个数M2,其中,M2的取值为大于等于2的正整数;若是,则确定目标分区满足第二触发条件,从目标分区所在的节点的磁盘中读取目标分区内的至少两个第二文件至缓存中。第二种,判断目标分区上存储的第二文件的个数是否达到预设的第二文件合并个数M2,其中,M2的取值为大于等于2的正整数;若是,根据各第二文件的大小确定各第二文件是否满足第二合并条件;若满足,则确定目标分区满足第二触发条件,从目标分区所在的节点的磁盘中读取目标分区内的至少两个第二文件至缓存中。
进一步的,本实施例的文件合并装置还包括:接收模块45、键值获取模块46和查询模块47,接收模块45,用于接收数据查询请求;键值获取模块46,用于当接收模块接收到数据查询请求时,根据数据查询请求获取待查询数据的键值;分区确定模块43还用于:根据待查询数据的键值确定待查询数据所在的待查询分区;查询模块47,用于根据待查询数据的键值扫描待查询分区内的所有文件,获取待查询数据的键值对应的待查询数据。
本实施例中,分区确定模块43通过以下方式确定待查询数据所在的待查询分区:首先,计算待查询数据的键值对应的哈希值,然后,根据待查询数据的键值对应的哈希值确定待查询数据所在的待查询分区。
本实施例提供的文件合并装置可用于执行方法实施例二提供的技术方案,具体实现方式和技术效果类似,这里不再赘述。
图9为本发明文件合并装置实施例三的结构示意图,本实施例提供的文件合并装置500包括:处理器51、存储器52、接收器53。存储器52、接收器53通过总线和处理器51相连。其中,存储器52存储执行指令,当文件合并装置500运行时,处理器51与存储器52之间通信,处理器51执行执行指令使得文件合并装置500执行以下操作:
根据用户数据的键值信息对集群***中各节点所负责的区间分别进行分区,各节点的各分区与用户数据的键值一一对应;
对于每一个节点,确定节点满足第一触发条件,从节点的磁盘中读取至少两个第一文件至节点对应的缓存中,各第一文件未进行过合并,各第一文件中存储有至少一个用户对应的数据,每个用户对应的数据的键值不同;
根据各第一文件中各用户对应的数据的键值分别确定各键值所属的目标分区;
根据各键值对各第一文件中具有相同键值的数据进行合并,并将合并后各键值的对应的数据存储在对应的目标分区内。
根据所各第一文件中各用户对应的数据的键值分别确定各键值所属的目标分区,具体为:根据各用户对应的数据的键值分别计算各键值对应的哈希值;根据各键值对应的哈希值确定各键值所属的目标分区。
处理器51还用于:
确定目标分区满足第二触发条件,从目标分区所在的节点的磁盘中读取目标分区内的至少两个第二文件至缓存中,各第二文件中存储有至少一个用户对应的数据,每个用户对应的数据的键值不同;
根据各用户对应的数据的键值对各第二文件中具有相同键值的数据进行合并,并将合并后具有相同键值的数据存储在目标分区的第三文件中。
其中,根据待查询数据的键值确定待查询数据所在的待查询分区,包括:计算待查询数据的键值对应的哈希值;根据待查询数据的键值对应的哈希值确定待查询数据所在的待查询分区。
本实施例中,确定节点是否满足第一触发条件,包括:判断节点上存储的第一文件的个数是否达到预设的第一文件合并个数M1,其中,M1的取值为大于等于2的正整数;若是,则确定节点满足第一触发条件。
或者,判断节点上存储的第一文件的个数是否达到预设的第一文件合并个数M1,其中,M1的取值为大于等于2的正整数;若是,根据各第一文件的大小确定各第一文件是否满足第一合并条件;若是,则确定节点满足第一触发条件。
本实施例中,确定目标分区满足第二触发条件,包括:判断目标分区上存储的第二文件的个数是否达到预设的第二文件合并个数M2,其中,M2的取值为大于等于2的正整数;若是,则确定目标分区满足第二触发条件。或者,判断目标分区上存储的第二文件的个数是否达到预设的第二文件合并个数M2,其中,M2的取值为大于等于2的正整数;若是,根据各第二文件的大小确定各第二文件是否满足第二合并条件;若满足,则确定目标分区满足第二触发条件。
本实施例中,根据用户数据的键值信息对集群***中各节点所负责的区间分别进行分区,包括:
如果集群***所负责的区间为(min,min+2^127],将集群***所负责的区间按照2^N进行拆分,得到分区步长S,S=2^127/2^N,其中,min表示集群***所负责的区间的最小哈希值,min+2^127表示集群***所负责的区间的最大哈希值,min的取值为大于等于0的正整数,N为分区因子,N的取值为大于等于1的正整数;
对于各节点,如果节点所负责的区间为(r1,r2],则根据分区步长S对节点进行分区,得到|r1–r2|/S个区间,顺序相邻的两个区间形成一个左开右闭区间(rn,rn+1],其中,0<n<|r1–r2|/S–1,n为正整数,每个区间为节点的一个分区,r1表示节点所负责的区间的最小哈希值,r2表示节点所负责的区间的最大哈希值,r1和r2的取值都为大于等于0的正整数,且r2大于r1,|r1–r2|表示取r1和r2差值的绝对值。
本实施例中,接收器53用于接收数据查询请求,处理器51还用于当接收到数据查询请求时,根据数据查询请求获取待查询数据的键值;根据待查询数据的键值确定待查询数据所在的待查询分区,根据待查询数据的键值扫描待查询分区内的所有文件,获取待查询数据的键值对应的待查询数据。
本实施例提供的文件合并装置,可用于执行方法实施例一和实施例二所示的方法,具体实现方式和技术效果类似,这里不再赘述。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (20)
1.一种文件合并方法,其特征在于,包括:
根据用户数据的键值信息对集群***中各节点所负责的区间分别进行分区,所述各节点的各分区与用户数据的键值一一对应;
对于每一个节点,确定所述节点满足第一触发条件,从所述节点的磁盘中读取至少两个第一文件至所述节点对应的缓存中,所述各第一文件未进行过合并,所述各第一文件中存储有至少一个用户对应的数据,每个用户对应的数据的键值不同;
根据所述各第一文件中各用户对应的数据的键值分别确定所述各键值所属的目标分区;
根据所述各键值对所述各第一文件中具有相同键值的数据进行合并,并将合并后所述各键值对应的数据存储在对应的目标分区内。
2.根据权利要求1所述的方法,其特征在于,所述根据所述各第一文件中各用户对应的数据的键值分别确定所述各键值所属的目标分区,包括:
根据所述各用户对应的数据的键值分别计算所述各键值对应的哈希值;
根据所述各键值对应的哈希值确定所述各键值所属的目标分区。
3.根据权利要求1所述的方法,其特征在于,根据所述各键值对所述各目标文件中具有相同键值的数据进行合并,并将合并后所述各键值对应的数据存储在对应的目标分区内之后,还包括:
确定所述目标分区满足第二触发条件,从所述目标分区所在的节点的磁盘中读取所述目标分区内的至少两个第二文件至缓存中,所述各第二文件中存储有至少一个用户对应的数据,每个用户对应的数据的键值不同;
根据所述各用户对应的数据的键值对所述各第二文件中具有相同键值的数据进行合并,并将合并后所述各键值对应的数据存储在所述目标分区的第三文件中。
4.根据权利要求1-3任一项所述的方法,其特征在于,根据所述各键值对所述各目标文件中具有相同键值的数据进行合并,并将合并后各键值对应的数据存储在对应的目标分区内之后,还包括:
当接收到数据查询请求时,根据所述数据查询请求获取待查询数据的键值;
根据所述待查询数据的键值确定所述待查询数据所在的待查询分区,根据所述待查询数据的键值扫描所述待查询分区内的所有文件,获取所述待查询数据的键值对应的待查询数据。
5.根据权利要求4所述的方法,其特征在于,根据所述待查询数据的键值确定所述待查询数据所在的待查询分区,包括:
计算所述待查询数据的键值对应的哈希值;
根据所述待查询数据的键值对应的哈希值确定所述待查询数据所在的待查询分区。
6.根据权利要求1所述的方法,其特征在于,所述确定所述节点满足第一触发条件,包括:
判断所述节点上存储的第一文件的个数是否达到预设的第一文件合并个数M1,其中,M1的取值为大于等于2的正整数;
若是,则确定所述节点满足第一触发条件。
7.根据权利要求1所述的方法,其特征在于,所述确定所述节点满足第一触发条件,包括:
判断所述节点上存储的第一文件的个数是否达到预设的第一文件合并个数M1,其中,M1的取值为大于等于2的正整数;
若是,根据所述各第一文件的大小确定所述各第一文件是否满足第一合并条件;
若是,则确定所述节点满足第一触发条件。
8.根据权利要求3所述的方法,其特征在于,所述确定所述目标分区满足第二触发条件,包括:
判断所述目标分区上存储的第二文件的个数是否达到预设的第二文件合并个数M2,其中,M2的取值为大于等于2的正整数;
若是,则确定所述目标分区满足第二触发条件。
9.根据权利要求3所述的方法,其特征在于,所述确定所述目标分区满足第二触发条件,包括:
判断所述目标分区上存储的第二文件的个数是否达到预设的第二文件合并个数M2,其中,M2的取值为大于等于2的正整数;
若是,根据所述各第二文件的大小确定所述各第二文件是否满足第二合并条件;
若满足,则确定所述目标分区满足第二触发条件。
10.根据权利要求1所述的方法,其特征在于,所述根据用户数据的键值信息对集群***中各节点所负责的区间分别进行分区,包括:
如果所述集群***所负责的区间为(min,min+2^127],将所述集群***所负责的区间按照2^N进行拆分,得到分区步长S,S=2^127/2^N,其中,min表示所述集群***所负责的区间的最小哈希值,min+2^127表示所述集群***所负责的区间的最大哈希值,min的取值为大于等于0的正整数,N为分区因子,N的取值为大于等于1的正整数;
对于所述各节点,如果节点所负责的区间为(r1,r2],则根据所述分区步长S对所述节点进行分区,得到|r1–r2|/S个区间,顺序相邻的两个区间形成一个左开右闭区间(rn,rn+1],其中,0<n<|r1–r2|/S–1,n为正整数,所述每个区间为所述节点的一个分区,r1表示所述节点所负责的区间的最小哈希值,r2表示所述节点所负责的区间的最大哈希值,r1和r2的取值都为大于等于0的正整数,且r2大于r1,|r1–r2|表示取r1和r2差值的绝对值。
11.一种文件合并装置,其特征在于,包括:
分区模块,用于根据用户数据的键值信息对集群***中各节点所负责的区间分别进行分区,所述各节点的各分区与用户数据的键值一一对应;
文件读取模块,用于对于每一个节点,确定所述节点满足第一触发条件,从所述节点的磁盘中读取至少两个第一文件至所述节点对应的缓存中,所述各第一文件未进行过合并,所述各第一文件中存储有至少一个用户对应的数据,每个用户对应的数据的键值不同;
分区确定模块,用于根据所述各第一文件中各用户对应的数据的键值分别确定所述各键值所属的目标分区;
文件合并模块,用于根据所述各键值对所述各第一文件中具有相同键值的数据进行合并,并将合并后所述各键值的对应的数据存储在对应的目标分区内。
12.根据权利要求11所述的装置,其特征在于,所述分区确定模块具体用于:
根据所述各用户对应的数据的键值分别计算所述各键值对应的哈希值;
根据所述各键值对应的哈希值确定所述各键值所属的目标分区。
13.根据权利要求11所述的装置,其特征在于,所述读取模块还用于:
确定所述目标分区满足第二触发条件,从所述目标分区所在的节点的磁盘中读取所述目标分区内的至少两个第二文件至缓存中,所述各第二文件中存储有至少一个用户对应的数据,每个用户对应的数据的键值不同;
所述文件合并模块,还用于根据所述各用户对应的数据的键值对所述各第二文件中具有相同键值的数据进行合并,并将合并后所述各键值对应的数据存储在所述目标分区的第三文件中。
14.根据权利要求11-13任一项所述的装置,其特征在于,还包括:接收模块、键值获取模块和查询模块;
所述接收模块,用于接收数据查询请求;
所述键值获取模块,用于当所述接收模块接收到数据查询请求时,根据所述数据查询请求获取待查询数据的键值;
所述分区确定模块还用于:根据所述待查询数据的键值确定所述待查询数据所在的待查询分区;
所述查询模块,用于根据所述待查询数据的键值扫描所述待查询分区内的所有文件,获取所述待查询数据的键值对应的待查询数据。
15.根据权利要求14所述的装置,其特征在于,所述分区确定模块具体用于:
计算所述待查询数据的键值对应的哈希值;
根据所述待查询数据的键值对应的哈希值确定所述待查询数据所在的待查询分区。
16.根据权利要求11所述的装置,其特征在于,所述文件读取模块具体用于:
判断所述节点上存储的第一文件的个数是否达到预设的第一文件合并个数M1,其中,M1的取值为大于等于2的正整数;
若是,则确定所述节点满足第一触发条件,从所述节点的磁盘中读取至少两个第一文件至所述节点对应的缓存中。
17.根据权利要求11所述的装置,其特征在于,所述文件读取模块具体用于:
判断所述节点上存储的第一文件的个数是否达到预设的第一文件合并个数M1,其中,M1的取值为大于等于2的正整数;
若是,根据所述各第一文件的大小确定所述各第一文件是否满足第一合并条件;
若是,则确定所述节点满足第一触发条件,从所述节点的磁盘中读取至少两个第一文件至所述节点对应的缓存中。
18.根据权利要求13所述的装置,其特征在于,所述文件读取模块具体用于:
判断所述目标分区上存储的第二文件的个数是否达到预设的第二文件合并个数M2,其中,M2的取值为大于等于2的正整数;
若是,则确定所述目标分区满足第二触发条件,从所述目标分区所在的节点的磁盘中读取所述目标分区内的至少两个第二文件至缓存中。
19.根据权利要求13所述的装置,其特征在于,所述文件读取模块具体用于:
判断所述目标分区上存储的第二文件的个数是否达到预设的第二文件合并个数M2,其中,M2的取值为大于等于2的正整数;
若是,根据所述各第二文件的大小确定所述各第二文件是否满足第二合并条件;
若满足,则确定所述目标分区满足第二触发条件,从所述目标分区所在的节点的磁盘中读取所述目标分区内的至少两个第二文件至缓存中。
20.根据权利要求11所述的装置,其特征在于,所述分区模块具体用于:
如果所述集群***所负责的区间为(min,min+2^127],将所述集群***所负责的区间按照2^N进行拆分,得到分区步长S,S=2^127/2^N,其中,min表示所述集群***所负责的区间的最小哈希值,min+2^127表示所述集群***所负责的区间的最大哈希值,min的取值为大于等于0的正整数,N为分区因子,N的取值为大于等于1的正整数;
对于所述各节点,如果节点所负责的区间为(r1,r2],则根据所述分区步长S对所述节点进行分区,得到|r1–r2|/S个区间,顺序相邻的两个区间形成一个左开右闭区间(rn,rn+1],其中,0<n<|r1–r2|/S–1,n为正整数,所述每个区间为所述节点的一个分区,r1表示所述节点所负责的区间的最小哈希值,r2表示所述节点所负责的区间的最大哈希值,r1和r2的取值都为大于等于0的正整数,且r2大于r1,|r1–r2|表示取r1和r2差值的绝对值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310561317.8A CN103593436B (zh) | 2013-11-12 | 2013-11-12 | 文件合并方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310561317.8A CN103593436B (zh) | 2013-11-12 | 2013-11-12 | 文件合并方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103593436A true CN103593436A (zh) | 2014-02-19 |
CN103593436B CN103593436B (zh) | 2017-02-08 |
Family
ID=50083577
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310561317.8A Active CN103593436B (zh) | 2013-11-12 | 2013-11-12 | 文件合并方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103593436B (zh) |
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104360824A (zh) * | 2014-11-10 | 2015-02-18 | 北京奇虎科技有限公司 | 一种数据合并的方法和装置 |
CN105159915A (zh) * | 2015-07-16 | 2015-12-16 | 中国科学院计算技术研究所 | 可动态适应的lsm树合并方法及*** |
WO2017005094A1 (zh) * | 2015-07-03 | 2017-01-12 | 阿里巴巴集团控股有限公司 | 一种数据查询方法和装置 |
CN106446039A (zh) * | 2016-08-30 | 2017-02-22 | 北京航空航天大学 | 聚合式大数据查询方法及装置 |
CN106599247A (zh) * | 2016-12-19 | 2017-04-26 | 北京奇虎科技有限公司 | LSM‑tree结构中数据文件的合并方法及装置 |
CN106708968A (zh) * | 2016-12-01 | 2017-05-24 | 成都华为技术有限公司 | 分布式数据库***和分布式数据库***中的数据处理方法 |
CN106776811A (zh) * | 2016-11-23 | 2017-05-31 | 李天� | 数据索引方法及装置 |
CN106777230A (zh) * | 2016-12-26 | 2017-05-31 | 东软集团股份有限公司 | 一种分区***、分区方法及装置 |
CN107357921A (zh) * | 2017-07-21 | 2017-11-17 | 北京奇艺世纪科技有限公司 | 一种小文件存储定位方法及*** |
CN107391541A (zh) * | 2017-05-16 | 2017-11-24 | 阿里巴巴集团控股有限公司 | 一种实时数据合并方法和装置 |
CN107861959A (zh) * | 2016-09-22 | 2018-03-30 | 阿里巴巴集团控股有限公司 | 数据处理方法、装置及*** |
WO2018077092A1 (zh) * | 2016-10-31 | 2018-05-03 | 中兴通讯股份有限公司 | 应用于分布式文件***的存盘方法、装置及分布式文件*** |
CN108628542A (zh) * | 2017-03-22 | 2018-10-09 | 华为技术有限公司 | 一种文件合并方法及控制器 |
CN110019092A (zh) * | 2017-12-27 | 2019-07-16 | 杭州华为数字技术有限公司 | 数据存储的方法、控制器和*** |
WO2019179449A1 (zh) * | 2018-03-22 | 2019-09-26 | ***股份有限公司 | 一种HBase表的Region合并方法、装置及计算机设备 |
CN110321349A (zh) * | 2019-06-13 | 2019-10-11 | 暨南大学 | 一种面向数据起源***的自适应数据合并存储方法 |
CN110399545A (zh) * | 2018-04-20 | 2019-11-01 | 伊姆西Ip控股有限责任公司 | 管理文档索引的方法和设备 |
WO2020034818A1 (zh) * | 2018-08-14 | 2020-02-20 | 华为技术有限公司 | 分区合并方法和数据库服务器 |
CN110825794A (zh) * | 2018-08-14 | 2020-02-21 | 华为技术有限公司 | 分区合并方法和数据库服务器 |
CN110888837A (zh) * | 2019-11-15 | 2020-03-17 | 星辰天合(北京)数据科技有限公司 | 对象存储小文件归并方法及装置 |
CN113297141A (zh) * | 2021-05-06 | 2021-08-24 | 维沃移动通信有限公司 | 文件合并方法、装置、电子设备和存储介质 |
CN113342813A (zh) * | 2021-06-09 | 2021-09-03 | 南京冰鉴信息科技有限公司 | 键值数据处理方法、装置、计算机设备及可读存储介质 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110046638B (zh) * | 2018-12-29 | 2023-06-23 | 创新先进技术有限公司 | 多平台间数据的融合方法、装置及设备 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101605028A (zh) * | 2009-02-17 | 2009-12-16 | 北京安天电子设备有限公司 | 一种日志记录合并方法和*** |
CN102905311B (zh) * | 2012-09-29 | 2015-07-15 | 北京傲天动联技术股份有限公司 | 数据报文聚合装置和数据报文聚合方法 |
CN102968503B (zh) * | 2012-12-10 | 2015-10-07 | 曙光信息产业(北京)有限公司 | 数据库***的数据处理方法以及数据库*** |
-
2013
- 2013-11-12 CN CN201310561317.8A patent/CN103593436B/zh active Active
Cited By (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104360824A (zh) * | 2014-11-10 | 2015-02-18 | 北京奇虎科技有限公司 | 一种数据合并的方法和装置 |
CN104360824B (zh) * | 2014-11-10 | 2017-12-12 | 北京奇虎科技有限公司 | 一种数据合并的方法和装置 |
WO2017005094A1 (zh) * | 2015-07-03 | 2017-01-12 | 阿里巴巴集团控股有限公司 | 一种数据查询方法和装置 |
CN105159915A (zh) * | 2015-07-16 | 2015-12-16 | 中国科学院计算技术研究所 | 可动态适应的lsm树合并方法及*** |
CN106446039B (zh) * | 2016-08-30 | 2020-07-21 | 北京航空航天大学 | 聚合式大数据查询方法及装置 |
CN106446039A (zh) * | 2016-08-30 | 2017-02-22 | 北京航空航天大学 | 聚合式大数据查询方法及装置 |
CN107861959A (zh) * | 2016-09-22 | 2018-03-30 | 阿里巴巴集团控股有限公司 | 数据处理方法、装置及*** |
WO2018077092A1 (zh) * | 2016-10-31 | 2018-05-03 | 中兴通讯股份有限公司 | 应用于分布式文件***的存盘方法、装置及分布式文件*** |
CN106776811A (zh) * | 2016-11-23 | 2017-05-31 | 李天� | 数据索引方法及装置 |
CN106708968A (zh) * | 2016-12-01 | 2017-05-24 | 成都华为技术有限公司 | 分布式数据库***和分布式数据库***中的数据处理方法 |
CN106708968B (zh) * | 2016-12-01 | 2019-11-26 | 成都华为技术有限公司 | 分布式数据库***和分布式数据库***中的数据处理方法 |
CN106599247A (zh) * | 2016-12-19 | 2017-04-26 | 北京奇虎科技有限公司 | LSM‑tree结构中数据文件的合并方法及装置 |
CN106599247B (zh) * | 2016-12-19 | 2020-04-17 | 北京奇虎科技有限公司 | LSM-tree结构中数据文件的合并方法及装置 |
CN106777230A (zh) * | 2016-12-26 | 2017-05-31 | 东软集团股份有限公司 | 一种分区***、分区方法及装置 |
CN106777230B (zh) * | 2016-12-26 | 2020-01-07 | 东软集团股份有限公司 | 一种分区***、分区方法及装置 |
CN108628542B (zh) * | 2017-03-22 | 2021-08-03 | 华为技术有限公司 | 一种文件合并方法及控制器 |
CN108628542A (zh) * | 2017-03-22 | 2018-10-09 | 华为技术有限公司 | 一种文件合并方法及控制器 |
US11403021B2 (en) | 2017-03-22 | 2022-08-02 | Huawei Technologies Co., Ltd. | File merging method and controller |
CN107391541B (zh) * | 2017-05-16 | 2020-10-20 | 创新先进技术有限公司 | 一种实时数据合并方法和装置 |
CN107391541A (zh) * | 2017-05-16 | 2017-11-24 | 阿里巴巴集团控股有限公司 | 一种实时数据合并方法和装置 |
CN107357921A (zh) * | 2017-07-21 | 2017-11-17 | 北京奇艺世纪科技有限公司 | 一种小文件存储定位方法及*** |
CN110019092A (zh) * | 2017-12-27 | 2019-07-16 | 杭州华为数字技术有限公司 | 数据存储的方法、控制器和*** |
CN110019092B (zh) * | 2017-12-27 | 2021-07-09 | 华为技术有限公司 | 数据存储的方法、控制器和*** |
US11372822B2 (en) | 2018-03-22 | 2022-06-28 | China Unionpay Co., Ltd. | Method, device, and computer apparatus for merging regions of HBase table |
WO2019179449A1 (zh) * | 2018-03-22 | 2019-09-26 | ***股份有限公司 | 一种HBase表的Region合并方法、装置及计算机设备 |
CN110399545A (zh) * | 2018-04-20 | 2019-11-01 | 伊姆西Ip控股有限责任公司 | 管理文档索引的方法和设备 |
CN110399545B (zh) * | 2018-04-20 | 2023-06-02 | 伊姆西Ip控股有限责任公司 | 管理文档索引的方法和设备 |
CN110825794A (zh) * | 2018-08-14 | 2020-02-21 | 华为技术有限公司 | 分区合并方法和数据库服务器 |
WO2020034818A1 (zh) * | 2018-08-14 | 2020-02-20 | 华为技术有限公司 | 分区合并方法和数据库服务器 |
CN110825794B (zh) * | 2018-08-14 | 2022-03-29 | 华为云计算技术有限公司 | 分区合并方法和数据库服务器 |
US11762881B2 (en) | 2018-08-14 | 2023-09-19 | Huawei Cloud Computing Technologies Co., Ltd. | Partition merging method and database server |
CN110321349A (zh) * | 2019-06-13 | 2019-10-11 | 暨南大学 | 一种面向数据起源***的自适应数据合并存储方法 |
CN110888837A (zh) * | 2019-11-15 | 2020-03-17 | 星辰天合(北京)数据科技有限公司 | 对象存储小文件归并方法及装置 |
CN113297141A (zh) * | 2021-05-06 | 2021-08-24 | 维沃移动通信有限公司 | 文件合并方法、装置、电子设备和存储介质 |
CN113342813A (zh) * | 2021-06-09 | 2021-09-03 | 南京冰鉴信息科技有限公司 | 键值数据处理方法、装置、计算机设备及可读存储介质 |
CN113342813B (zh) * | 2021-06-09 | 2024-01-26 | 南京冰鉴信息科技有限公司 | 键值数据处理方法、装置、计算机设备及可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103593436B (zh) | 2017-02-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103593436A (zh) | 文件合并方法和装置 | |
CN109196459B (zh) | 一种去中心化的分布式异构存储***数据分布方法 | |
CN102332029B (zh) | 一种基于Hadoop 的海量可归类小文件关联存储方法 | |
CN101944124B (zh) | 分布式文件***管理方法、装置以及对应的文件*** | |
CN104115133B (zh) | 用于复合非易失性存储设备的数据迁移的方法、***和设备 | |
CN104899297B (zh) | 创建具有存储感知的混合索引的方法 | |
CN109522428B (zh) | 一种基于索引定位的图计算***的外存访问方法 | |
CN106599091B (zh) | 基于键值存储的rdf图结构存储和索引方法 | |
CN103064639A (zh) | 数据存储方法及装置 | |
CN109240607B (zh) | 一种文件读取方法和装置 | |
CN104834477B (zh) | 基于闪存的数据写入方法和装置 | |
CN104462389A (zh) | 基于分级存储的分布式文件***实现方法 | |
CN103500089A (zh) | 一种适应于Mapreduce计算模型的小文件存储*** | |
CN103473314A (zh) | 一种基于共享内存的键值对存储方法及装置 | |
CN104123237A (zh) | 海量小文件分级存储方法及*** | |
CN104199899A (zh) | 一种基于Hbase的海量图片存储方法及装置 | |
CN103942301A (zh) | 一种面向多数据类型访问应用的分布式文件*** | |
CN110297810B (zh) | 一种流数据处理方法、装置及电子设备 | |
CN102970349B (zh) | 一种dht网络的存储负载均衡方法 | |
US11250001B2 (en) | Accurate partition sizing for memory efficient reduction operations | |
CN105279166B (zh) | 文件管理方法和*** | |
CN109388615A (zh) | 基于Spark的任务处理方法及*** | |
CN111752941B (zh) | 一种数据存储、访问方法、装置、服务器及存储介质 | |
CN109669621A (zh) | 一种文件管理方法、文件管理***、电子设备及存储介质 | |
CN104391735A (zh) | 虚拟化一体机集群中虚拟机调度方法及*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |