本发明创造涉及基因数据存储,特别是涉及一种面向动态k-mer数据集的近似成员查询方法及系统。
背景技术:
1、基因组研究中的数据集会因新序列发布、新实验数据生成及现有数据修订而频繁变化,这类频繁变化的数据集被称为动态数据集。面对日益庞大的数据集合规模,将数据集存储和索引为k长度的基因序列子串(k-mer)数据集的范式日益突出。
2、这类k-mer数据搜索问题可以抽象为多集合多成员查询问题:将存储各种dna序列的数据库抽象为多个数据集,对于一个感兴趣的dna序列,目标是检测出该序列存在于哪些集合中。
3、尽管相关技术中已经有一些办法在处理大规模基因组数据的序列搜索问题方面取得了显著进展。例如,为每个数据集单独设立布隆过滤器,组成布隆过滤器矩阵,但是这种方式空间浪费严重。其他的方式在处理动态数据集的时候存在局限,无法兼顾空间效率和查询速度,或者不支持增量更新和删除,导致难以满足动态存储的基因序列的使用需求。
4、针对相关技术中的基因序列的存储架构和查询方式,在的动态存储数据集的情况下,无法兼顾空间效率和查询速度,或者不支持增量更新和删除,导致难以满足动态存储的基因序列的使用需求的问题,目前尚未提出有效的解决方案。
技术实现思路
1、本发明创造实施例提供的一种面向动态k-mer数据集的近似成员查询方法及系统,至少解决相关技术中的基因序列的存储架构和查询方式,在的动态存储数据集的情况下,无法兼顾空间效率和查询速度,或者不支持增量更新和删除,导致难以满足动态存储的基因序列的使用需求的问题。
2、根据本发明创造的一方面提供了一种面向动态k-mer数据集的近似成员查询索引生成方法,包括:根据基数估计算法对需要存储的目标数据集的元素基数进行确定;根据所述元素基数选择需要存储的第一层级的目标第一单元,其中,所述第一层级的多个第一单元的布隆过滤器数量不同,第一单元的布隆过滤器的容量均相同,所述布隆过滤器用于存储所述目标数据集中对应的元素,所述第一单元可存储的元素基数不小于对应的数据集的元素基数;通过所述目标第一单元的分组函数,根据所述目标数据集的目标元素,生成所述目标元素的第二层级的第二单元索引,将所述目标元素划分到所述第二单元索引对应的目标第二单元中,其中,所述第一单元包括多个第二单元,第一单元中存储的每个数据集的所述第二单元的数量,与对应的数据集需要的布隆过滤器数量相同;将所述目标元素存储到所述目标第二单元中的第三层级的目标第三单元中,并分配给所述目标数据集的布隆过滤器,其中,所述第二单元包括多个大小固定的第三单元,所述第三单元的组织形式为交错布隆过滤器,所述第三单元在查询元素时根据交错布隆过滤器一次性读取不同布隆过滤器的同一位。
3、作为一种可选的实施例,根据所述基数选择需要存储的第一层级的目标第一单元,包括:目标数据集的元素基数,与第一单元可存储的元素基数进行比较;在所述目标数据集的元素基数,小于或等于比较第一单元可存储的元素基数,且大于上一第一单元可存储的元素基数的情况下,将所述比较第一单元作为所述目标第一单元;其中,所述比较第一单元为多个第一单元之一,所述上一第一单元为比所述比较第一单元的布隆过滤器数量少预设差值的第一单元。
4、作为一种可选的实施例,将所述目标元素存储到所述目标第二单元中的第三层级的目标第三单元中,并分配给所述目标数据集的布隆过滤器,包括:将所述目标元素存储到所述目标第二单元中的第三层级的目标第三单元中;使用所述目标第三单元的多个独立的哈希函数,对所述目标元素进行哈希处理,并映射到对应的布隆过滤器中对应位置,将所述对应位置设置为1。
5、作为一种可选的实施例,所述方法还包括:接收需要插入的第一数据集;根据所述第一数据集的元素基数,确定对应的插入第一单元;将所述插入第一单元的第三单元的组织形式从交错布隆过滤器,转换为布隆过滤器矩阵;在所述插入第一单元中查找对应的插入位置,其中,所述插入位置是通过布隆过滤器查找到的;将所述第一数据集插入到所述插入位置,并为所述第一数据集分配对应的布隆过滤器;将所述插入第一单元的第三单元的组织形式从布隆过滤器矩阵转换为交错布隆过滤器。
6、作为一种可选的实施例,所述方法还包括:接收需要删除的第二数据集;查询所述第二数据集对应的所属第一单元;将所述所属第一单元的第三单元的组织形式从交错布隆过滤器,转换为布隆过滤器矩阵;在所述第二数据集的元素集合为第三单元的部分元素集合的情况下,将所述第二数据集对应的布隆过滤器删除,保留空位;在所述第二数据集的元素集合为第三单元的全部元素集合的情况下,将所述第二数据集对应的布隆过滤器删除,并释放所述第三单元的空间资源;将所述所属第一单元的第三单元的组织形式从布隆过滤器矩阵转换为交错布隆过滤器。
7、根据本发明创造的另一方面提供了一种面向动态k-mer数据集的近似成员查询方法,其特征在于,包括:通过第一层级的第一单元的分组函数,以及需要查询的目标元素,生成所述目标元素在所述第一单元中第二层级的第二单元索引,以标识所述目标元素所在的目标第二单元,其中,所述目标元素以多个层级的方式逐级索引,在存储进第二层级时,利用所属的第一单元的所述分组函数生成对应的第二单元索引,并存储到所述第二单元索引对应的目标第二单元中;在所述第一单元存在所述目标第二单元的情况下,确定所述目标元素存储在所述第一单元的所述目标第二单元中;获取所述目标第二单元中第三层级的第三单元的交错布隆过滤器,根据所述交错布隆过滤器,获取多个哈希索引,其中,所述第三单元为所属的第二单元的组成部分,所述目标元素在存储进第三单元时,会分配给所属的目标数据集的布隆过滤器,所述第三单元的组织形式为交错布隆过滤器,所述哈希索引的位数与所述目标第二单元的布隆过滤器的数量相同,所述布隆过滤器与不同的数据集相对应;根据所述哈希索引查询所述目标元素所属的目标数据集。
8、作为一种可选的实施例,根据所述哈希索引查询所述目标元素所属的目标数据集,包括:对多个所述哈希索引进行按位与操作,得到目标索引,其中,所述哈希索引为不同布隆过滤器的同一位的数据,哈希索引为同一哈希函数对不同数据集的元素的映射,所述哈希索引的不同位表示不同布隆过滤器的数值,所述数值表征所述布隆过滤器是否存在所述目标元素;根据所述目标索引确定所述目标元素所属的目标数据集。
9、作为一种可选的实施例,在根据所述哈希索引查询所述目标元素所属的目标数据集之后,所述方法还包括:将所述目标数据集存储在输出列表中;继续查询其他的第一单元中是否存在所述目标元素的索引;在第一单元存在所述目标元素的索引的情况下,获取所属的目标数据集,并存储在输出列表中;在所有的第一单元完成遍历的情况下,将所述输出列表输出。
10、作为一种可选的实施例,所述第一层级的第一单元为段单元,所述段单元包括多个布隆过滤器,每个所述段单元的布隆过滤器的容量均相同,一个布隆过滤器对应记录一个数据集中对应的元素,所述段单元可存储的数据集的元素基数大于等于需要存储的数据集的元素基数;所述第二层级的第二单元为组单元,所述段单元中存储的每个数据集的所述组单元的数量,与对应的数据集需要的布隆过滤器数量相同;所述第三层级的第三单元为块单元,所述块单元为数据大小固定的数据块,为所述组单元的组成单元,以交错布隆过滤器的组织形式存储不同元素的,所述块单元在查询元素时,根据交错布隆过滤器一次性读取不同布隆过滤器中与所述查询元素对应的位置的所有数据。
11、根据本发明创造的另一方面提供了一种面向动态k-mer数据集的近似成员查询系统,包括:处理器,以及存储程序的存储器,其特征在于,所述程序包括指令,所述指令在由所述处理器执行时使所述处理器执行上述的方法。
12、本发明创造实施例提供的索引生成方法,根据元素基数选择需要存储的第一层级的目标第一单元,利用包含固定数量的布隆过滤器的第一单元,来存储与固定数量对应元素基数的数据集,这样可以为每个数据集分配足够且尽量小的空间,避免空间浪费。
13、通过目标第一单元的分组函数,根据目标数据集的目标元素,生成目标元素的第二层级的第二单元索引,将目标元素划分到第二单元索引对应的目标第二单元中,存储的每个数据集的第二单元的数量,与对应的数据集需要的布隆过滤器数量相同,各个第二单元分别存储数据集的不同元素集合,这样在查询时,针对一个元素只需要查询一个布隆过滤器,就可以确定该元素是否处于该第二单元以及所属的第一单元。
14、将目标元素存储到目标第二单元中的第三层级的目标第三单元中,并分配给目标数据集的布隆过滤器,利用第三单元的交错布隆过滤器,可以在第三单元在查询元素时根据交错布隆过滤器一次性读取不同布隆过滤器的同一位,从而一次性确定出查询元素所在的目标数聚集,避免采用布隆过滤器矩阵一次只能读取一个布隆过滤器的数据,需要遍历布隆过滤器才能确定出查询元素所属的数据集。
15、进而解决了相关技术中的基因序列的存储架构和查询方式,在的动态存储数据集的情况下,无法兼顾空间效率和查询速度,或者不支持增量更新和删除,导致难以满足动态存储的基因序列的使用需求的问题,达到了在保证占用空间尽量小,查询次数尽量少的基础上,支持增量更新和删除,以满足数据的使用需求的技术效果。