CN118034612B - 一种数据处理方法、装置和存储介质 - Google Patents
一种数据处理方法、装置和存储介质 Download PDFInfo
- Publication number
- CN118034612B CN118034612B CN202410417889.7A CN202410417889A CN118034612B CN 118034612 B CN118034612 B CN 118034612B CN 202410417889 A CN202410417889 A CN 202410417889A CN 118034612 B CN118034612 B CN 118034612B
- Authority
- CN
- China
- Prior art keywords
- data
- metadata
- fingerprint
- filter
- data processing
- 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.)
- Active
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 53
- 238000001914 filtration Methods 0.000 claims abstract description 85
- 238000012545 processing Methods 0.000 claims abstract description 71
- 230000006870 function Effects 0.000 claims description 50
- 238000010586 diagram Methods 0.000 claims description 24
- 238000004590 computer program Methods 0.000 claims description 12
- 230000000875 corresponding effect Effects 0.000 description 117
- 238000000034 method Methods 0.000 description 18
- 238000013461 design Methods 0.000 description 12
- 238000012217 deletion Methods 0.000 description 7
- 230000037430 deletion Effects 0.000 description 7
- 238000004422 calculation algorithm Methods 0.000 description 5
- 230000008569 process Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000001680 brushing effect Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 239000000470 constituent Substances 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000013499 data model Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 239000002184 metal Substances 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种数据处理方法、装置和存储介质。该数据处理方法包括:确定***的输入数据的数据指纹、***的多个元数据桶以及数据指纹对应的多个目标元数据桶,多个元数据桶被分为N组,N组元数据桶分别对应N个过滤器;确定第n个目标元数据桶对应的过滤器,并基于数据指纹获取第n个目标元数据桶对应的第一过滤数据;基于第一过滤数据获取第n个目标元数据桶对应的过滤器中的第二过滤数据;根据第二过滤数据判断所述数据指纹是否存在,并基于判断结果进行相应的数据处理操作;其中,N为大于0的整数,n为大于0且小于等于目标元数据桶的个数的整数。该数据处理方法可以大幅度地降低该架构的分布式存储***对内存的需求量。
Description
技术领域
本公开的实施例涉及数据处理技术领域,具体地,涉及一种数据处理方法、数据处理装置和存储介质。
背景技术
分布式存储是一种存储数据的技术,可以将数据分散存储在多个物理位置或服务器上,以提高数据的可用性、可扩展性和容错性。这种技术已经在云计算、大数据分析、内容分发网络(CDN)和分布式应用程序等领域得到广泛应用。为了实现高性能、高可用性和高可扩展性,分布式存储技术一直在不断地演化。
发明内容
本公开至少一个实施例提供一种数据处理方法,包括:确定***的输入数据的数据指纹、所述***的多个元数据桶以及所述数据指纹对应的多个目标元数据桶,其中,所述多个元数据桶被分为N组,所述N组元数据桶分别对应N个过滤器;确定第n个目标元数据桶对应的过滤器,并基于所述数据指纹获取所述第n个目标元数据桶对应的第一过滤数据;基于所述第一过滤数据获取所述第n个目标元数据桶对应的过滤器中的第二过滤数据;根据所述第二过滤数据判断所述数据指纹是否存在,并基于判断结果进行相应的数据处理操作;其中,N为大于0的整数,n为大于0且小于等于所述目标元数据桶的个数的整数。
例如,在本公开至少一实施例提供的数据处理方法中,确定***的输入数据的数据指纹、所述***的多个元数据桶以及所述数据指纹对应的多个目标元数据桶,包括:对所述***的所述输入数据进行定长或不定长切片,并对所述切片进行哈希运算以得到所述输入数据的数据指纹;根据所述***的存储单元的容量确定所述多个元数据桶的个数,并基于所述数据指纹和所述多个元数据桶的个数得到所述数据指纹对应的多个目标元数据桶。
例如,在本公开至少一实施例提供的数据处理方法中,确定第n个元数据桶对应的过滤器,包括:根据所述第n个目标元数据桶的序号和所述每组元数据桶包含的个数确定所述第n个目标元数据桶对应的过滤器。
例如,在本公开至少一实施例提供的数据处理方法中,所述每组元数据桶存储的元数据包括数据记录,所述第二过滤数据包括根据每组元数据桶中的数据记录生成的与所述第一过滤数据对应的过滤器数据。
例如,在本公开至少一实施例提供的数据处理方法中,基于所述数据指纹获取所述第n个目标元数据桶对应的第一过滤数据,包括:确定所述过滤器采用的哈希函数的个数和所述哈希函数的定义;根据所述哈希函数的定义确定所述过滤器的结果维度;根据所述数据指纹和所述哈希函数的定义确定所述第一过滤数据。
例如,在本公开至少一实施例提供的数据处理方法中,当所述数据处理操作为读操作时,根据所述第二过滤数据判断所述数据指纹是否存在,并基于判断结果进行相应的数据处理操作,包括:以所述第一过滤数据为索引确定对应的所述第二过滤数据,基于所述第二过滤数据的值判断所述数据指纹是否已存在,当所述数据指纹存在时,从所述***的存储单元读取所述数据指纹对应的数据记录;基于读取的所述数据记录读取原始数据。
例如,在本公开至少一实施例提供的数据处理方法中,根据所述第二过滤数据判断所述数据指纹是否存在,并基于判断结果进行相应的数据处理操作,还包括:当所述数据指纹不存在时,返回读取失败。
例如,在本公开至少一实施例提供的数据处理方法中,当所述数据处理操作为写操作时,根据所述第二过滤数据判断所述数据指纹是否存在,并基于判断结果进行相应的数据处理操作,包括:以所述第一过滤数据为索引确定对应的所述第二过滤数据,并基于所述第二过滤数据的值判断所述数据指纹是否已存在;当所述数据指纹存在时,更新所述第二过滤数据中的标志位。
例如,在本公开至少一实施例提供的数据处理方法中,根据所述第二过滤数据判断所述数据指纹是否存在,并基于判断结果进行相应的数据处理操作,还包括:当所述数据指纹不存在时,根据所述第n个目标元数据桶的序号和所述每组目标元数据桶包含的个数确定其对应的过滤器;根据所述第n个目标元数据桶对应的过滤器中的分配图,判断***是否有空间存放所述数据指纹对应的数据记录;当在所述***的存储单元写入所述数据指纹对应的数据记录后,更新所述过滤器的第二过滤数据。
例如,在本公开至少一实施例提供的数据处理方法中,当所述数据处理操作为删除操作时,根据所述第二过滤数据判断所述数据指纹是否存在,并基于判断结果进行相应的数据处理操作,包括:以所述第一过滤数据为索引确定对应的所述第二过滤数据,基于所述第二过滤数据的值判断所述数据指纹是否已存在,当所述数据指纹存在时,从所述***的存储单元读取所述数据指纹对应的元数据桶;基于读取的所述元数据桶删除所述数据指纹对应的数据记录和原始数据。
例如,在本公开至少一实施例提供的数据处理方法中,根据所述第二过滤数据判断所述数据指纹是否存在,并基于判断结果进行相应的数据处理操作,还包括:当在所述***的存储单元删除所述数据指纹对应的数据记录和原始数据后,更新所述过滤器的第二过滤数据。
例如,在本公开至少一实施例提供的数据处理方法中,根据所述第二过滤数据判断所述数据指纹是否存在,并基于判断结果进行相应的数据处理操作,包括:当根据第q个目标元数据桶对应的过滤器的第二过滤数据判断所述数据指纹不存在时,继续对第q+1个目标元数据桶对应的过滤器的第二过滤数据进行判断,其中,q为大于0的整数。
本公开至少一实施例还提供一种数据处理装置,包括:确定单元,配置为确定***的输入数据的数据指纹、所述***的多个元数据桶以及所述数据指纹对应的多个目标元数据桶,其中,所述多个元数据桶被分为N组,所述N组元数据桶分别对应N个过滤器;第一过滤数据获取单元,配置为确定第n个目标元数据桶对应的过滤器,并基于所述数据指纹获取所述第n个目标元数据桶对应的第一过滤数据;第二过滤数据获取单元,配置为基于所述第一过滤数据获取所述第n个目标元数据桶对应的过滤器中的第二过滤数据;操作单元,配置为根据所述第二过滤数据判断所述数据指纹是否存在,并基于判断结果进行相应的数据处理操作; N为大于0的整数,n为大于0且小于等于所述目标元数据桶的个数的整数。
本公开至少一实施例还提供一种数据处理装置,包括:处理器;存储器;一个或多个计算机程序模块,其中,所述一个或多个计算机程序模块被存储在所述存储器中并被配置为由所述处理器执行,所述一个或多个计算机程序模块包括用于执行实现本公开任一实施例提供的数据处理方法的指令。
本公开至少一实施例还提供一种存储介质,非暂时性地存储计算机可读指令,当所述计算机可读指令由计算机执行时执行本公开任一实施例提供的数据处理方法。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1示出了本公开至少一实施例提供的一种元数据桶的示意图。
图2示出了本公开至少一实施例提供的一种数据处理方法的示意图。
图3示出了图2所示的步骤S110的一个示例的示意图。
图4示出了图2所示的步骤S120的一个示例的示意图。
图5A示出了图2所示的步骤S140的一个示例的示意图。
图5B示出了图2所示的步骤S140的另一个示例的示意图。
图5C示出了图2所示的步骤S140的再一个示例的示意图。
图6为本公开至少一实施例提供的一种数据处理装置的示意框图。
图7为本公开至少一实施例提供的另一种数据处理装置的示意框图。
图8为本公开至少一实施例提供的一种电子设备的示意框图。
图9为本公开至少一实施例提供的一种存储介质的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
元数据(Metadata),又称中介数据、中继数据,为描述数据的数据,主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。
分布式存储元数据在***中的布局是分布式存储的重要部分,***通过元数据索引到磁盘中实际存储的地址来进行读写等操作,存储元数据相当于门牌号,是获取实际数据内容的重要信息,其布局设计影响整个存储***的性能和可靠性。
通常为了提升存储***的读写性能,***会把全部或者部分元数据放在内存中,元数据的容量和存储***容量呈线性关系,越大的存储***,元数据占用空间越大,从而导致过大的元数据如果全部放在内存里,内存可能无法容纳。为了解决这个问题,在分布式存储***中,通常只放一部分元数据到内存里,使用时候再从磁盘导入。
对于元数据,业界广泛使用的是基于B+树或者Key-Value(简称为KV)的存储方式,其各有优劣。在当前一种典型的具有去重功能的KV分布式存储架构中,其单节点索引的设计如下所述。
索引磁盘按照固定大小,比如1KB(千字节),分成许多个名为元数据桶(metabucket)的空间。每个元数据桶的数据结构如图1所示。元数据桶的头部(Meta bucketheader)包含元数据桶中的例如:迭代数(generation)、分配图(allocation map)和多个标志位(flag bits)等元数据;余下的空间用来存放数据记录(data records)。每个数据记录是一块原始数据对应的元数据,其中包含了数据指纹(称为key)、数据的存储位置PBN和一些标志位(例如:引用计数等)。
在***运行期间,对接收到的下发IO(即读写数据)进行定长(例如:定长为4KB或者8KB)或者不定长的切片,并对每个切片数据进行哈希(hash)运算得到一个唯一的哈希值。例如:使用SHA-1算法可得到一个20个字节长度的字符串,也就是数据指纹Key。对该字符串再进行多个哈希运算,可得到一组有序的编号;例如采用12个哈希函数,可得到12个编号。用这12个有序的编号,再对***中的元数据桶的总数量取模,就可以得到对应于这个数据指纹的12个目标元数据桶编号;也就是说这12个元数据桶是这个数据指纹应该存放的候选位置,包含这个数据指纹的数据记录可以被存放在这12个目标元数据桶中第一个有空闲位置的元数据桶中。
在该设计下,IO流程(即读写流程)的处理方式如下。
对于读请求:如上描述得到对应于数据指纹key的12个目标元数据桶后,按序地在索引(index)的这12个目标元数据桶中查询是否存在这个数据指纹key;如果某一个目标元数据桶中的某个数据记录已经存在了该数据指纹key,则根据数据记录里记录的存储位置PBN去后端磁盘上读取原始数据块,并返回给上层应用。
对于写请求:首先,为了确定是否是重复数据,类似读请求一样,先根据数据的数据指纹key按序查询索引上对应的所有目标元数据桶;如果找到了相同的数据指纹key,说明本次写的数据是一个重复数据;只需要根据设计做相应的动作,例如:在数据记录上增加引用计数,而不用再次写入原始数据块;如果所有目标元数据桶中都没有找到这个数据指纹key,说明这是个新的数据。那么,就要先在后端磁盘上写入原始数据块,并记录其位置信息PBN,比如:数据磁盘编号、磁盘内偏移、数据长度等。然后将数据指纹key,数据位置PBN及一些设计上需要的其他元数据信息组合形成一条数据记录。将这条数据记录存放到第一个有空闲位置的目标元数据桶中,并更新该目标元数据桶自身的元数据信息。最后,将索引信息的更改以某种方式持久化保存,可以是日志形式,也可以是直接下刷元数据桶到磁盘上的形式等。
发明人注意到,在该读写架构下,为了获得更高的性能,需要将索引中所有的元数据桶在开机的时候全部加载到内存中。以一个数据切片长度为4KB的***配置举例,一个3.68TB(太字节)的磁盘上能存储的4KB数据块的个数为3.68 * 1024 * 1024 * 1024KB /4KB = 0.9 * 1024 * 1024 * 1024个;每个数据块需要一个长度为32B的数据记录的话,就需要32 * 0.9 * 1024 * 1024 * 1024B = 28.8GB(千兆字节)的内存。那么,一个仅10盘位的配置,内存就需要288GB的内存。随着单个硬盘容量上限的不断刷新,会导致需要的内存容量不端飙升。因此,不论从存储成本、存储服务器配置,还是后续可能的超融合设计,如此大的内存需求量对于分布式存储来说是难以实现的。
同时,索引全部在内存中能带来的真实性能提升也是有限的。一方面,因为现在非易失性存储器硬盘(NVME SSD)的大量应用、存储开发套件(SPDK)、协程模式等软件技术的使用,硬盘IO消耗的时间在不断地减少;其次,影响整个分布式存储性能的因素很多,例如:网络性能、前端数据模型的设计等,相比占用如此大量的内存所产生的代价,其带来的收益是有限的。
本公开至少一实施例提供一种数据处理方法,包括:确定***的输入数据的数据指纹、所述***的多个元数据桶以及所述数据指纹对应的多个目标元数据桶,其中,所述多个元数据桶被分为N组,所述N组元数据桶分别对应N个过滤器;确定第n个目标元数据桶对应的过滤器,并基于所述数据指纹获取所述第n个目标元数据桶对应的第一过滤数据;基于所述第一过滤数据获取所述第n个目标元数据桶对应的过滤器中的第二过滤数据;根据所述第二过滤数据判断所述数据指纹是否存在,并基于判断结果进行相应的数据处理操作;其中,N为大于0的整数,n为大于0且小于等于目标元数据桶的个数的整数。
本公开至少一实施例还提供一种对应于上述数据处理方法的数据处理装置和存储介质。
本公开至少一个实施例提供的数据处理方法可以大幅度地降低该架构的分布式存储***对内存的需求量,通过采用多个元数据桶共用一个过滤器结构,可以在保证准确率的前提下,进一步降低内存的使用量,以达到相同的内存量能支持更大的硬盘容量的要求,或实现相同硬盘容量使用的内存更少。
下面结合附图对本公开的实施例及其一些示例进行详细说明。
本公开至少一实施例提供一种数据处理方法,例如,可以有效降低分布式存储***内存的使用量。
例如,该数据处理方法可以以软件、硬件、固件或其任意组合的方式实现,由例如手机、数码相机、平板电脑、笔记本电脑、桌面电脑、网络服务器等设备中的处理器加载并执行,以降低分布式存储***内存的使用量。
例如,该数据处理方法适用于一计算装置,该计算装置是包括具有计算功能的任何电子设备,例如可以为手机、数码相机、笔记本电脑、平板电脑、台式计算机、网络服务器等,可以加载并执行该数据处理方法,本公开的实施例对此不作限制。例如,该计算装置可以包括中央处理单元(Central Processing Unit,CPU)或图形处理单元(GraphicsProcessing Unit,GPU)、数字信号处理器(DSP)等具有数据处理能力和/或指令执行能力的其它形式的处理单元、存储单元等,该计算装置上还安装有操作***、应用程序编程接口(例如,OpenGL(Open Graphics Library)、Metal等)等,通过运行代码或指令的方式实现本公开实施例提供的数据处理方法。
图2示出了本公开至少一实施例提供的一种数据处理方法的示意图。如图2所示,该数据处理方法包括步骤S110至步骤S140。
步骤S110:确定***的输入数据的数据指纹、***的多个元数据桶以及数据指纹对应的多个目标元数据桶。
步骤S120:确定第n个目标元数据桶对应的过滤器,并基于数据指纹获取第n个目标元数据桶对应的第一过滤数据。
步骤S130:基于第一过滤数据获取第n个目标元数据桶对应的过滤器中的第二过滤数据。
步骤S140:根据第二过滤数据判断数据指纹是否存在,并基于判断结果进行相应的数据处理操作。
例如,N为大于0的整数,n为大于0且小于等于目标元数据桶的个数的整数。
对于步骤S110,例如,在一些示例中,多个元数据桶被分为N组,N组元数据桶分别对应N个过滤器,即1组元数据桶共用1个过滤器。例如,该***的输入数据例如为读写数据或其他数据,该过滤器为布隆过滤器,下面以该输入数据为读写数据,该过滤器为布隆过滤器为例进行介绍,但本公开的实施例对此不作限制。
例如,在本公开的示例中,以4个1KB的元数据桶的为一组进行介绍,但本公开的实施例对此不作限制,可以根据实际情况,调整每组中元数据桶的个数和每个元数据桶的大小。
图3示出了图2所示的步骤S110的一个示例的示意图。例如,如图3所示,在一些示例中,该步骤S110包括步骤S111-步骤S112。
步骤S111:对***的输入数据进行定长或不定长切片,并对切片进行哈希运算以得到输入数据的数据指纹。
步骤S112:根据***的存储单元的容量确定多个元数据桶的个数,并基于数据指纹和多个元数据桶的个数得到数据指纹对应的多个目标元数据桶。
对于步骤S111,例如,在***运行期间,对接收到的下发IO(即输入数据,例如读写数据)进行定长(例如:定长为4KB或者8KB)或者不定长的切片,并对每个切片数据进行哈希(hash)运算得到一个唯一的哈希值。例如:使用SHA-1算法可得到一个多个字节长度的字符串,也就是数据指纹Key。例如,该数据指纹的字节长度可以是20字节,当然也可以根据实际需要任意设置,具体是实际情况而定,本公开的实施例对此不作限制。
对于步骤S111,例如,***的存储单元可以为***的单个索引磁盘或磁盘的一部分(即磁盘分区)。下面以***的存储单元为索引磁盘为例进行介绍,但本公开的实施例对此不作限制。例如,索引磁盘按照固定大小,比如1KB,分成许多个名为元数据桶的空间,从而可以得到***中元数据桶的个数。每个元数据桶的数据结构如图1所示,具体可以参照上述参与图1的介绍,在此不再赘述。
例如,对该字符串再进行多个哈希运算,可得到一组有序的编号。为了便于理解和说明,以采用X=12个哈希运算为例进行介绍,但本公开的实施例对此不作限制,可以根据实际需要和具体情况任意设置。
例如,在该实施例中,采用12个哈希函数,可得到12个编号。使用这12个有序的编号对***中的元数据桶的总数量(即元数据桶的个数)取模,就可以得到对应于这个数据指纹的12个目标元数据桶编号,即在***的多个元数据桶中确定存放数据指纹的元数据桶作为目标元数据桶。例如,这12个目标元数据桶是这个数据指纹应该存放的候选位置,包含这个数据指纹的数据记录可以被存放在这12个目标元数据桶中第一个有空闲位置的元数据桶中。
对于步骤S120,例如,第一过滤数据包括基于数据指纹算出的数据,例如,为bf_data[i][j]中的下标j,用作bf_data[i][j]的索引,具体计算方法将在步骤S123中进行详细地介绍;第二过滤数据包括根据本组元数据桶中所有数据记录计算出的与所述第一过滤数据j对应的过滤器数据,例如,为bf_data[i][j]进行加一(++)或减一(--)之后的值,即布隆过滤器已经存在的值。例如,第二过滤数据的个数与第一过滤数据j的取值个数有关,具体将在步骤S123中进行详细地介绍。例如,bf_data[i][j]中的i表示哈希函数的个数。
例如,布隆过滤数据对应的布隆过滤器的数据结构bucket_bloom_filter如下:
class bucket_bloom_filter{
private:
bloom_filter_result_t *meta_bucket_bf;
mmap bucket_mmap_array[Meta_bucket_array_length];
uint64_t bucket_flag_array[Meta_bucket_array_length];
generation_t bucket_gen_array[Meta_bucket_array_length];
}。
例如,bloom_filter_result用于存放布隆过滤器的数据,其包含一个uint8_tbf_data[X][Y]结构。例如,bloom_filter_result的具体结构如下所示:
typedef struct bloom_filter_result{
uint8_t bf_data[X][Y];
}bloom_filter_result_t。
例如,uint8_t bf_data[X][Y]中的X表示生成布隆过滤数据所使用的哈希函数的个数,Y表示标志位的个数,例如,该标志位的个数表示过滤器的结果维度。X和Y的具体值可以根据应用模型以及实际需要进行设置,只要根据应用模型得到最佳匹配即可,本公开的实施例对此不作限定。下面以X=5和Y=256为例进行说明,但本公开的实施例对此不作限制,可根据实际需要和具体情况进行调整。
例如,布隆过滤器的数据结构class bucket_bloom_filter包含了每一组元数据桶的内存元数据(例如,包括第二过滤数据、分配图、标志位和迭代数等)。
例如,meta_bucket_bf是一个bloom_filter_data_t类型的指针,其所指向的内存将存放根据本组元数据桶(例如,M个元数据桶)中所有数据记录计算出的过滤器数据,例如,bf_data[i][j]。具体计算过程参见下面bf_data[i][j]部分的介绍。例如,M为大于0的整数。
例如,bucket_mmap_array[meta_bucket_array_length]用于存放每组元数据桶内的每个元数据桶(例如,存放M个元数据桶)各自的分配图,表示了每个元数据桶中还有多少剩余空间可以存放新的数据记录。该信息用来快速寻找合适的元数据桶以存放新数据。
例如,bucket_flag_array[meta_bucket_array_length]记录了对应的每组元数据桶内的每个元数据桶(例如,对应M个元数据桶)各自的标志位。该信息用于***其他功能判断元数据桶的实时状态。
例如,bucket_gen_array[meta_bucket_array_length]记录了对应的每组元数据桶内的每个元数据桶(例如,对应M个元数据桶)各自的迭代数,用于标识元数据桶的变化。
例如,meta_bucket_array_length值为M,即一组元数据桶包括M个元数据桶,共用一个布隆过滤器结构:bucket_bloom_filter。这样可以在保证准确率的前提下,大幅度地降低该架构的分布式存储***对内存的需求量。
例如,下面以M=4(即4个元数据桶为一组)、每个元数据桶的大小为1KB,其中元数据桶头部占用32 字节、数据记录长度为32字节为例进行介绍,当然可以根据实际需要设置为其他数值,本公开的实施例对此不作限制。
对于一个新初始化的***,此时是没有数据的状态,因此所有布隆过滤器结构bucket_bloom_filter中都是空值。该布隆过滤器结构bucket_bloom_filter中的值的生成是随着IO(例如,输入数据)的下发不断动态生成的。
例如,对于一个新初始化的***,首先会根据索引磁盘的大小计算出元数据桶的总个数total_bucket_number。基于元数据桶的总个数得到布隆过滤器的个数,例如,total_bucket_number/M = bloom_filter_length, bucket_bloom_filter表示布隆过滤器的个数。因为目标元数据桶是元数据桶的总个数total_bucket_number中用来存储数据指纹对应的数据记录的部分,因此,元数据桶的总个数total_bucket_number大于目标元数据桶的个数。
提前申请好所有的布隆过滤器的内存区域,并表示为meta_bucket_bf_array[bloom_filter_length]。那么每个单独的元数据桶对应的布隆过滤器结构bucket_bloom_filter就可以根据元数据桶的序号计算出。
例如,根据第n个目标元数据桶的序号W和每组目标元数据桶包含的个数M确定第n个目标元数据桶对应的过滤器。
具体地,为了便于理解以元数据桶的序号W为23、M=4为例进行介绍,但是本公开的实施例对此不作限制。例如,对于序号为23 的元数据桶,当采用4个元数据桶为一组共用一个布隆过滤器结构bucket_bloom_filter时,通过编号23(W)除以 4 (M)进行取整等于5,即其对应的布隆过滤器结构bucket_bloom_filter在meta_bucket_bf_array中的下标为5,由此得到了该一组元数据桶对应的布隆过滤器结构bucket_bloom_filter[5]。也就是说,编号为#20、#21、#22和#23的元数据桶共用一个布隆过滤器bucket_bloom_filter [5]。
图4示出了图2所示的步骤S120的一个示例的示意图。如图4所示,步骤S120包括步骤S121-步骤S123。
步骤S121:确定过滤器采用的哈希函数的个数和哈希函数的定义。
例如,参见上述uint8_t bf_data[X][Y]的相关描述,下面以哈希函数的个数X=5和哈希函数的定义(例如该定义确定了步骤S123中所取的字节长度)确定所取字节长度为1个字节长度(例如以数据指纹的字节偏移byte_offset为起点抽取例如1字节长度(8位)的16进制数)为例进行说明,但本公开的实施例对此不作限制,可根据实际需要和具体情况进行调整。例如,该哈希函数的个数可以根据不同哈希函数的个数或者同一哈希函数但是不同参数(即(key, byte_offset)的不同取值)来确定,下面以哈希函数的个数通过采用同一哈希函数但是不同参数(即(key, byte_offset)的不同取值)的方式来确定的方法进行介绍,但本公开的实施例对此不作限定;例如,该哈希函数的定义还可以定义抽取2字节、3字节长度或其他字节长度,具体可视实际情况而定,本公开的实施例对此不作限定。
例如,该哈希函数包含digest函数,用于生成数据bf_data[i][j]。数据bf_data[i][j]的具体生成过程参见步骤S123中的介绍。
例如,哈希函数模型如下:
uint8_t bloom_filter_hash_function(key, byte_offset)
{
return key.digest(byte_offset);
}。
步骤S122:根据哈希函数的定义确定过滤器的结果维度。
例如,过滤器的结果维度Y和哈希函数的定义(即通过哈希函数的定义确定所取的字节长度)有关,例如,与哈希函数定义的步骤S123中所取的字节长度有关。例如,当哈希函数定义以数据指纹的字节偏移byte_offset为起点抽取1个例如1字节长(8位)的16进制数时,则从数据指纹中取出的十六进制数据对应到十进制数据的范围为0~255,即过滤器的结果维度Y=256;当哈希函数定义抽取2字节长度时,则从数据指纹中取出的十六进制数据对应到十进制数据的范围为0~(216-1),即过滤器的结果维度Y=216。需要注意的是,该字节长度和过滤器的结果维度可以根据实际需要变化,本公开的实施例对此不作限制。
步骤S123:根据数据指纹和哈希函数的定义确定第一过滤数据。
例如,第一过滤数据用bf_data[i][j]中的下标j表示,用作第二过滤数据bf_data[i][j]的索引。
例如,在该步骤中,digest函数的设计为对数据指纹以其字节偏移byte_offset为起点抽取1个例如1字节长度(8位)的16进制数(当然,也可以取字节长度为2、3、4……字节等,此处仅用于说明,本公开的实施例对此不作限制),将其转换成十进制的整数,记作索引idx,其范围为0-255。
例如,以设定字节偏移byte_offset取值为0、4、8、12、16(即5个哈希函数)为例进行说明,此处仅用于说明,还可以更多和更少的哈希函数,本公开的实施例对此不作限制。例如,根据设定的字节偏移byte_offset从数据指纹中抽取出的字节分别是第0个字节、第4个字节、第8个字节、第12个字节和第16个字节,共取5个1字节长度(即哈希函数定义的字节长度)的16进制整数,抽取完成后,将该5个1字节长度的16进制整数分别转换为5个0~255范围(即256维度)内的十进制整数作为第一过滤数据j,即哈希函数定义了以何种算法计算第一个过滤数据。确定第一过滤数据j后,对与第一过滤数据j对应的过滤器数据bf_data[i][j]进行加一(写入)或减一(删除)操作。
例如,对于新写入1个元数据桶的数据记录来说,根据该元数据桶的数据记录(数据指纹对应数据记录)得到的过滤器数据bf_data如下(例如,加一操作++):
从数据指纹中抽取出的第0个字节转换成十进制整数是0,那么对应的操作为bf_data [0][0]++。
从数据指纹中抽取出的第4个字节转换成十进制整数是57,那么对应的操作为bf_data [1][57]++。
从数据指纹中抽取出的第8个字节转换成十进制整数是155,那么对应的操作为bf_data [2][155]++。
从数据指纹中抽取出的第12个字节转换成十进制整数是204,那么对应的操作为bf_data [3][204]++。
从数据指纹中抽取出的第16个字节转换成整数是254,那么对应的操作为bf_data[4][254]++。
例如,在上述示例中,bf_data[i][j]中的i=0、1、2、3、4,表示哈希函数的个数,j=0、57、155、204、254即第一过滤数据,与0、57、155、204、254对应(即与第一过滤数据对应)的bf_data [0][0]、bf_data [1][57]、bf_data [2][155]、bf_data [3][204]、bf_data [4][254]即为第二过滤数据。即第一过滤数据作为索引用于查询第二过滤数据。
对于一组元数据桶(M个)里的所有数据记录都采用上述计算算法,即可生成这一组元数据桶对应的bf_data结果,作为第二过滤数据。再加上各个元数据桶的其他元数据(例如,迭代数、分配图、标志位等),就得到了完整的布隆过滤器结构bucket_bloom_filter。
***重启时,会从索引磁盘上读取完整的索引数据,采用上述算法为每组元数据桶重新计算出过第二滤数据bf_data的值,并填充其余所需的元数据(例如,迭代数、分配图、标志位等),形成完整的布隆过滤器结构bucket_bloom_filter。而后,分布式存储***就可以正常地提供服务了。
对于步骤S130,第n个目标元数据桶对应的过滤器中的第二过滤数据即为在步骤S120的数据处理操作之前已经基于之前的读写或删除指令等进行了更新后的布隆过滤器中的数据。即,步骤S120中的第一过滤数据对应的是当前输入的输入数据的数据指纹对应的数据(例如,上述索引j),步骤S130中的第二过滤数据对应的是当前布隆过滤器中基于之前的数据记录的写入或删除而更新后的bf_data,即根据上述索引j(即第一过滤数据)确定bf_data[i][j],并判断bf_data[i][j]的值是否满足该数据指纹进行读写或删除操作。
对于步骤S140,基于上述实施例提出的布隆过滤器定位数据指纹是否存在于它所属的某个目标元数据桶中时,IO路径的处理(即数据处理操作)也会有相应的变化。
例如,当根据第q个目标元数据桶对应的过滤器的第二过滤数据判断数据指纹不存在时,继续对第q+1个目标元数据桶对应的过滤器的第二过滤数据进行判断,q为大于0的整数。
例如,数据处理操作包括读操作、写操作和删除操作,当然还可以包括其他操作,本公开的实施例对此不作限制。
图5A示出了图2所示的步骤S140的一个示例的示意图。图5A示出了当数据处理操作为读操作时,步骤S140包括步骤S141-步骤S143。
步骤S141:以第一过滤数据为索引确定对应的第二过滤数据,基于第二过滤数据的值判断数据指纹是否已存在,当数据指纹存在时,从***的存储单元读取数据指纹对应的数据记录。
步骤S142:基于读取的数据记录读取原始数据。
步骤S143:当数据指纹不存在时,返回读取失败。
对于步骤S141,例如,对于读路径(即读操作),首先,根据数据的数据指纹计算出它对应的多个目标元数据桶。针对每个目标元数据桶,参考上述步骤S120中的介绍,根据该目标元数据桶的序号得到其对应的布隆过滤器结构bucket_bloom_filter。
然后,参考上述步骤S120的介绍根据该数据指纹计算bf_data[i][j]中的下标j作为第一过滤器数据,确定上述根据目标元数据桶的序号确定的布隆过滤器结构bucket_bloom_filter的过滤器数据bf_data中的5个与第一过滤数据对应的数据作为第二过滤数据。判断该5个对应的数据(即第二过滤数据)是否等于0或是否大于等于1,只要5个数据(例如,上述bf_data [0][0]、bf_data [1][57]、bf_data [2][155]、bf_data [3][204]、bf_data [4][254])中有一个数据的值为0,即没有对应上,那么可以确定该组元数据桶中不存在该数据指纹;就可以跳过这个目标元数据桶(例如,上述第q个目标元数据桶),以同样的过程去下一个目标元数据桶(例如,上述第q+1个目标元数据桶)去寻找。
例如,在该步骤中,用这个下标j(即第一过滤数据)去确定第二过滤数据bf_data[i][j]的值是否是大于等于1(大于等于1,即表示根据步骤S123中的方法对bf_data[i][j]进行了写入(++)操作,即该数据记录已经存在在该元数据桶中),此时如果根据当前数据指纹得到的第一过滤数据j确定的第二过滤数据bf_data[i][j]大于等于1,就是命中,即该数据记录存在在该组元数据桶中,即该数据指纹存在;否则(即至少有一个第二过滤数据等于0),未命中,即该数据指纹不存在。只要该组元数据桶的5个数据全部大于等于1,则表示该数据指纹存在在该组元数据桶中。
对于步骤S142,当基于上述步骤S141确定该数据指纹存在在该组元数据桶中时,就要从索引磁盘上读取出相应的数据记录来对照;如果对应,就可以根据其中记录的数据的存储位置PBN去读取原始的数据。
对于步骤S143,如果所有的目标元数据桶的布隆过滤数据均没有命中,说明这个数据指纹在***中是不存在的,那么它对应的数据记录也是不存在的,因此,向上层返回读失败。
需要注意的是,因为布隆过滤器有假阳性的问题,所以有可能出现一个或多个目标元数据桶命中的情况。此时,就要到索引磁盘上读取这些显示命中了的目标元数据桶的数据来确定这个数据指纹是否存在。然后,返回给上层结果。
图5B示出了图2所示的步骤S140的另一个示例的示意图。图5B示出了当数据处理操作为写操作时,步骤S140包括步骤S241-步骤S244。
步骤S241:当数据指纹存在时,更新第二过滤数据中的标志位。
步骤S242:当数据指纹不存在时,根据第n个目标元数据桶的序号和每组目标元数据桶包含的个数确定其对应的过滤器。
步骤S243:根据第n个目标元数据桶对应的过滤器中的分配图,判断***是否有空间存放数据指纹对应的数据记录。
步骤S244:当在***的存储单元写入数据指纹对应的数据记录后,更新过滤器的第二过滤数据。
对于步骤S241,例如,对于写路径(即写操作),首先,类似于读路径处理,先基于第二过滤数据判断该数据指纹对应的12个目标元数据桶里是不是已经存在相同的数据指纹。判断方法参见上述步骤S141中的介绍,在此不再赘述。如果存在,就不用再次写入原始数据,只需要更新元数据,例如,更新第二过滤数据中的标志位,例如,更新该标志位中的引用计数(reference count)。
对于步骤S242,例如,当数据指纹不存在时,即如果***中不存在相同的数据指纹,就要新增该数据指纹对应的输入数据。例如,先在***中写入原始数据块,并记录数据的存储位置PBN。
然后,遍历这12个目标桶,确定其存储的位置,例如确定其存储位置为第n个目标元数据桶。根据第n个目标元数据桶的序号,确定对应的布隆过滤器结构bucket_bloom_filter(具体确定方法参见步骤S120的介绍)。
对于步骤S243,例如,根据其中记录的位置(即第n个目标元数据桶)的分配图,判断是否有剩余空间能存放这个新的数据记录(即该数据指纹对应的数据记录)。当找到可以存放该数据记录的位置后,将这个新的数据记录***到该目标元数据桶里并持久化记录。例如,持久化的方式根据不同设计而不同,例如可以记录日志或者直接刷盘,本公开的实施例对此不作限制。
对于步骤S244,例如,当在***的存储单元写入数据指纹对应的数据记录后,即在***新数据记录后,还要同步地更新内存布隆过滤器bucket_bloom_filter中的过滤器数据bf_data的数组对应位上的值,表示新加入了这个数据指纹。例如,通过步骤S123中介绍的方法(例如,上述写入(++)操作)得到更新的过滤器数据bf_data。这样,下次读取这个数据指纹的时候,布隆过滤器才能正确的比对。
图5C示出了图2所示的步骤S140的再一个示例的示意图。图5C示出了当数据处理操作为删除操作时,步骤S140包括步骤S341-步骤S344。
步骤S341:当数据指纹存在时,从***的存储单元读取数据指纹对应的元数据桶。
步骤S342:基于读取的元数据桶删除数据指纹对应的数据记录和原始数据。
步骤S343:当在***的存储单元删除数据指纹对应的数据记录和原始数据后,更新过滤器的第二过滤数据。
对于步骤S341,例如,对于删除路径(即删除操作),首先,类似于读路径,先基于第二过滤数据判断该数据指纹对应的12个目标元数据桶里是否已经存在该数据指纹。判断方法参见上述步骤S141中的介绍,在此不再赘述。
如果存在该数据指纹,就从索引磁盘读取对应的元数据桶。
对于步骤S342,例如,确认存在该数据指纹后,基于对应的元数据桶进行删除操作,例如,根据元数据桶中记录的数据的存储位置PBN去删除原始的数据。
对于步骤S343,例如,同步的对布隆过滤器结构bucket_bloom_filter中的过滤器数据bf_data的数组对应的位上的值进行更新。不同的是,删除操作是对相应的第二过滤数据进行减减操作,表示删除了这个数据指纹。例如,参见步骤S123中介绍的方法,删除路径对应的操作(例如,减一操作]--;)包括:
从数据指纹中抽取出的第0个字节转换成十进制整数是0,那么对应的操作为bf_data [0][0]--。
从数据指纹中抽取出的第4个字节转换成十进制整数是57,那么对应的操作为bf_data [1][57]--。
从数据指纹中抽取出的第8个字节转换成十进制整数是155,那么对应的操作为bf_data [2][155]--。
从数据指纹中抽取出的第12个字节转换成十进制整数是204,那么对应的操作为bf_data [3][204]--。
从数据指纹中抽取出的第16个字节转换成十进制整数是254,那么对应的操作为bf_data [4][254]--。
需要说明的是,在本公开的实施例中,本公开上述各个实施例提供的数据处理方法的流程可以包括更多或更少的操作,这些操作可以顺序执行或并行执行。虽然上文描述的数据处理方法的流程包括特定顺序出现的多个操作,但是应该清楚地了解,多个操作的顺序并不受限制。上文描述的数据处理方法可以执行一次,也可以按照预定条件执行多次。
本公开上述实施例提供的数据处理方法可以大幅度地降低该架构的分布式存储***对内存的需求量,例如,通过多个元数据桶共用一个过滤器结构,可以在保证准确率的前提下,进一步降低内存的使用量,以达到相同的内存量能支持更大的硬盘容量的要求,或实现相同硬盘容量使用的内存更少。相比现有设计,相同后端磁盘容量支持下,内存使用量可减少74%。同时,性能也未受到明显影响。
图6为本公开至少一实施例提供的一种数据处理装置的示意框图。例如,在图6所示的示例中,该数据处理装置100包括确定单元110、第一过滤数据获取单元120、第二过滤数据获取单元130和操作单元140。例如,这些单元可以通过硬件(例如电路)模块或软件模块等实现,以下是实施例与此相同,不再赘述。例如,可以通过中央处理单元(CPU)、图像处理器(GPU)、张量处理器(TPU)、现场可编程逻辑门阵列(FPGA)或者具有数据处理能力和/或指令执行能力的其它形式的处理单元以及相应计算机指令来实现这些单元。
确定单元110,配置为确定***的输入数据的数据指纹、***的多个元数据桶以及数据指纹对应的多个目标元数据桶。例如,多个元数据桶被分为N组,N组元数据桶分别对应N个过滤器。例如,该确定单元110可以实现步骤S110,其具体实现方法可以参考步骤S110的相关描述,在此不再赘述。
第一过滤数据获取单元120,配置为确定第n个目标元数据桶对应的过滤器,并基于数据指纹获取所述第n个目标元数据桶对应的第一过滤数据。例如,该第一过滤数据获取单元120可以实现步骤S120,其具体实现方法可以参考步骤S120的相关描述,在此不再赘述。
第二过滤数据获取单元130,配置为基于第一过滤数据获取所述第n个目标元数据桶对应的过滤器中的第二过滤数据。例如,第二过滤数据获取单元130可以实现步骤S130,其具体实现方法可以参考步骤S130的相关描述,在此不再赘述。
操作单元140,配置为根据第二过滤数据判断数据指纹是否存在,并基于判断结果进行相应的数据处理操作。例如,操作单元140可以实现步骤S140,其具体实现方法可以参考步骤S140的相关描述,在此不再赘述。
需要注意的是,在本公开的实施例中,该数据处理装置100可以包括更多或更少的电路或单元,并且各个电路或单元之间的连接关系不受限制,可以根据实际需求而定。各个电路的具体构成方式不受限制,可以根据电路原理由模拟器件构成,也可以由数字芯片构成,或者以其他适用的方式构成。
图7为本公开至少一实施例提供的另一种数据处理装置的示意框图。例如,如图7所示,该数据处理装置200包括处理器210、存储器220以及一个或多个计算机程序模块221。
例如,处理器210与存储器220通过总线***230连接。例如,一个或多个计算机程序模块221被存储在存储器220中。例如,一个或多个计算机程序模块221包括用于执行本公开任一实施例提供的数据处理方法的指令。例如,一个或多个计算机程序模块221中的指令可以由处理器210执行。例如,总线***230可以是常用的串行、并行通信总线等,本公开的实施例对此不作限制。
例如,该处理器210可以是中央处理单元(CPU)、数字信号处理器(DSP)、图像处理器(GPU)或者具有数据处理能力和/或指令执行能力的其它形式的处理单元,可以为通用处理器或专用处理器,并且可以控制数据处理装置100中的其它组件以执行期望的功能。例如,在本公开的实施例中,以处理器为图像处理器(GPU)为例进行介绍。
存储器220可以包括一个或多个计算机程序产品,该计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。该易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。该非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器210可以运行该程序指令,以实现本公开实施例中(由处理器210实现)的功能以及/或者其它期望的功能,例如数据处理方法等。在该计算机可读存储介质中还可以存储各种应用程序和各种数据,例如目标元数据桶、第一过滤数据、第二过滤数据以及应用程序使用和/或产生的各种数据等。
需要说明的是,为表示清楚、简洁,本公开实施例并没有给出该数据处理装置200的全部组成单元。为实现数据处理装置200的必要功能,本领域技术人员可以根据具体需要提供、设置其他未示出的组成单元,本公开的实施例对此不作限制。
根据本公开实施例的数据处理方法或者装置也可以借助于如图8所示的示例性电子设备3000的架构来实现。如图8所示,电子设备3000可以包括总线3010、一个或多个中央处理器(Central Processing Unit,CPU)或图形处理器(GPU)3020、只读存储器(ROM)3030、随机存取存储器(RAM)3040、连接到网络的通信端口3050、输入/输出组件3060、硬盘3070等。电子设备3000中的存储设备,例如ROM 3030或硬盘3070可以存储本公开提供的方法的处理和/或通信所需使用的各种数据或文件以及CPU或GPU所执行的程序指令。电子设备3000还可以包括用户界面3080。当然,图8所示的架构只是示例性的,在实现不同的设备时,根据实际需要,可以省略图8示出的电子设备中的一个或多个部件。
本公开至少一实施例还提供一种存储介质。图9为本公开至少一实施例提供的一种存储介质的示意图。例如,如图9所示,该存储介质400非暂时性地存储计算机可读指令401,当非暂时性计算机可读指令由计算机(包括处理器)执行时可以执行本公开任一实施例提供的数据处理方法。
例如,该存储介质可以是一个或多个计算机可读存储介质的任意组合,例如一个计算机可读存储介质包含确定***的输入数据的数据指纹、所述***的多个元数据桶以及所述数据指纹对应的多个目标元数据桶的计算机可读的程序代码,另一个计算机可读存储介质包含确定第n个目标元数据桶对应的过滤器,并基于所述数据指纹获取所述第n个目标元数据桶对应的第一过滤数据;基于所述第一过滤数据获取所述第n个目标元数据桶对应的过滤器中的第二过滤数据的计算机可读的程序代码,另一个计算机可读存储介质包含根据所述第二过滤数据判断所述数据指纹是否存在,并基于判断结果进行相应的数据处理操作的计算机可读的程序代码。例如,当该程序代码由计算机读取时,计算机可以执行该计算机存储介质中存储的程序代码,执行例如本公开任一实施例提供的数据处理方法。
例如,存储介质可以包括智能电话的存储卡、平板电脑的存储部件、个人计算机的硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、闪存、或者上述存储介质的任意组合,也可以为其他适用的存储介质。
对于上述公开内容,还有以下几点需要说明。
(1)本公开实施例附图只涉及到本公开实施例涉及到的结构,其他结构可参考通常设计。
(2)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。
Claims (14)
1.一种数据处理方法,包括:
确定***的输入数据的数据指纹、所述***的多个元数据桶以及所述数据指纹对应的多个目标元数据桶,其中,所述多个元数据桶被分为N组,所述N组元数据桶分别对应N个过滤器;
确定第n个目标元数据桶对应的过滤器,并基于所述数据指纹获取所述第n个目标元数据桶对应的第一过滤数据;
基于所述第一过滤数据获取所述第n个目标元数据桶对应的过滤器中的第二过滤数据;
根据所述第二过滤数据判断所述数据指纹是否存在,并基于判断结果进行相应的数据处理操作;
其中,基于所述数据指纹获取所述第n个目标元数据桶对应的第一过滤数据,包括:
确定所述过滤器采用的哈希函数的个数和所述哈希函数的定义;
根据所述哈希函数的定义确定所述过滤器的结果维度;
根据所述数据指纹和所述哈希函数的定义确定所述第一过滤数据;
其中,N为大于0的整数,n为大于0且小于等于所述目标元数据桶的个数的整数。
2.根据权利要求1所述的数据处理方法,其中,确定***的输入数据的数据指纹、所述***的多个元数据桶以及所述数据指纹对应的多个目标元数据桶,包括:
对所述***的所述输入数据进行定长或不定长切片,并对所述切片进行哈希运算以得到所述输入数据的数据指纹;
根据所述***的存储单元的容量确定所述多个元数据桶的个数,并基于所述数据指纹和所述多个元数据桶的个数得到所述数据指纹对应的多个目标元数据桶。
3.根据权利要求1所述的数据处理方法,其中,确定第n个元数据桶对应的过滤器,包括:
根据所述第n个目标元数据桶的序号和每组元数据桶包含的个数确定所述第n个目标元数据桶对应的过滤器。
4.根据权利要求1所述的数据处理方法,其中,每组元数据桶存储的元数据包括数据记录,
其中,所述第二过滤数据包括根据每组元数据桶中的数据记录生成的与所述第一过滤数据对应的过滤器数据。
5.根据权利要求1所述的数据处理方法,其中,当所述数据处理操作为读操作时,
根据所述第二过滤数据判断所述数据指纹是否存在,并基于判断结果进行相应的数据处理操作,包括:
以所述第一过滤数据为索引确定对应的所述第二过滤数据,基于所述第二过滤数据的值判断所述数据指纹是否已存在;
当所述数据指纹存在时,从所述***的存储单元读取所述数据指纹对应的数据记录;
基于读取的所述数据记录读取原始数据。
6.根据权利要求5所述的数据处理方法,其中,根据所述第二过滤数据判断所述数据指纹是否存在,并基于判断结果进行相应的数据处理操作,还包括:
当所述数据指纹不存在时,返回读取失败。
7.根据权利要求1所述的数据处理方法,其中,当所述数据处理操作为写操作时,
根据所述第二过滤数据判断所述数据指纹是否存在,并基于判断结果进行相应的数据处理操作,包括:
以所述第一过滤数据为索引确定对应的所述第二过滤数据,并基于所述第二过滤数据的值判断所述数据指纹是否已存在;
当所述数据指纹存在时,更新所述第二过滤数据中的标志位。
8.根据权利要求7所述的数据处理方法,其中,根据所述第二过滤数据判断所述数据指纹是否存在,并基于判断结果进行相应的数据处理操作,还包括:
当所述数据指纹不存在时,根据所述第n个目标元数据桶的序号和每组目标元数据桶包含的个数确定其对应的过滤器;
根据所述第n个目标元数据桶对应的过滤器中的分配图,判断***是否有空间存放所述数据指纹对应的数据记录;
当在所述***的存储单元写入所述数据指纹对应的数据记录后,更新所述过滤器的第二过滤数据。
9.根据权利要求1所述的数据处理方法,其中,当所述数据处理操作为删除操作时,
根据所述第二过滤数据判断所述数据指纹是否存在,并基于判断结果进行相应的数据处理操作,包括:
以所述第一过滤数据为索引确定对应的所述第二过滤数据,基于所述第二过滤数据的值判断所述数据指纹是否已存在,
当所述数据指纹存在时,从所述***的存储单元读取所述数据指纹对应的元数据桶;
基于读取的所述元数据桶删除所述数据指纹对应的数据记录和原始数据。
10.根据权利要求9所述的数据处理方法,其中,根据所述第二过滤数据判断所述数据指纹是否存在,并基于判断结果进行相应的数据处理操作,还包括:
当在所述***的存储单元删除所述数据指纹对应的数据记录和原始数据后,更新所述过滤器的第二过滤数据。
11.根据权利要求1所述的数据处理方法,其中,根据所述第二过滤数据判断所述数据指纹是否存在,并基于判断结果进行相应的数据处理操作,包括:
当根据第q个目标元数据桶对应的过滤器的第二过滤数据判断所述数据指纹不存在时,继续对第q+1个目标元数据桶对应的过滤器的第二过滤数据进行判断,
其中,q为大于0的整数。
12.一种数据处理装置,包括:
确定单元,配置为确定***的输入数据的数据指纹、所述***的多个元数据桶以及所述数据指纹对应的多个目标元数据桶,其中,所述多个元数据桶被分为N组,所述N组元数据桶分别对应N个过滤器;
第一过滤数据获取单元,配置为确定第n个目标元数据桶对应的过滤器,并基于所述数据指纹获取所述第n个目标元数据桶对应的第一过滤数据;
第二过滤数据获取单元,配置为基于所述第一过滤数据获取所述第n个目标元数据桶对应的过滤器中的第二过滤数据;
操作单元,配置为根据所述第二过滤数据判断所述数据指纹是否存在,并基于判断结果进行相应的数据处理操作;
其中,所述第一过滤数据获取单元还配置为:
确定所述过滤器采用的哈希函数的个数和所述哈希函数的定义;
根据所述哈希函数的定义确定所述过滤器的结果维度;
根据所述数据指纹和所述哈希函数的定义确定所述第一过滤数据;
其中,N为大于0的整数,n为大于0且小于等于所述目标元数据桶的个数的整数。
13.一种数据处理装置,包括:
处理器;
存储器;
一个或多个计算机程序模块,其中,所述一个或多个计算机程序模块被存储在所述存储器中并被配置为由所述处理器执行,所述一个或多个计算机程序模块包括用于执行实现权利要求1-11任一所述的数据处理方法的指令。
14.一种存储介质,非暂时性地存储计算机可读指令,当所述计算机可读指令由计算机执行时执行根据权利要求1-11任一所述的数据处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410417889.7A CN118034612B (zh) | 2024-04-09 | 2024-04-09 | 一种数据处理方法、装置和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410417889.7A CN118034612B (zh) | 2024-04-09 | 2024-04-09 | 一种数据处理方法、装置和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN118034612A CN118034612A (zh) | 2024-05-14 |
CN118034612B true CN118034612B (zh) | 2024-06-25 |
Family
ID=91002517
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410417889.7A Active CN118034612B (zh) | 2024-04-09 | 2024-04-09 | 一种数据处理方法、装置和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118034612B (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115221119A (zh) * | 2021-04-20 | 2022-10-21 | 北京金山云网络技术有限公司 | 文件的查找方法及装置、存储介质、电子设备 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11636096B2 (en) * | 2020-04-30 | 2023-04-25 | International Business Machines Corporation | Custom metadata tag inheritance based on a filesystem directory tree or object storage bucket |
JP2023549594A (ja) * | 2020-11-25 | 2023-11-28 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 情報管理方法、システム、プログラム |
CN113886331B (zh) * | 2021-12-03 | 2022-03-08 | 苏州浪潮智能科技有限公司 | 分布式对象存储方法、装置、电子设备及可读存储介质 |
CN114385636A (zh) * | 2022-01-04 | 2022-04-22 | 武汉大学 | 持久内存动态哈希索引方法、***、设备及存储介质 |
CN116048396B (zh) * | 2022-12-30 | 2024-03-08 | 蜂巢科技(南通)有限公司 | 基于日志结构化合并树的数据存储装置和存储控制方法 |
CN117349235A (zh) * | 2023-10-30 | 2024-01-05 | 浙江大学 | 一种基于LSM-Tree的KV存储***、电子设备、介质 |
-
2024
- 2024-04-09 CN CN202410417889.7A patent/CN118034612B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115221119A (zh) * | 2021-04-20 | 2022-10-21 | 北京金山云网络技术有限公司 | 文件的查找方法及装置、存储介质、电子设备 |
Non-Patent Citations (1)
Title |
---|
Zhang, Zhijiang,et al."Bixi: A EB-level Object Storage System Based on CEPH".《ICCSIE '23: Proceedings of the 8th International Conference on Cyber Security and Information Engineering》.2024,Page91-6. * |
Also Published As
Publication number | Publication date |
---|---|
CN118034612A (zh) | 2024-05-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8943032B1 (en) | System and method for data migration using hybrid modes | |
US9715434B1 (en) | System and method for estimating storage space needed to store data migrated from a source storage to a target storage | |
US8949208B1 (en) | System and method for bulk data movement between storage tiers | |
US9367448B1 (en) | Method and system for determining data integrity for garbage collection of data storage systems | |
CN103581331B (zh) | 虚拟机在线迁移方法与*** | |
CN111177143B (zh) | 键值数据存储方法、装置、存储介质与电子设备 | |
CN104408111A (zh) | 一种删除重复数据的方法及装置 | |
CN111832065A (zh) | 使用电路实现的软件和用于密钥-值存储的方法 | |
US9069707B1 (en) | Indexing deduplicated data | |
CN109977078B (zh) | 一种数据的处理方法、装置、计算机设备和存储介质 | |
CN109407985B (zh) | 一种数据管理的方法以及相关装置 | |
US10430383B1 (en) | Efficiently estimating data compression ratio of ad-hoc set of files in protection storage filesystem with stream segmentation and data deduplication | |
KR20230026946A (ko) | 해싱을 사용하는 키 밸류 스토리지 장치 및 그것의 동작 방법 | |
CN111190537A (zh) | 一种追加写场景下顺序存储磁盘管理的方法及*** | |
CN114490060A (zh) | 内存分配方法、装置、计算机设备和计算机可读存储介质 | |
CN105009068A (zh) | 管理对存储数据单元的操作 | |
CN111541617B (zh) | 一种用于高速大规模并发数据流的数据流表处理方法及装置 | |
US10262000B1 (en) | Global distributed file append using log-structured file system | |
CN118034612B (zh) | 一种数据处理方法、装置和存储介质 | |
US20220100718A1 (en) | Systems, methods and devices for eliminating duplicates and value redundancy in computer memories | |
CN113326262B (zh) | 基于键值数据库的数据处理方法、装置、设备及介质 | |
CN115576947A (zh) | 一种数据管理方法、装置、组合库、电子设备及存储介质 | |
US20130218851A1 (en) | Storage system, data management device, method and program | |
CN109271463B (zh) | 一种恢复MySQL数据库的innodb压缩数据的方法 | |
Ma et al. | UCDC: unlimited content-defined chunking, a file-differing method apply to file-synchronization among multiple hosts |
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 | ||
GR01 | Patent grant |