CN105447035A - 数据扫描方法及装置 - Google Patents
数据扫描方法及装置 Download PDFInfo
- Publication number
- CN105447035A CN105447035A CN201410436604.0A CN201410436604A CN105447035A CN 105447035 A CN105447035 A CN 105447035A CN 201410436604 A CN201410436604 A CN 201410436604A CN 105447035 A CN105447035 A CN 105447035A
- Authority
- CN
- China
- Prior art keywords
- key
- storage block
- value data
- accuracy
- scanning
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供了一种数据扫描方法及装置,所述方法包括:扫描在LSM树第一级存储的Key-Value数据;针对不包括所述第一级的每一级中的每一个存储块执行:获取Key集合,所述Key集合包含已扫描全部Key;获得所述存储块的Key取值范围;获取由所述Key集合以及所述Key取值范围得到的Key交集;根据为存储块建立的Bloom?Filter中存储的所述Key交集中的Key的数量,获得所述存储块的扫描精确度;在所述存储块的扫描精确度小于预设的扫描精确度时,扫描所述存储块存储的Key-Value数据;否则不扫描所述存储块存储的Key-Value数据,本申请实施例节省了I/O资源,提高了扫描性能。
Description
技术领域
本申请涉及数据处理技术领域,更具体的说是涉及一种数据扫描方法及装置。
背景技术
在Key-Value(键-键值)分布式存储系统中,一种常用的数据存储结构为LSM(Log-StructuredMergeTree,日志结构合并)树。
LSM树通常由多级结构组成,每一对Key-Value数据首先存储在LSM树的第一级,在数据存储过程,若任一级的数据大小超出预设阈值时,即将该任一级中的数据写入下一级中,并与下一级中相同Key范围的键值进行合并(compact)。
由上述描述可知,Key-Value数据是按照合并的方式逐级存储,因此将存在大量的Key-Value数据具有两个或更多版本。
在进行数据读取操作时,特别是读取某一参数范围的数据扫描(SCAN)操作,为了获得最新版本的数据,现有技术中通常是需要将所有版本的Key-Value数据依次全部读出,以最终得到每个Key-Value数据的最新版本。而由于多个版本的存在,将会读取大量旧版本的数据,从而造成I/O资源的浪费。
发明内容
有鉴于此,本申请提供了一种数据获取方法、布隆过滤器生成方法及装置,实现了数据获取时节省I/O资源的发明目的。
为实现上述目的,本申请提供如下技术方案:
本申请的第一方面,提供了一种数据扫描方法,用于读取键-值Key-Value分布式存储系统中的数据,所述Key-Value分布式存储系统采用日志结构合并LSM树的数据结构存储数据,所述方法包括:
扫描在所述LSM树第一级存储的Key-Value数据;
依次针对不包括所述第一级的每一级中的每一个存储块,执行如下操作:
获取Key集合,所述Key集合包含有已扫描的Key-Value数据中的全部Key;
根据所述存储块存储的起始Key-Value数据中的Key以及结束Key-Value数据中的Key,获得所述存储块的Key取值范围;
获取由所述Key集合以及所述Key取值范围得到的Key交集;
根据为所述存储块建立的BloomFilter中存储的所述Key交集中的Key的数量,获得所述存储块的扫描精确度,其中,所述BloomFilter用于存储所述存储块中的key;
在所述存储块的扫描精确度小于预设的扫描精确度时,扫描所述存储块存储的Key-Value数据;
在所述存储块的扫描精确度不小于预设的扫描精确度时,不扫描所述存储块存储的Key-Value数据。
在所述第一方面的第一种可能实现方式中,还包括:
在所述Key交集为空集或者所述Key的数量为0时,扫描所述存储块存储的Key-Value数据。
结合所述第一方面或所述第一方面的第一种可能实现方式,在所述第一方面的第二种可能实现方式中,所述根据为所述存储块建立的BloomFilter中存储的所述Key交集中的Key的数量,获得所述存储块的扫描精确度包括:
在所述Key交集不为空集时,获得所述BloomFilter中存储的所述Key交集中的Key的数量;
在所述Key的数量不为0时,根据所述Key的数量,获得所述存储块的扫描精确度。
结合所述第一方面或所述第一方面的第一种可能实现方式,在所述第一方面的第三种可能实现方式中,所述根据为所述存储块建立的BloomFilter中存储的所述Key交集中的Key的数量,获得所述存储块的扫描精确度包括:
获得为所述存储块建立的BloomFilter中存储的所述Key交集中的Key的数量;
根据所述Key的数量,按照下述公式计算所述存储块的扫描精确度:
其中,P表示扫描精确度,|Vc|表示所述交集中的Key数量,|STij|表示第i级第j个存储块中的Key数量,|Vs|表示在所述BloomFilter中存储的所述交集中的Key数量,所述F表示所述BloomFilter的误判率;其中,i为大于1的整数,j为大于0的整数。
结合所述第一方面的上述任一种可能实现方式,在所述第一方面的第四种可能实现方式中,所述根据所述存储块存储的起始Key-Value数据中的Key以及结束Key-Value数据中的Key,获得所述存储块的Key取值范围包括:
获取内存中已保存的所述存储块存储的起始Key-Value数据以及结束Key-Value数据;
根据所述起始Key-Value数据中的Key以及所述结束Key-Value数据中的Key,获得所述存储块的Key取值范围。
第二方面,提供了一种数据扫描装置,用于读取键-值Key-Value分布式存储系统中的数据,所述Key-Value分布式存储系统采用日志结构合并LSM树的数据结构存储数据,所述装置包括:
第一扫描模块,用于扫描在所述LSM树第一级存储的Key-Value数据;
第一获取模块,用于依次针对不包括所述第一级的每一级中的每一个存储块,获取Key集合,所述Key集合包含有已扫描的Key-Value数据中的全部Key;
Key范围获取模块,用于根据所述存储块存储的起始Key-Value数据中的Key以及结束Key-Value数据中的Key,获得所述存储块的Key取值范围;
Key交集获取模块,用于获取由所述Key集合以及所所述Key取值范围得到的Key交集;
扫描精确度获取模块,用于根据为所述存储块建立的BloomFilter中存储的所述Key交集中的Key的数量,获得所述存储块的扫描精确度,其中,所述BloomFilter用于存储所述存储块中的key;
第二扫描模块,用于在所述存储块的扫描精确度小于预设的扫描精确度时,扫描所述存储块存储的Key-Value数据;在所述存储块的扫描精确度不小于预设的扫描精确度时,不扫描所述存储块存储的Key-Value数据。
在所述第二方面的第一种可能实现方式中,所述第二扫描模块,还用于在在所述Key交集为空集或者所述Key的数量为0时,扫描所述存储块存储的Key-Value数据。
结合所述第二方面或所述第二方面的第一种可能实现方式,在所述第二方面的第三种可能实现方式中,所述扫描精确度获取模块具体用于:
在所述Key交集不为空集时,获得为所述存储块建立的BloomFilter中存储的所述Key交集中的Key的数量;
在所述Key的数量不为0时,根据所述Key的数量,计算所述存储块的扫描精确度。
结合所述第二方面或所述第二方面的第一种可能实现方式,在所述第二方面的第三种可能实现方式中,所述扫描精确度获取模块具体用于:
获得为所述存储块建立的BloomFilter中存储的所述Key交集中的Key的数量;
根据所述Key的数量,按照下述公式计算所述存储块的扫描精确度:
其中,P表示扫描精确度,|Vc|表示所述交集中的Key数量,|STij|表示第i级第j个存储块中的Key数量,|Vs|表示在所述BloomFilter中存储的所述交集中的Key数量,所述F表示所述BloomFilter的误判率;其中,i为大于1的整数,j为大于0的整数。
结合所述第二方面的上述任一种可能实现方式,在所述第二方面的第四种可能实现方式中,所述Key范围获取模块具体用于:
获取内存中已保存的所述存储块存储的起始Key-Value数据以及结束Key-Value数据;
根据所述起始Key-Value数据中的Key以及所述结束Key-Value数据中的Key,获得所述存储块的Key取值范围。
经由上述的技术方案可知,与现有技术相比,本申请提供了一种数据扫描及装置,在扫描数据时,首先扫描LSM树第一级存储的Key-Value数据,之后,针对不包括所述第一级的每一级中的每一个存储,获得由已扫描Key-Value数据中的全部Key得到的Key集合,以及根据所述存储块存储的起始Key-Value数据中的Key以及结束Key-Value数据中的Key,获得所述存储块的Key取值范围,并由所述Key集合以及所述Key取值范围得到Key交集;查询为存储块建立的BloomFilter,以获得BloomFilter中存储的所述Key交集中的Key的数量,并根据所述Key数量获得所述存储块的扫描精确度。在所述存储块的扫描精确度小于预设的扫描精确度时,扫描所述存储块存储的Key-Value数据;在所述存储块的扫描精确度不小于预设的扫描精确度时,不扫描所述存储块存储的Key-Value数据。Key的数量表明了当前存储块中与已扫描的Key-Value数据中相同Key的数量,因此对于每一级的存储块,首先根据Key的数量确定其是否需要扫描,从而在保证读取的Key-Value数据为最新版本的前提下,减少了I/O访问次数,节省了I/O资源,提高了扫描性能。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1为本申请实施例提供的一种数据扫描方法一个实施例的流程图;
图2为本申请实施例提供的数据扫描方法在实际应用中的一种流程图;
图3为本申请实施例提供的一种数据扫描装置一个实施例的结构示意图;
图4为本申请实施例提供的一种数据扫描设备一个实施例的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。
本申请的技术方案主要应用于基于LSM(Log-StructuredMergeTree,日志结构合并)树的Key-Value(键-值)分布式存储系统中。LSM是一种有序非本地更新的数据结构,在基于LSM树的Key-Value分布式存储系统中,Key-Value数据分级存储。
LSM包括多级(level),现有技术中,当某级的数据大小超过预设阈值时,将该级中的某个键范围(KeyRange)内的数据与下一级中的相同的键范围内的数据进行合并(compact)操作。因此,先写入LSM的数据经过多次合并排序之后,一般被置于相对较大的层级,而后写入LSM的数据则被置于相对较小的层级。因此,数据频繁更新意味着存储设备中有大量Key-Value数据将存在两个或更多版本。
由于在大数据应用场景中,并不需100%的精确扫描,可以允许一定的误差。本申请的技术方案在实际应用中,可以应用于大数据应用场景中。例如,扫描搜索引擎的结果,或者,互联网公司每个月月底统计使用某项服务的注册用户数量等。实际应用中,采用本申请技术方案能够在保证获取的Key-Value数据为最新版本的前提下,减少了I/O访问次数,节省了I/O资源,提高了扫描性能。
下面结合附图对本申请技术方案进行详细描述。
图1为本申请实施例提供的一种数据扫描方法一个实施例的流程图,该方法可以包括以下几个步骤:
101:扫描在所述LSM树第一级存储的Key-Value数据。
依次针对不包括所述第一级的每一级中的每一个存储块,执行如下操作:
102:获取Key集合,所述Key包含有已扫描的Key-Value数据中的全部Key。
LSM树的第一级位于内存中,在数据存储过程中,数据首先写入内存中,具体的是写入LSM树第一级对应的内存中的排序字符串表(Memtable),当写入的数据超出Memtable的存储阈值时,即生成内存中不可更改的排序字符串表(immutableMemtable),再将该immutableMemtable中的数据写入到磁盘中。
数据写入操作包括合并(compact)操作,即将写入某一级的数据与该级存储的相同键范围的数据进行合并。
数据在磁盘中的每一级存储在每一级对应的排序字符串表(SSTable,SortedStringTable)中,排序字符串表可以包括多个,每一排序字符串表又可以划分为多个存储块(block),数据依序存储在存储块中,在每一个存储块存储的数据超出其存储阈值时,则将数据存入下一个存储块中,而当每一个排序字符串表中的存储的数据超出其存储阈值时,即将数据写入下一级的存储块中。因此第一级对应存储的数据为最新写入的数据。
本申请实施例中,在读取数据时,首先扫描在LSM树第一级对应存储的Key-Value数据,主要包括Memtable、immutableMemtable等中存储的数据。扫描获得的第一级对应存储的Key-Value数据即构成了所述Key集合的初始值。在后续依次针对除第一级之外的每一级中每一个存储块执行的操作中,可以根据获得Key集合执行相应的操作。
103:根据所述存储块存储的起始Key-Value数据中的Key以及结束Key-Value数据中的Key,获得所述存储块的Key取值范围。
在扫描第一级对应存储的Key-Value数据之后,对于磁盘中的不包括第一级的每一级中的每一个存储块是否需要扫描,需要先进行判断。
本申请实施例中以存储块为单位进行判断,当然每一个SSTable可以只划分一个存储块,此时也即是以SSTable为单位进行判断。其中存储块划分的数量越多,扫描精确度越高。
由于针对每一级中每一存储块的操作均相同,因此本申请实施例中,以第i级第j个存储块为例进行介绍,其中i=2、3…M,j=1、2…N。M为LSM树的级数,为大于1的整数,N每一级划分的存储块数量,为大于0的整数。
首先根据第i级第j个存储块存储的Key-Value数据,获取该第i级第j个存储块存储的Key的取值范围。该取值范围可以由该第i级第j个存储块存储的起始Key-Value数据中的Key(startKey)以及结束Key-Value数据中的Key(endKey)得到,该Key取值范围可以标记为[startKey,endKey]。
该起始Key-Value数据和结束Key-Value数据可以在当前判断过程中,从该存储块存储的Key-Value数据中读取的。
当然,也可以是在数据写入时,将每一级中每一个存储块的起始Key-Value数据和结束Key-Value数据另外单独进行存储,例如,存储在内存中或固态盘中,因此可以从内存中或固体盘中获取该存储块的起始Key-Value数据和结束Key-Value数据,无需读取该存储块,以提升扫描性能。
因此,作为一种可能的实现方式,该步骤103可以包括:
读取所述存储块的起始Key-Value数据和结束Key-Value数据;
根据所述起始Key-Value数据中的Key以及所述结束Key-Value数据中的Key,获得所述存储块的Key取值范围。
作为另一种可能的实现方式,该步骤103可以包括:
获取内存中已保存的所述存储块的起始Key-Value数据和结束Key-Value数据;
根据所述起始Key-Value数据中的Key以及所述结束Key-Value数据中的Key,获得所述存储块的Key取值范围。
104:获取由所述Key集合以及所述Key取值范围得到的Key交集。
105:根据为所述存储块建立的BloomFilter中存储的所述Key交集中的Key的数量,获得所述存储块的扫描精确度。
其中,所述BloomFilter用于存储所述存储块中的Key。其具体是数据写入操作时,进行数据合并时建立的。将存储块中的全部Key存储在BloomFilter,通过BloomFilter可以方便Key的查询。
BloomFilter是一种空间效率很高的随机数据结构,它利用位数组表示一个集合,当一个元素加入该集合时,通过K个哈希函数将该元素映射到位数组的K个位置处,该K个位置对应的位值置为1。
对于所述Key集合与所述Key取值范围的交集中的Key,查询该BloomFilter,是否在BloomFilter中存储所述交集中的Key。
根据BloomFilter中存储的所述交集中的Key数量,可以获得所述存储块的扫描精确度。
由于在大数据应用场景中,扫描精确度不要求100%,允许存在一定的误差。也就是说,对于每一个存储块,其存储的Key-Value数据并一定要全部读取。而Key的数量表明了已扫描的Key-Value数据与当前存储块相同的Key的数量。也即当前存储块中已被扫描的Key的数量,Key的数量越大,表明当前存储块中已被扫描的Key-Value数据越多,计算得到的扫描精确度即越大,Key的数量越小,表明当前存储块中已有一小部分的Key-Value数据已扫描,计算得到的扫描精确越小。
因此,根据扫描精确度,可以执行如下操作:
106:在所述存储块的扫描精确度小于预设的扫描精确度时,扫描所述存储块存储的Key-Value数据。
107:在所述存储块的扫描精确度不小于预设的扫描精确度时,不扫描所述存储块存储的Key-Value数据。
预设的扫描精确度是根据实际应用情况确定的,其可以为100%,或者根据实际需求,小于100%。
对于每一个存储块扫描完成之后,可以将该存储块中的Key-Value数据中的全部Key加入Key集合(即执行步骤102),以对Key集合进行更新。更新后的Key集合可以作为扫描下一个存储块的执行依据,以确定是否需要对下一个存储块执行扫描操作。
可以理解的是,本发明实施例中,在依次对除第一级之外的其他级的存储块进行扫描时,步骤102至步骤107是循环执行的。根据这种方式,当确定是否需要扫描一个数据块时,需要执行步骤102至步骤107的操作,直到扫描完所有的存储块为止。
本实施例中,根据当前存储块与已扫描的全部Key-Value数据中相同Key的数量,可以确定出当前存储块是否需要进行扫描,从而对于每一级中每一个存储块,可以根据Key的数量扫描或者不扫描该存储块存储的Key-Value数据,从而可以减少扫描Key-Value数据旧版本的次数,节省了I/O资源,提高扫描性能。
本申请技术方案在实际应用中,特别适用于非精确性的数据扫描应用中,在某些大数据应用场景中,不需要100%精确地扫描出所有的Key-Value数据,允许一定范围的误差。比如,搜索引擎的结果,用户一般只关心前几页的结果。这表明用户并不需要100%精确的搜索结果。用户只是为了得到问题的答案,而并非为了去查看所有的扫描得到的Key-Value数据的结果。又如,互联网公司每个月月底统计使用某项服务的注册用户数量,可能只需要得到大致的结果数据,而不是100%准确的结果。因此采用本申请技术方案,相较于现有技术中将所有版本的Key-Value数据依次全部读出的方案,可以在保证一定扫描精确度的前提下,减少扫描次数,节省I/O资源。
其中,作为另一个实施例,在获得的Key交集为空集时或者所述Key的数量为0时,还可以直接扫描所述存储块存储的Key-Value数据。
Key交集为空集或者Key的数量为0,表明当前存储块不存在与已扫描的Key-Value数据相同的Key,也即当前存储块存储的Key-Value数据全部为最新版本的,因此可以直接扫描该存储块存储的Key-Value数据。
因此在Key交集为空集时或者所述Key的数量为0,可以直接扫描该存储块存储的Key-Value数据,或者可以计算扫描精确度,由扫描精确度进行判断。
当然,计算扫描精确度可以仅在Key的数量为0时,再计算存储块的扫描精确度,否则可以直接扫描该存储块的Key-Value数据。
因此,作为又一个实施例,步骤105可以包括:
在所述Key交集不为空集时,获得所述BloomFilter中存储的所述Key交集中的Key的数量;
根据所述Key的数量,获得所述存储块的扫描精确度。
其中,可以是在所述Key的数量为0时,根据所述Key的数量,获得所述存储块的扫描精确度,否则,即扫描该存储块存储的Key-Value数据。
作为又一个实施例,步骤105可以包括:
获得为所述存储块建立的BloomFilter中存储的所述Key交集中的Key的数量;
在所述Key的数量不为0时,计算所述存储块的扫描精确度。
其中,可以是在所述Key交集为空集时,获得为所述存储块建立的BloomFilter中存储的所述Key交集中的Key的数量,否则,即扫描该存储块存储的Key-Value数据。
其中,在上述描述中,根据所述Key的数量,扫描精确度可以按照下式计算得到:
P表示扫描精确度,|Vc|表示所述交集中的Key数量,|STij|表示第i级第j个存储块中的Key数量,|Vs|表示在所述BloomFilter中存储的所述交集中的Key数量,所述F表示所述BloomFilter的误判率;其中,i为大于1的整数,j为大于0的整数。
|Vs|数量越大,表明第i级第j个存储块与交集Vc中相同Key的个数越多,计算扫描精确度就越大,因此扫描精确度大于预设的扫描精确度时,表明对第一级对应的存储数据的扫描已经满足扫描要求,因此无需对第i级第j个存储块进行扫描。
下面结合一个具体例子对本申请技术方案进行详细描述。
在下述描述中,V1表示已扫描的Key-Value数据中的全部Key集合,包括memtable,immutable中的全部Key的集合;
STij表示第i级第j个存储块;STKeyij表示第i级第j个存储块的全部Key集合;|STij|表示第i级第j个存储块包括的Key的数量;[startKey,endKey]表示STij的Key取值范围,也即键范围(Keyrange);
BF表示存储STij中Key的BloomFilter;F表示BloomFilter的误判率;
Vc表示V1中包含的属于[startKey,endKey]的全部Key集合;|Vc|表示Vc集合中的Key数量;Vs表示STij和Vc的交集,|Vs|表示Vs集合中的Key数量;P表示扫描精确度,T表示用户定义的预设的扫描精确度。
下面以第2级第1个存储块ST21为例进行介绍,如图2所示,该方法可以包括:
201:扫描LSM树第一级对应存储的Key-Value数据。
202:获取V1。
其中,该V1即包含所述已扫描的所述LSM树第一级对应存储的Key-Value数据中的全部Key。
当然,若在扫描其它存储块时,V1即包括已扫描的全部Key。例如扫描ST22,如果按照本申请技术方案确定ST21需要扫描时,则V1中即包括LSM树第一级对应存储Key-Value数据的全部Key以及所述ST21中的全部Key。
203:获取ST21中存储的Key-Value数据的Key取值范围[startKey,endKey]。
204:比较所述[startKey,endKey]以及V0,获得交集Vc。
205:判断交集Vc是否为空集,如果是执行步骤209,如果否执行步骤206。
交集Vc为空集,表明第一级没有与[startKey,endKey]存在相同的Key,也即ST21中存储的Key-Value数据均为最新版本的。
交集Vc不为空集,表明第一级可能与ST21存在不同版本的相同Key的数据,若直接对ST21扫描,增加了访问量,会导致I/0资源浪费。
206:利用ST21对应的BF,查询Vc中的Key是否存在于BF中,如果否,执行步骤209,如果是,执行步骤207。
由于BF是将Key经过哈希运算之后存储的,因此再查询时,根据Vc中任一个Key,计算其哈希值,在与BF进行比较,以确定BF是否存在该任一个Key。
若BF中不存在Vc中的Key,则表明ST21不存在Vc中的Key,其全部为最新版本的Key。
若BF中存在Vc中的Key,由于BF误判率的存在,则表明ST11可能存在Vc中的Key。
207:利用BF中存储的Vc中的Key的数量|Vs|,确定扫描精确度。
由于BF误判率的存在,ST21与Vc中相同Key的个数为:|Vs|-|Vs|*F。
因此,扫描精确度为:
|ST11|-|Vs|*(1-F)表示ST11中最新版本的Key的数量。
208:扫描精确度小于预设的扫描精确度时,执行步骤209,扫描精确度大于预设的扫描精确度时,执行步骤210。
209:扫描ST21,并更新V0,将ST11中的Key合并到V0中。
210:不扫描ST21。
|Vs|数量越大,表明ST21与Vc中相同Key的个数越多,计算扫描精确度就越大,因此扫描精确度大于预设的扫描精确度时,表明对第一级对应的存储数据的扫描已经满足扫描精确要求,因此无需对ST11进行扫描。
扫描完成ST21之后,即可判断下一个存储块ST22。对ST22的判断过程与对ST21的过程相同,只是V1已更新,包括ST21扫描得到的全部Key。
通过本申请实施例的技术方案,可以减少扫描Key-Value数据旧版本的次数,节省了I/O资源。
本申请实施例中,在进行数据合并时,可以为不包括第一级的每一级的每一个存储块建立BloomFilter,将合并得到的所述存储块的全部Key映射到BloomFilter,从而在数据获取时,无需扫描获取该存储块,利用BloomFilter,即可以查询任一个Key是否存在与该存储块中,从而在通过BloomFilter,判断存储块存储的Key取值范围与Key集合的交集中的Key是否存在与所述BloomFilter,根据所述BloomFilter中存储的所述交集中的Key数量可以计算得到扫描精确度,在扫描精确度小于预设的扫描精确度时,扫描该存储块,否则不扫描该存储块。
对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
图3为本申请实施例提供的一种数据扫描装置一个实施例的结构示意图,本申请实施例技术方案具体应用于基于LSM树的Key-Value分布式存储系统中,该装置可以包括:
第一扫描模块301,用于扫描在所述LSM树第一级存储的Key-Value数据。
本申请实施例中,在获取数据时,首先扫描在LSM树第一级对应存储的Key-Value数据,主要包括Memtable、immutableMemtable等中存储的数据,并得到由第一级对应存储的Key-Value数据中的全部Key,组成的Key集合。
第一获取模块302,用于依次针对不包括所述第一级的每一级中的每一个存储块,获取Key集合,所述Key集合由已扫描的全部Key得到。
本申请实施例中,在获取数据时,首先扫描在LSM树第一级对应存储的Key-Value数据,主要包括Memtable、immutableMemtable等中存储的数据.
该Key集合的初始值即是由第一级对应存储的Key-Value数据中的全部Key组成。
Key范围获取模块303,用于根据所述存储块存储的起始Key-Value数据中的Key以及结束Key-Value数据中的Key,获得所述存储块的Key取值范围。
Key交集获取模块304,用于获取由所述Key集合以及所所述Key取值范围得到的Key交集。
扫描精确度获取模块305,用于根据为所述存储块建立的BloomFilter中存储的所述Key交集中的Key的数量,获得所述存储块的扫描精确度,其中,所述BloomFilter用于存储所述存储块中的key。
第二扫描模块306,用于在所述存储块的扫描精确度小于预设的扫描精确度时,扫描所述存储块存储的Key-Value数据;在所述存储块的扫描精确度不小于预设的扫描精确度时,不扫描所述存储块存储的Key-Value数据。
对于每一个存储块扫描完成之后,即可以将该存储块中的Key-Value数据中的全部Key加入Key集合。
本实施例中,根据当前存储块与已扫描的全部Key-Value数据中相同Key的数量,可以确定出当前存储块是否需要进行扫描,从而对于每一级中每一个存储块,可以根据Key的数量扫描或者不扫描该存储,从而可以减少扫描Key-Value数据旧版本的次数,节省了I/O资源,提高扫描性能。
其中,作为另一个实施例,所述第二扫描模块,还用于在在所述Key交集为空集或者所述Key的数量为0时,扫描所述存储块存储的Key-Value数据。
Key交集为空集或者Key的数量为0,表明当前存储块不存在与已扫描的Key-Value数据相同的Key,也即当前存储块存储的Key-Value数据全部为最新版本的,因此可以直接扫描该存储块存储的Key-Value数据。
因此在Key交集为空集时或者所述Key的数量为0,可以直接扫描该存储块存储的Key-Value数据,或者可以计算扫描精确度,由扫描精确度进行判断。
当然,计算扫描精确度可以仅在Key的数量为0时,再计算存储块的扫描精确度,否则可以直接扫描该存储块的Key-Value数据。
因此,作为又一个实施例,所述扫描精确度获取模块可以具体用于:
在所述Key交集不为空集时,获得为所述存储块建立的BloomFilter中存储的所述Key交集中的Key的数量;
在所述Key的数量不为0时,根据所述Key的数量,计算所述存储块的扫描精确度。
其中,在上述描述中,根据所述Key的数量,扫描精确度可以按照下式计算得到:
P表示扫描精确度,|Vc|表示所述交集中的Key数量,|STij|表示第i级第j个存储块中的Key数量,|Vs|表示在所述BloomFilter中存储的所述交集中的Key数量,所述F表示所述BloomFilter的误判率;其中,i为大于1的整数,j为大于0的整数。
因此,作为又一个实施例,所述扫描精确度获取模块可以具体用于:
获得为所述存储块建立的BloomFilter中存储的所述Key交集中的Key的数量;
根据所述Key的数量,按照下述公式计算所述存储块的扫描精确度:
其中,Key范围获取模块获取的起始Key-Value数据和结束Key-Value数据可以在当前判断过程中,从该存储块存储的Key-Value数据中读取的。
当然,也可以是在数据写入时,将每一级中每一个存储块的起始Key-Value数据和结束Key-Value数据另外单独进行存储,例如,存储在内存中或固态盘中,因此可以从内存中或固体盘中获取该存储块的起始Key-Value数据和结束Key-Value数据,无需读取该存储块,以提升扫描性能。
因此,作为一种可能的实现方式,该Key范围获取模块可以具体用于:
读取所述存储块的起始Key-Value数据和结束Key-Value数据;
根据所述起始Key-Value数据中的Key以及所述结束Key-Value数据中的Key,获得所述存储块的Key取值范围。
作为另一种可能的实现方式,该Key范围获取模块可以具体用于:
获取内存中已保存的所述存储块存储的起始Key-Value数据以及结束Key-Value数据;
根据所述起始Key-Value数据中的Key以及所述结束Key-Value数据中的Key,获得所述存储块的Key取值范围。
通过以上对数据获取装置的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。因此,参见图4,本申请实施例还提供了一种数据扫描设备,该数据扫描设备至少包括存储器401和处理器402,存储器和处理器通过总线连接。
该存储器401存储一组程序指令,该存储器可以是是高速RAM存储器,也可能是非易失性存储器(non-volatilememory),例如至少一个磁盘存储器等。
该处理器402,用于调用该存储器402存储的程序指令,执行如下操作:
扫描在所述LSM树第一级存储的Key-Value数据;
依次针对不包括所述第一级的每一级中的每一个存储块,执行如下操作:
获取Key集合,所述Key集合包含有已扫描的Key-Value数据中的全部Key;
根据所述存储块存储的起始Key-Value数据中的Key以及结束Key-Value数据中的Key,获得所述存储块的Key取值范围;
获取由所述Key集合以及所述Key取值范围得到的Key交集;
根据为所述存储块建立的BloomFilter中存储的所述Key交集中的Key的数量,获得所述存储块的扫描精确度,其中,所述BloomFilter用于存储所述存储块中的key;
在所述存储块的扫描精确度小于预设的扫描精确度时,扫描所述存储块存储的Key-Value数据;
在所述存储块的扫描精确度不小于预设的扫描精确度时,不扫描所述存储块存储的Key-Value数据。
可选地,该数据扫描设备可以用于执行本申请实施例提供的图1-图2所示的数据获取方法。
在实际应用中该数据扫描设备可以具体为一计算机。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本申请时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
Claims (10)
1.一种数据扫描方法,用于读取键-值Key-Value分布式存储系统中的数据,所述Key-Value分布式存储系统采用日志结构合并LSM树的数据结构存储数据,其特征在于,所述方法包括:
扫描在所述LSM树第一级存储的Key-Value数据;
依次针对不包括所述第一级的每一级中的每一个存储块,执行如下操作:
获取Key集合,所述Key集合包含有已扫描的Key-Value数据中的全部Key;
根据所述存储块存储的起始Key-Value数据中的Key以及结束Key-Value数据中的Key,获得所述存储块的Key取值范围;
获取由所述Key集合以及所述Key取值范围得到的Key交集;
根据为所述存储块建立的BloomFilter中存储的所述Key交集中的Key的数量,获得所述存储块的扫描精确度,其中,所述BloomFilter用于存储所述存储块中的key;
在所述存储块的扫描精确度小于预设的扫描精确度时,扫描所述存储块存储的Key-Value数据;
在所述存储块的扫描精确度不小于预设的扫描精确度时,不扫描所述存储块存储的Key-Value数据。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述Key交集为空集或者所述Key的数量为0时,扫描所述存储块存储的Key-Value数据。
3.根据权利要求1或2所述的方法,其特征在于,所述根据为所述存储块建立的BloomFilter中存储的所述Key交集中的Key的数量,获得所述存储块的扫描精确度包括:
在所述Key交集不为空集时,获得所述BloomFilter中存储的所述Key交集中的Key的数量;
在所述Key的数量不为0时,根据所述Key的数量,获得所述存储块的扫描精确度。
4.根据权利要求1或2所述的方法,其特征在于,所述根据为所述存储块建立的BloomFilter中存储的所述Key交集中的Key的数量,获得所述存储块的扫描精确度包括:
获得为所述存储块建立的BloomFilter中存储的所述Key交集中的Key的数量;
根据所述Key的数量,按照下述公式计算所述存储块的扫描精确度:
其中,P表示扫描精确度,|Vc|表示所述交集中的Key数量,|STij|表示第i级第j个存储块中的Key数量,|Vs|表示在所述BloomFilter中存储的所述交集中的Key数量,所述F表示所述BloomFilter的误判率;其中,i为大于1的整数,j为大于0的整数。
5.根据权利要求1~4任一项所述的方法,其特征在于,所述根据所述存储块存储的起始Key-Value数据中的Key以及结束Key-Value数据中的Key,获得所述存储块的Key取值范围包括:
获取内存中已保存的所述存储块存储的起始Key-Value数据以及结束Key-Value数据;
根据所述起始Key-Value数据中的Key以及所述结束Key-Value数据中的Key,获得所述存储块的Key取值范围。
6.一种数据扫描装置,用于读取键-值Key-Value分布式存储系统中的数据,所述Key-Value分布式存储系统采用日志结构合并LSM树的数据结构存储数据,其特征在于,所述装置包括:
第一扫描模块,用于扫描在所述LSM树第一级存储的Key-Value数据;
第一获取模块,用于依次针对不包括所述第一级的每一级中的每一个存储块,获取Key集合,所述Key集合包含有已扫描的Key-Value数据中的全部Key;
Key范围获取模块,用于根据所述存储块存储的起始Key-Value数据中的Key以及结束Key-Value数据中的Key,获得所述存储块的Key取值范围;
Key交集获取模块,用于获取由所述Key集合以及所所述Key取值范围得到的Key交集;
扫描精确度获取模块,用于根据为所述存储块建立的BloomFilter中存储的所述Key交集中的Key的数量,获得所述存储块的扫描精确度,其中,所述BloomFilter用于存储所述存储块中的key;
第二扫描模块,用于在所述存储块的扫描精确度小于预设的扫描精确度时,扫描所述存储块存储的Key-Value数据;在所述存储块的扫描精确度不小于预设的扫描精确度时,不扫描所述存储块存储的Key-Value数据。
7.根据权利要求6所述的装置,其特征在于所述第二扫描模块,还用于在所述Key交集为空集或者所述Key的数量为0时,扫描所述存储块存储的Key-Value数据。
8.根据权利要求6或7所述的装置,其特征在于,所述扫描精确度获取模块具体用于:
在所述Key交集不为空集时,获得为所述存储块建立的BloomFilter中存储的所述Key交集中的Key的数量;
在所述Key的数量不为0时,根据所述Key的数量,计算所述存储块的扫描精确度。
9.根据权利要求6或7所述的装置,其特征在于,所述扫描精确度获取模块具体用于:
获得为所述存储块建立的BloomFilter中存储的所述Key交集中的Key的数量;
根据所述Key的数量,按照下述公式计算所述存储块的扫描精确度:
其中,P表示扫描精确度,|Vc|表示所述交集中的Key数量,|STij|表示第i级第j个存储块中的Key数量,|Vs|表示在所述BloomFilter中存储的所述交集中的Key数量,所述F表示所述BloomFilter的误判率;其中,i为大于1的整数,j为大于0的整数。
10.根据权利要求6~9任一项所述的装置,其特征在于,所述Key范围获取模块具体用于:
获取内存中已保存的所述存储块存储的起始Key-Value数据以及结束Key-Value数据;
根据所述起始Key-Value数据中的Key以及所述结束Key-Value数据中的Key,获得所述存储块的Key取值范围。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410436604.0A CN105447035B (zh) | 2014-08-29 | 2014-08-29 | 数据扫描方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410436604.0A CN105447035B (zh) | 2014-08-29 | 2014-08-29 | 数据扫描方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105447035A true CN105447035A (zh) | 2016-03-30 |
CN105447035B CN105447035B (zh) | 2018-12-25 |
Family
ID=55557223
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410436604.0A Active CN105447035B (zh) | 2014-08-29 | 2014-08-29 | 数据扫描方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105447035B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108052643A (zh) * | 2017-12-22 | 2018-05-18 | 北京奇虎科技有限公司 | 基于LSM Tree结构的数据存储方法、装置及存储引擎 |
CN109213124A (zh) * | 2018-08-29 | 2019-01-15 | 深圳市元征科技股份有限公司 | 一种数据扫描方法、数据扫描装置及车辆诊断设备 |
CN109213432A (zh) * | 2017-07-04 | 2019-01-15 | 华为技术有限公司 | 利用日志结构合并树将数据写入的存储设备及其方法 |
CN110377227A (zh) * | 2019-06-13 | 2019-10-25 | 阿里巴巴集团控股有限公司 | 一种数据分块存储方法、装置及电子设备 |
CN110895545A (zh) * | 2018-08-22 | 2020-03-20 | 阿里巴巴集团控股有限公司 | 共享数据同步方法及装置 |
US10983975B2 (en) | 2019-06-13 | 2021-04-20 | Ant Financial (Hang Zhou) Network Technology Co., Ltd. | Data block storage method and apparatus, and electronic device |
CN112817530A (zh) * | 2021-01-22 | 2021-05-18 | 万得信息技术股份有限公司 | 一种多线程安全高效读写有序数据的方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080209281A1 (en) * | 2007-02-28 | 2008-08-28 | Fujitsu Limited | Storage device and control device |
CN102982121A (zh) * | 2012-11-12 | 2013-03-20 | 北京奇虎科技有限公司 | 一种文件扫描方法、文件扫描装置及文件检测系统 |
-
2014
- 2014-08-29 CN CN201410436604.0A patent/CN105447035B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080209281A1 (en) * | 2007-02-28 | 2008-08-28 | Fujitsu Limited | Storage device and control device |
CN101256818A (zh) * | 2007-02-28 | 2008-09-03 | 富士通株式会社 | 存储装置和控制装置 |
CN102982121A (zh) * | 2012-11-12 | 2013-03-20 | 北京奇虎科技有限公司 | 一种文件扫描方法、文件扫描装置及文件检测系统 |
Non-Patent Citations (1)
Title |
---|
陈席林: "分布式持久化缓存系统的研究与实现", 《中国优秀硕士学位论文全文数据库信息科技辑》 * |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109213432A (zh) * | 2017-07-04 | 2019-01-15 | 华为技术有限公司 | 利用日志结构合并树将数据写入的存储设备及其方法 |
CN109213432B (zh) * | 2017-07-04 | 2021-10-26 | 华为技术有限公司 | 利用日志结构合并树将数据写入的存储设备及其方法 |
CN108052643A (zh) * | 2017-12-22 | 2018-05-18 | 北京奇虎科技有限公司 | 基于LSM Tree结构的数据存储方法、装置及存储引擎 |
CN108052643B (zh) * | 2017-12-22 | 2021-02-23 | 北京奇虎科技有限公司 | 基于LSM Tree结构的数据存储方法、装置及存储引擎 |
CN110895545A (zh) * | 2018-08-22 | 2020-03-20 | 阿里巴巴集团控股有限公司 | 共享数据同步方法及装置 |
CN110895545B (zh) * | 2018-08-22 | 2023-08-15 | 阿里云计算有限公司 | 共享数据同步方法及装置 |
CN109213124A (zh) * | 2018-08-29 | 2019-01-15 | 深圳市元征科技股份有限公司 | 一种数据扫描方法、数据扫描装置及车辆诊断设备 |
CN109213124B (zh) * | 2018-08-29 | 2020-03-31 | 深圳市元征科技股份有限公司 | 一种数据扫描方法、数据扫描装置及车辆诊断设备 |
CN110377227A (zh) * | 2019-06-13 | 2019-10-25 | 阿里巴巴集团控股有限公司 | 一种数据分块存储方法、装置及电子设备 |
US10983975B2 (en) | 2019-06-13 | 2021-04-20 | Ant Financial (Hang Zhou) Network Technology Co., Ltd. | Data block storage method and apparatus, and electronic device |
CN112817530A (zh) * | 2021-01-22 | 2021-05-18 | 万得信息技术股份有限公司 | 一种多线程安全高效读写有序数据的方法 |
CN112817530B (zh) * | 2021-01-22 | 2024-06-07 | 万得信息技术股份有限公司 | 一种多线程安全高效读写有序数据的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105447035B (zh) | 2018-12-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105447035A (zh) | 数据扫描方法及装置 | |
US10281284B2 (en) | Hybrid road network and grid based spatial-temporal indexing under missing road links | |
CN107239392B (zh) | 一种测试方法、装置、终端及存储介质 | |
US10915533B2 (en) | Extreme value computation | |
CN103902702A (zh) | 一种数据存储系统和存储方法 | |
CN106326475A (zh) | 一种高效的静态哈希表实现方法及系统 | |
CN103678519A (zh) | 一种支持Hive DML增强的混合存储系统及其方法 | |
CN102591855A (zh) | 一种数据标识方法及系统 | |
CN104424256A (zh) | 布隆过滤器生成方法和装置 | |
CN110222046B (zh) | 列表数据的处理方法、装置、服务器和存储介质 | |
CN104881475A (zh) | 一种用于大数据随机抽样的方法和系统 | |
CN104765792A (zh) | 一种维度数据存储的方法、装置及系统 | |
CN104750743A (zh) | 一种交易文件勾对系统和方法 | |
CN109697234B (zh) | 实体的多属性信息查询方法、装置、服务器和介质 | |
US10884704B2 (en) | Sorting a table in analytical databases | |
CN104361090B (zh) | 数据查询方法及装置 | |
US8290930B2 (en) | Query result generation based on query category and data source category | |
CN103809915A (zh) | 一种磁盘文件的读写方法和装置 | |
CN111125090A (zh) | 数据存取方法及装置 | |
CN114356912A (zh) | 一种向数据库写入数据的方法及计算机设备 | |
KR20210100347A (ko) | 가시화 플랫폼에서 사전 샘플을 생성하는 방법 | |
Arge et al. | An optimal and practical cache-oblivious algorithm for computing multiresolution rasters | |
CN104809175A (zh) | 特征库的生成方法和装置 | |
CN115544096B (zh) | 数据查询方法、装置、计算机设备及存储介质 | |
CN112328629B (zh) | 实体对象处理方法、装置和电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |