CN116450656A - 数据处理方法、装置、设备及存储介质 - Google Patents

数据处理方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN116450656A
CN116450656A CN202310719381.8A CN202310719381A CN116450656A CN 116450656 A CN116450656 A CN 116450656A CN 202310719381 A CN202310719381 A CN 202310719381A CN 116450656 A CN116450656 A CN 116450656A
Authority
CN
China
Prior art keywords
key
hash
data
parameter
value
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
Application number
CN202310719381.8A
Other languages
English (en)
Other versions
CN116450656B (zh
Inventor
江进
胡瑜
何东升
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Shuding Technology Co ltd
Original Assignee
Beijing Shuding Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Shuding Technology Co ltd filed Critical Beijing Shuding Technology Co ltd
Priority to CN202310719381.8A priority Critical patent/CN116450656B/zh
Publication of CN116450656A publication Critical patent/CN116450656A/zh
Application granted granted Critical
Publication of CN116450656B publication Critical patent/CN116450656B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2255Hash tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2246Trees, e.g. B+trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24564Applying rules; Deductive queries
    • G06F16/24566Recursive queries
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0644Management of space entities, e.g. partitions, extents, pools
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0682Tape device
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请实施例提供了一种数据处理方法、装置、电子设备及计算机可读存储介质,涉及计算机技术领域。该方法包括:利用第一哈希函数和第二哈希函数,将待存储的键值数据中的每个键编码为第一哈希值和第二哈希值;遍历待存储的键值数据中所有键的第一哈希值和第二哈希值,确定待存储的键值数据对应的完美哈希的参数信息,其中,完美哈希的参数信息包括:每个键对应的存储单元slot的索引;将待存储的键值数据,按照每个键对应的slot的索引进行存储。本申请实施例的方案解决了数据查询时磁盘的IO开销大,查询效率低的问题。

Description

数据处理方法、装置、设备及存储介质
技术领域
本申请涉及计算机技术领域,具体而言,本申请涉及一种数据处理方法、装置、电子设备及计算机可读存储介质。
背景技术
对于数据库来说一个最重要的功能是数据检索,特别是当数据量庞大复杂的情况下,如何高效的进行数据查找是当前数据库面临的主要问题。
目前绝大多数的数据存储格式都是基于有序的方式,即将数据按照某种指定的顺序排序,然后以页或者块的形式进行分组存储到存储介质(例如:HDD或SSD)中,页的大小一般和存储系统的页保持一致。在查询阶段通过范围索引的方式先定位到数据页或者块,然后再从该数据块中查找到指定的内容。此类算法的查找效率一般是 O(logN),当数据量非常庞大,索引部分无法完全被缓存时,会带更多的磁盘的IO开销,极大的降低查询效率。
发明内容
本申请实施例提供了一种数据处理的方法、装置、电子设备及计算机可读存储介质,可以解决数据查询时磁盘的IO开销大,查询效率低的问题。
根据本申请实施例的第一方面,提供了一种数据处理的方法,该方法包括:
利用第一哈希函数和第二哈希函数,将待存储的键值数据中的每个键编码为第一哈希值和第二哈希值;
遍历所述待存储的键值数据中所有键的所述第一哈希值和所述第二哈希值,确定所述待存储的键值数据对应的完美哈希的参数信息,其中,所述完美哈希的参数信息包括:每个键对应的存储单元slot的索引;
将所述待存储的键值数据,按照每个键对应的slot的索引进行存储。
根据本申请实施例的第二方面,提供了一种数据处理的装置,该装置包括:
处理单元,用于利用第一哈希函数和第二哈希函数,将待存储的键值数据中的每个键编码为第一哈希值和第二哈希值;以及,遍历所述待存储的键值数据中所有键的所述第一哈希值和所述第二哈希值,确定所述待存储的键值数据对应的完美哈希的参数信息,其中,所述完美哈希的参数信息包括:每个键对应的存储单元slot的索引;
存储单元,用于将所述待存储的键值数据,按照每个键对应的slot的索引进行存储。
根据本申请实施例的第三方面,提供了一种电子设备,该电子设备包括:存储器、处理器及存储在存储器上的计算机程序,所述处理器执行所述计算机程序以实现上述第一方面所述数据处理方法。
根据本申请实施例的第四方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面所述的数据处理方法的步骤。
本申请实施例提供的技术方案带来的有益效果是:
通过遍历待存储的键值数据中所有键的第一哈希值和第二哈希值,确定每个键对应的slot的索引,并将待存储的键值数据,按照每个键对应的slot的索引进行存储,可以减小数据索引的大小,并在进行数据查询时降低磁盘的IO开销,提升查询效率,从而解决了数据查询时磁盘的IO开销大,查询效率低的问题。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。
图1为相关技术中LSM –Tree的结构示意图;
图2为实现本申请实施例提供的数据处理方法的LSM –Tree的结构示意图;
图3为本申请实施例提供的一种基于完美哈希算法的数据存储格式表的示意图;
图4为本申请实施例提供的一种数据处理方法的流程示意图;
图5为本申请实施例提供的一种数据存储格式的另一示意图;
图6为本申请实施例提供的一种数据处理装置的结构示意图;
图7为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面结合本申请中的附图描述本申请的实施例。应理解,下面结合附图所阐述的实施方式,是用于解释本申请实施例的技术方案的示例性描述,对本申请实施例的技术方案不构成限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请实施例所使用的术语“包括”以及“包含”是指相应特征可以实现为所呈现的特征、信息、数据、步骤、操作、元件和/或组件,但不排除实现为本技术领域所支持其他特征、信息、数据、步骤、操作、元件、组件和/或它们的组合等。应该理解,当我们称一个元件被“连接”或“耦接”到另一元件时,该一个元件可以直接连接或耦接到另一元件,也可以指该一个元件和另一元件通过中间元件建立连接关系。此外,这里使用的“连接”或 “耦接”可以包括无线连接或无线耦接。这里使用的术语“和/或”指示该术语所限定的项目中的至少一个,例如“A和/或B”指示实现为“A”,或者实现为“A”,或者实现为“A和B”。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
首先对本申请涉及的几个名词进行介绍和解释:
完美哈希算法用于将给定的K 个 key 集合映射为不同的N个值(hash(key_i) 不等于 hash(key_j)_{i 不等于j},即哈希没有冲突。
日志结构合并树(Log-Structured-Merge-Tree,简称LSM-tree)是一种用于键值存储的数据结构,它并不像B+树、红黑树一样具有严格的树状数据结构,而是横跨内存和磁盘的多层存储结构,自上而下存储的数据越来越多。LSM-Tree的特点是利用顺序写来提高写性能,因为分层的设计会稍微降低读性能,但是通过牺牲小部分读性能换来高性能写,使得LSM-Tree成为非常流行的存储结构。
图1为相关技术中LSM –Tree的结构示意图。如图1所示的LSM-Tree包括三个重要组成部分: MemTable、Immutable MemTable和SSTable。其中,
MemTable:(内存表),是LSM-Tree在内存中的数据结构,用于保存最新的数据,按照Key有序地组织这些数据。
MemTable 达到一定大小后,会转化为Immutable MemTable。Immutable MemTable是将MemTable转为磁盘上的SSTable的一种中间状态。转化过程中写操作由新的MemTable处理,过程中不阻塞数据更新操作。
SSTable:(有序字符串表,Sorted String Table),是LSM -Tree在磁盘中的数据结构。SSTable是一种存储键值对的格式,按照键(key)进行排序,是一个有序的结构,也可以称为排序字符串表。一个SSTable将由多个被称为分段(Segment)的排序文件组成,这些段一旦写入磁盘就不可变。每个Segment包含一系列可配置大小的Block块。这些Block的index 会被存储在SSTable的尾部,用于帮助快速查找特定的Block。当一个SSTable被打开时,index表会被加载到内存,然后根据key在内存index 中进行一个二分查找,查到该key对应的磁盘的offset后,去磁盘把响应的块数据读取出来。
刷入(Flush)操作:当LSM-tree中的内存被写满后,需将内存中的数据写入到磁盘,组织为SSTable的结构,这一过程称为刷入操作。
压缩(Compaction)操作:为了保持LSM-tree的树形结构,当Li层的SSTable文件数量超过预设值时,需要将Li层的SSTable和Li+1层的具有重叠的键值的SSTable进行合并排序同时丢弃一些陈旧的键值,这一过程称为压缩操作。
对于数据库来说一个最重要的功能是数据检索,特别是当数据量庞大复杂的情况下,如何高效的进行数据查找是当前数据库面临的主要问题。
相关方案包括以下几种:
方案一:SSTable数据格式上构建哈希索引。SST 是一种顺序存放数据的表格式,广泛的应用于各类键值类型的数据库中。构建表时,将数据按照一定块的大小(通常是4K)进行划分,块内的数据按照key 的顺序排放,然后再将每个块的最大 key 以及对应的块的文件位置信息作为新的 key-value 对,按序存储在元数据索引块中。查找时,先读出索引块的信息,根据 key 以二分查找的方式索引到具体的块以及文件位置,然后将该块的内容读出后,再通过二分查找的方式定位到对应的数据。
该方案通过在SSTable的基础上在每个数据块中再增加一层哈希索引,以此提升点查的性能。当构建数据块时,将每个 key 进行哈希计算,然后将其位置信息记录到哈希表中,如果存在哈希冲突,即该位置已经有存在的key,则标记该位置为不可用状态。当查询时,首先查询哈希索引,如果该位置有效则可以直接定位该 key 所在的位置,读取数据即可。如果该位置无效,则会退到二分查找算法。
方案二:Cuckoo Hash 表格式。Cuckoo Hash算法是一个有效解决哈希冲突的哈希算法,其查询时间复杂度理论上是常数级别,具有良好的算法特性。利用 Cuckoo Hash 构建表时,首先选择 n 组哈希算法即 n 个哈希表,当插入 key 时,从第一个哈希函数开始计算,如果该位置未被占用,则插入成功。如果该位置已经存在数据,则将该位置的数据剔除后插入新的数据,被剔除的数据再重新插入到下一个哈希表,如果最后一个哈希表依然有被踢出的数据则从第一个哈希继续开始计算,以此类推。如果尝试的次数过大,则可能需要重新选择哈希函数或者扩大哈希表的大小。当查询数据时,类似插入流程,从第一个哈希表开始查找,如果不匹配则继续查找下一个哈希表,直到最后一个哈希表为止。
方案三:哈希+树的全量内存索引方案。这种方案即将所有数据的在存储的位置信息全部构建到内存索引中。
构建数据索引时,首先将数据利用哈希算法映射到不同的分区,防止数据倾斜。同一个数据分区的数据利用树的结构,例如红黑树、B-Tree 等构建数据索引。数据索引信息包含了数据的元数据信息,包括数据的存储位置、时间戳等信息,元数据信息一般选择固定大小空间来存储。查询数据时首先根据通过哈希表定位分区,然后再从树形的索引结构中获取数据的存储位置,直接通过从文件/磁盘的特定位置取出数据。
现有技术为了能够实现高效的查询性能,大部分都是通过优化索引的方式提升数据的检索效率,其中,哈希算法是大多数优化方案的优先选择,因为其具有良好的算法特性,但是现有实现方案中利用哈希算法还存在非常多的不足之处。具体的:
上述方案一,在范围的索引基础上通过增加哈希索引的方式提升索引的查找效率,但当哈希冲突时,直接回退到二分查找算法,二分查找等类似的算法的缺点之一是时间复杂度比相比常数级会更高为O(logN),第二点是在实际的算法执行过程中,CPU的缓存缺失会很高,带来一定的 CPU开销。这类方案未能很好的解决哈希冲突带来的影响,这对于实时性要求比较高的场景来说存在一定的挑战。
上述方案二,采取了算法特性良好的Cuckoo Hash算法来解决哈希冲突,该算法理论的查询和插入的时间复杂度为常数级别,也即哈希表的个数。如果哈希表的个数选择太少那么在构建过程中可能存在较多的冲突和重新哈希计算,太多的哈希表意味着更多的查询的 IO 次数。在实际的数据库应用中,一些数据库为了减少 IO 开销,将整个数据表加载到内存中,从而进行数据查找,这也意味着更大的内存消耗。
而且,上述方案一和方案二在实际的应用过程中,无论S 索引还是数据块都是需要先被加载到内存,然后再根据数据索引信息定位到数据,此类算法仅仅是加快了内存的数据索引速度,磁盘的IO并未明显减少。
上述方案三则只需要将数据的索引加载到内存,然后根据内存信息定位到数据的具体位置,数据并不需要提前加载到内存中。但是,上述方案三中的内存方案是根据哈希+树的方式构建,所以查询的复杂度也为O(logn),在实际应用过程中,单个key的索引信息达到了几十byte左右,内存开销巨大。
本申请提供的数据处理方法、装置、电子设备、计算机可读存储介质以及计算机程序产品,旨在解决现有技术的如上技术问题。
下面通过对几个示例性实施方式的描述,对本申请实施例的技术方案以及本申请的技术方案产生的技术效果进行说明。需要指出的是,下述实施方式之间可以相互参考、借鉴或结合,对于不同实施方式中相同的术语、相似的特征以及相似的实施步骤等,不再重复描述。
图2为实现本申请实施例提供的数据处理方法的LSM –Tree的结构示意图。如图2所示的LSM -Tree包括:MemTable、Immutable MemTable和PH Table (Perfect HashTable)。其中,
MemTable:(内存表),是 LSM-Tree 在内存中的数据结构,用于保存最新的数据,按照 key对应的slot的索引顺序有序地组织这些数据。
MemTable 达到一定大小后,会转化为 Immutable MemTable。ImmutableMemTable 是将 MemTable 转为磁盘上的 PHTable 的一种中间状态。
PHTable:(完美哈希表,Sorted String Table),是 LSM -Tree在磁盘中的数据结构。PHTable是基于完美哈希实现的一种数据存储格式表,按照键(key)对应的slot的索引进行排序,是一个有序的结构。如图3所示,一个PHTable可以由多个Segment组成,每个Segment包含一系列block块,每个block块中包含一系列slot,每个slot用于存储一个键值对。
本申请实施例中基于LSM-Tree构建成Key-Value数据库,提供高性能的读写以及更低成本的优势。
利用LSM-Tree结构,数据库将所有写入的数据首先放入以内存为存储介质的数据结构中,并记录写入数据日志(WAL),用于从异常状态中恢复数据,保证高可靠性。当内存中缓存数据达到一定量时,将其以完美哈希表的格式刷写到持久化存储介质中,首先置于 L0层中。当L0层的数据达到一定量时,将其与更下层的数据进行合并操作,生成更新的数据表文件,依次类推。当执行查询操作时,首先从内存中数据开始查找,如果待查找 key 不存在时,则依次从L0到最后一层的数据表中进行查找,直到查找成功或者遍历结束为止。
本申请提出了一个基于完美哈希算法的数据存储格式表,极大的减小了数据索引大小,并保证数据检索时最多 1 次的磁盘 IO 开销,在海量数据的情况下依然可以提供更低和更稳定的查询时延。
下面对本申请提出的一种数据处理方法中涉及的数据存储方案、数据更新(合并)方案,以及数据读取方案,进行详细的描述。
首先,针对数据存储方案的实现过程进行详细的描述。
本申请实施例中提供了一种数据处理方法,如图4所示,该方法包括:
S11、利用第一哈希函数和第二哈希函数,将待存储的键值数据中的每个键编码为第一哈希值和第二哈希值;
S12、遍历所述待存储的键值数据中所有键的所述第一哈希值和所述第二哈希值,确定所述待存储的键值数据对应的完美哈希的参数信息,其中,所述完美哈希的参数信息包括:每个键对应的存储单元slot的索引;
S13、将所述待存储的键值数据,按照每个键对应的slot的索引进行存储。
具体的,在该实施例中,步骤S11中,可以利用两个哈希函数(即:第一哈希函数和第二哈希函数)将待存储的键值数据中的每个键(key)的字符串映射为2个32bit的整型数字,记为hash1(第一哈希值)和hash2(第二哈希值)。其中,两个哈希函数可以采用Djb2Hash和 CityHash。本申请实施例中,选择两个独立的哈希函数的目的是为了增大哈希散列的分散度,便于后续的计算。
在该实施例中,通过遍历待存储的键值数据中所有键的第一哈希值和第二哈希值,确定每个键对应的slot的索引,并将待存储的键值数据,按照每个键对应的slot的索引进行存储,可以减小数据索引的大小,并在进行数据查询时降低磁盘的IO开销,提升查询效率。
在一些实施例中,S12可以包括:
S121、将待存储的键值数据中的所有键划分到多个哈希桶中;
S122、将所述多个哈希桶按照每个桶中的键的个数从大到小进行排序;
S123、按照所述多个哈希桶的排序遍历所述多个哈希桶,确定每个哈希桶对应的所述完美哈希的参数信息。
具体的,在该实施例中,首先,需要确定哈希桶 bucket的装载度c,即每个 bucket里面期望的 key 的个数,如果选取的c 越大,则bucket 数量越少,计算量(重试次数)会更多,哈希函数的体积(参数量)占用更少;如果c 越小,bucket 数量越多,计算量会相对较少,哈希函数的体积会更多。因此,根据实际情况来看,一般选择 c = 5,能够兼顾计算量和内存消耗。那么,期望的bucket 数量m = N/c。
根据完美哈希算法,将所有的 key 划分为两个集合S1和S2,其中 S1中的数据占所有数据的 60%,对应的 bucket 的数量为 p1= 0.3*m,S2对应的bucket 的数量为剩余的部分m- p1。根据下述公式1计算每个 key所属的bucket:
根据每个 bucket 所占 key 的个数从大到小进行排序。
从排序第一的bucket开始,计算完美哈希的参数信息。
在一些实施例中,所述完美哈希的参数信息还包括:每个哈希桶对应的完美哈希的第一参数和第二参数,则S122具体可以包括:确定当前哈希桶对应的完美哈希的第一参数和第二参数,以及当前哈希桶中每个键对应的slot的索引;其中,所述当前哈希桶对应的完美哈希的第一参数和第二参数使得当前哈希桶中每个键对应的slot未被占据。
在该实施例中,确定初始完美哈希表的大小为 n = γscale* N,其中,γscale的初始值可以选择为1.1,即哈希表的大小比数据量稍大一点,从而可以降低哈希冲突的概率,在提高一定内存空间的前提下降低计算时间。
对于当前bucketj,如果上一个bucketj-1已经计算得到了αj-1(可以对应上文中的第一参数)和βj-1(可以对应上文中的第二参数),则复用上一的bucketj-1的参数,即:αjj-1和βjj-1,并根据下述公式2计算属于bucketj中的每个keyi对应的sloti:
如果keyi对应的sloti已经被占据,则需要重新选择αj和βj进行计算,直到没有冲突或者达到最大尝试次数为止。如果当前中bucketj所有的key所对应sloti的都未被占据,则确定当前的αj和βj
如果成功的找到了所有bucket的满足条件的α和β,则确定出了完美哈希的参数信息,可以将待存储的键值数据,按照每个键对应的slot的索引进行存储。如果未能找到所有bucket的满足条件的α和β,则扩大γscalescale+step,其中,step可以选取0.05,从而扩大哈希表的大小,减小冲突概率,重复执行上述步骤S121-S123,直到确定出完美哈希的参数信息。
在一个实施例中,若所述当前哈希桶为所述多个哈希桶中排序第一的哈希桶,S122具体可以包括:
S1a、针对所述当前哈希桶中的每个键,根据该键的第一哈希值和第二哈希值,初始完美哈希表,以及随机选择的第一初始参数和第二初始参数,确定该键对应的slot的索引;
S2a、若所述当前哈希桶中每个键对应的slot未被占据,确定所述第一初始参数为当前哈希桶的第一参数,所述第二初始参数为当前哈希桶的第二参数;
S3a、若所述当前哈希桶中的第一键对应的slot已被占据,重复执行以下步骤:
S31a、重新选择第一初始参数和第二初始参数;
S32a、根据所述当前哈希桶中每个键的第一哈希值和第二哈希值,重新选择的第一初始参数和第二初始参数,以及初始完美哈希表,确定每个键对应的slot的索引;
S33a、判断每个键对应的slot是否被占据;
S34a、若每个键对应的slot未被占据,确定重新选择的第一初始参数为当前哈希桶的第一参数,重新选择的第二初始参数为当前哈希桶的第二参数。
示例性的,假设key有100个,哈希桶有5个,根据每个哈希桶中key的数量从大到小排序后为哈希桶2、哈希桶3、哈希桶1、哈希桶5、哈希桶4。
针对排序第一的哈希桶2中的每个key,根据每个key的hash1和hash2,初始完美哈希表(大小为n=110,即:将100个key映射到110个slot中的100个slot上),以及随机选择的参数α1和β1,通过上述公式2,确定每个键对应的slot的索引。如果哈希桶2中每个键对应的slot未被占据,则确定α1为哈希桶2的第一参数,β1为哈希桶2的第二参数。如果哈希桶2中有至少一个key(例如:key2)对应的slot已被占据,则需要重复执行“重新选择参数并基于公式2进行计算的过程”,直到哈希桶2中每个键对应的slot未被占据,或者,直到“重新选择参数并基于公式2进行计算的过程”重复执行了预设次数,仍未确定出哈希桶2的参数。
在另一个实施例中,若所述当前哈希桶为所述多个哈希桶中非排序第一的哈希桶,S122具体可以包括:
S1b、针对所述当前哈希桶中的每个键,根据该键的第一哈希值和第二哈希值,初始完美哈希表,以及上一哈希桶对应的第一参数和第二参数,确定该键对应的slot的索引;
S2b、若所述当前哈希桶中每个键对应的slot未被占据,确定上一哈希桶对应的第一参数为当前哈希桶的第一参数,上一哈希桶对应的第二参数为当前哈希桶的第二参数;
S3b、若所述当前哈希桶中的第二键对应的slot已被占据,重复执行以下步骤:
S31b、重新选择第一参数和第二参数;
S32b、根据所述当前哈希桶中每个键的第一哈希值和第二哈希值,重新选择的第一参数和第二参数,以及初始完美哈希表,确定每个键对应的slot的索引;
S33b、判断每个键对应的slot是否被占据;
S34b、若每个键对应的slot未被占据,确定重新选择的第一参数为当前哈希桶的第一参数,重新选择的第二参数为当前哈希桶的第二参数。
在上述实施例中,若重复执行的步骤已执行预设次数,所述当前哈希桶中仍有至少一个键对应的slot被占据,确定所述当前哈希桶对应的第一参数和第二参数未确定出来。
接上述示例,若当前哈希桶为哈希桶1,已确定出哈希桶3的参数为则α2和β2,则针对哈希桶1中的每个key,根据每个key的hash1和hash2,初始完美哈希表(大小为n=110),以及哈希桶3的参数α2和β2,通过上述公式2,确定每个键对应的slot的索引。如果哈希桶1中每个键对应的slot未被占据,则确定α2为哈希桶1的第一参数,β2为哈希桶1的第二参数。如果哈希桶1中有至少一个key(例如:key28)对应的slot已被占据,则需要重复执行“重新选择参数并基于公式2进行计算的过程”,直到哈希桶1中每个键对应的slot未被占据,或者,直到“重新选择参数并基于公式2进行计算的过程”重复执行了预设次数,仍未确定出哈希桶1的参数。
在另一些实施例中,若所述多个哈希桶中的至少一个哈希桶对应的第一参数和第二参数未确定出来,所述方法还包括:
S14(图中未示出)、重复执行以下步骤,直到确定出所述多个哈希桶中每个哈希桶对应的第一参数和第二参数:
S1c、将所述初始完美哈希表按照预设步长扩大,得到完美哈希表;
S2c、针对第一哈希桶中的每个键,根据每个键的第一哈希值和第二哈希值,获取的第一参数和第二参数以及所述完美哈希表,确定每个键对应的slot的索引;
S3c、判断每个键对应的slot是否被占据;
S4c、若每个键对应的slot未被占据,确定获取的第一参数为第一哈希桶的第一参数,获取的第二参数为第一哈希桶的第二参数;
S5c、若所述第一哈希桶中的第三键对应的slot已被占据,重复执行以下步骤:
S51c、重新获取第一参数和第二参数;
S52c、根据每个键的第一哈希值和第二哈希值,重新获取的第一参数和第二参数,以及所述完美哈希表,确定每个键对应的slot的索引;
S53c、判断每个键对应的slot是否被占据;
S54c、若每个键对应的slot未被占据,确定重新获取的第一参数为第一哈希桶的第一参数,重新获取的第二参数为第一哈希桶的第二参数。
具体的,在该实施例中,若第一哈希桶为多个哈希桶中排序第一的哈希桶,则获取的第一参数和第二参数为随机选择的第一参数和第二参数;若第一哈希桶为多个哈希桶中非排序第一的哈希桶(例如:排序第二的哈希桶),则获取的第一参数和第二参数为上一哈希桶(例如:排序第一的哈希桶)的第一参数和第二参数。
也就是说,若上述实施例中的步骤S31a-S34a,和/或,步骤S31b-S34b已经重复执行了预设次数,例如:100次,第一哈希桶中仍有一个键或者多个键对应的slot被占据,则未成功找到所有哈希桶满足的第一参数和第二参数。这种情况下,则可以通过扩大完美哈希表的方式,重新计算完美哈希的参数信息。
接上述示例,若针对哈希桶5已重复执行步骤S31b-S34b预设次数,仍未确定出对应的参数,即:将100个key映射到110个slot中的100个上时有冲突,则将初始完美哈希表(大小为n=110)扩大为完美哈希表(大小为n=115,即:将100个key映射到115个slot中的100个slot上),从哈希桶2开始至哈希桶4重新计算完美哈希的参数信息。其中,针对哈希桶2的计算过程可以参考步骤S1a-S34a,针对哈希桶3、哈希桶1、哈希桶5、哈希桶4中每个哈希桶的计算过程可以参考S1b-S34b,为了描述的简洁,在此不再赘述。
在一些实施例中,上述实施例中的步骤S13具体可以包括:
将所述待存储的键值数据,按照每个键对应的slot的索引写入至少一个存储块中,每个存储块中存储的slot的数量基于存储设备的存储单位的大小确定;
将所述至少一个存储块进行压缩后,写入所述存储设备。
在该实施例中,可以按照每个键对应的slot的索引,将每个slot的长度信息写入相应存储块的头部位置,并将每个slot中的键值数据依次写入相应的存储块中,具体可以参见图5。
需要说明的是,存储块的大小(存储的slot的数量)可以选择与磁盘或内存的页的大小保持一致。
示例性的,一个存储块中可以存储20个slot,则将100个slot按照各自的索引顺序写入20个存储块中,例如:存储块1中写入索引为1到20的slot,假设:索引为21、38、40的slot为空,则存储块2中写入索引为22到43的slot,等等。
需要说明的是,在该实施例中,slot的索引与key的顺序可能对应(例如:slot2中存储的是key2),也可能不对应(例如:slot5中存储的是key10)。
为了进一步减小数据文件的大小,可以采用文件压缩方式对每个存储块中的数据进行压缩,再写入存储设备。
在上述实施例中,还可以包括:
记录每个存储块的文件偏移位置信息,得到偏移数据;
将每个键的第一哈希值或第二哈希值的一部分确定为每个键的签名信息,得到签名数据;
其中,将所述至少一个存储块进行压缩后,写入所述存储设备,包括:
基于压缩后的所述至少一个存储块、所述偏移数据、所述签名数据、所述完美哈希的参数信息以及数据表的属性信息,生成数据表文件;
采用日志结构合并树LSM-Tree结构,将所述数据表文件写入所述存储设备。
在该实施例中,将每个存储块block写入文件的同时记录该block所在文件的偏移位置信息。还可以计算每个slot中的key的签名信息,例如:将每个key的第二哈希值的后8位作为相应key的签名信息:
所有slot中的key的签名信息形成 signature 数组(可以对应上文中的签名数据),其作用是在查询过程中用于过滤不存在的数据。因为,对于任意的key,基于公式2都可以映射到有效的slot,如果某一key与相应的slot的签名信息不匹配,则说明该key一定不存在于slot中,可以直接忽略,减少文件读开销。
当所有的 block 写入完成后,将每个block的偏移信息、signature 数组,完美哈希的参数信息以及数据表的属性信息一并写入文件的脚注数据footer中,生成数据表文件。
示例性的,该实施例中的数据表文件的具体格式可以参见图3所示的内容。其中,数据表的属性信息可以包括以下信息中的一种或多种:数据表的版本信息、数据表中key的个数、数据表中key和value的平均大小、压缩算法类型等。
需要说明的是,在该实施例中,也可以将每个key的第以哈希值的后8位或者前8位作为相应key的签名信息,本申请实施例对此不作限定。
上述数据表文件是基于静态的数据生成的,对于实时更新的场景,数据会随着时间不断的变化,新的key-value会被插入,旧的key-value会被删除或者更新,所以数据表也需要动态更新以提供新数据的查询。
因此,本申请实施例还提供了一种数据更新(或者可以称为数据合并)的方法。结合 LSM-Tree 的结构,每次写入新的数据(插入新的数据或更新旧的数据)都会首先写入内存表中,当内存表的大小达到一定阈值后,将该内存表标记为不可更新状态,重新生成新的内存表用于后续的写入。不可更新的数据表此时就变成一个静态的数据集合,将该数据集合中的数据以完美哈希表的格式写入L0层(最上层),当L0层数据达到一定阈值后,将 L0的数据与下层的数据进行合并操作,依次类推。
也就是说,若写入第一内存表中的键值数据的数量达到第二预设阈值,将所述第一内存表标记为不可更新状态,并将所述第一内存表中的键值数据,确定为所述待存储的键值数据。
传统的LSM-Tree 中存储的数据是按照key的递增方式排列的,因此文件合并操作通常采取合并排序的方式进行。然而,本申请中的数据存储是按照key对应的slot的索引递增的方式排列,所以,传统的LSM-Tree 的文件合并操作不适合本申请,因此,本申请采用下述实施例中的方案。
采用LSM-Tree结构,将所述数据表文件写入所述存储设备,包括执行以下至少一项操作:
将所述数据表文件写入LSM-Tree结构的L0层;
若Li层存储的第一数据文件达到第一预设阈值,将所述第一数据文件合并到Li+1层,其中,i取0到n,n为大于1的正整数。
在一个实施例中,将所述第一数据文件合并到Li+1层,包括:
若L i+1层未存储数据,将所述第一数据文件直接写入L i+1层;
若L i+1层已存储第二数据文件,分别将所述第一数据文件和所述第二数据文件根据键的哈希值,划分为S个数据片段,并针对属于所述第一数据文件的第j个数据片段和属于所述第二数据文件的第j个数据片段,执行以下操作:
获取两个所述第j个数据片段中所有键的第一哈希值和第二哈希值;
根据每个键的第一哈希值和第二哈希值,确定每个键对应的slot的索引;
根据每个slot中的键值数据,确定相应的操作;
其中,S为大于1的预设值,j取1到S。
在上述实施例中,根据每个slot中的键值数据,确定相应的操作,包括:
若当前slot中为空,确定不进行任何操作;
若当前slot中的键值数据为所述第一数据文件中的键值数据,或者,所述第二数据文件中的键值数据,确定执行将当前slot中的键值数据,按照当前slot的索引写入存储设备的步骤;
若当前slot中的键值数据包括:所述第一数据文件中的键值数据和所述第二数据文件中的键值数据,确定将新键值数据写入当前slot,并执行将当前slot中的新键值数据,按照当前slot的索引写入存储设备的步骤,
其中,所述新键值数据基于所述第一数据文件中的键值数据和所述第二数据文件中的键值数据得到。
具体的,在该实施例中,将新的数据文件(可以对应上文中的第一数据文件)标识为delta, 旧的数据文件(可以对应上文中的第二数据文件)标识为base。为了减少内存占用以及提升并发度,会将数据文件按照key的hash值划分为 S 个片段(segment):
这样每个segment中的数据都是互相独立的,从而可以同时并行处理。
对于delta数据中的第j 个segment和 base 数据中的第j个segment中的数据,执行以下操作,直到遍历S个segment:
1. 获取delta 数据中的第j 个segment以及 base 数据中的第j 个segment中的所有 key,并计算每个key的 hash1 和hash2。
为了减少计算量,hash1 和hash2 也可以在生成文件阶段持久化到数据文件中,直接读取即可,减少计算开销。
2. 对于获取到所有key,按照上述实施例中实现数据存储的过程计算得到slot的索引,将属于同一个slot中的delta数据和base数据聚合到一起。
对于每一个slot中,具体分为以下情况:
A. slot为空;
B. slot中仅包含delta数据;
C. slot中仅包含base数据;
D. slot中同时包括delta数据和base数据。
对于情况A,可以直接忽略。对于情况B(数据是新加入)或者情况C(数据未被修改),无需进行合并操作数据可以直接写入新的文件。对于情况D(更新旧数据),需要进行更新操作,将最终更新后的数据存储到相应的slot中,再参照图3和图5所示的内容和相关的描述组织数据并写入新的数据文件中,完成数据文件的合并过程。
在该实施例中,具体的更新操作可以是基于用户的实际需求进行的定制化操作。例如:
功能一:数据直接被覆盖写,此时D中的base数据被delta数据覆盖,新文件中该slot中的数据为delta数据。
功能二: base数据由delta数据累加,如果base数据为一个数值,delta为累加操作,新文件中slot中的数据为base数据+delta数据的结果。示例性的,针对银行存取款业务场景,base数据为“存入—100万”, delta数据为“取出—10万”,则更新后的数据为“存款—90万”。
本申请实施例中,通过使用完美哈希算法作为数据索引的数据表,能够提供最多仅一次的 IO 开销的查询方式。
另外,数据表的合并方法,利用完美哈希的特性,通过分组将属于同一个位置的新数据和旧数据进行合并处理,根据新数据的存在与否优化合并流程。
使用完美哈希算法的数据索引表结合 LSM-Tree 形成一个完整的 key-value DB数据库。
另外,本申请实施例还提供了一种数据处理方法,用于实现数据读取(也可以称为数据查询)。在上述实施例的基础上,上述方法还可以包括:
S15(图中未示出)、响应于接收到的读取指令,从所述存储设备的数据表文件中读取相应的键值数据,其中,所述读取指令用于指示读取特定键的键值数据。
在该实施例中,读取特定键的键值数据的过程可以包括:
若在内存表中查到所述特定键,则读取所述特定键对应的键值数据;
若在内存表中未查到,则遍历L0层的数据表文件查找所述特定键;
若未在Li层的数据表文件中查到,则在Li+1层的特定数据表文件中查找,直到查找到Ln层,或者,查到所述特定键并读取所述特定键对应的键值数据,其中,所述特定数据表文件为包含所述特定键的键值范围对应的数据表文件。
其中,从任一数据表文件中读取所述特定键的键值数据的过程包括:
读取该数据表文件中的偏移数据、签名数据和完美哈希的参数信息,其中,所述完美哈希的参数信息包括该数据表文件中所有键对应的完美哈希的第一参数和第二参数;
确定所述特定键的第一哈希值和第二哈希值;
基于所述特定键的第一哈希值和第二哈希值,以及完美哈希的参数信息,确定所述特定键对应的slot的索引;
基于所述特定键的第一哈希值或第二哈希值,确定所述特定键对应的签名信息;
基于所述特定键对应的签名信息在所述签名数据中查找,若未查找到匹配的签名信息,确定该数据表文件中不存在所述特定键,并返回提示键值数据不存在的信息;
若查找到匹配的签名信息,根据slot的索引和所述偏移数据,读取相应的存储块中的slot中的键值数据;
若所述特定键与读取的键值数据中的键相同,则返回读取的键值数据,否则,返回提示键值数据不存在的信息。
具体的,根据 LSM-Tree 的结构特征以及上述实施例中的数据合并流程可知,越处于上层的数据越新,所以查询流程也从上到下依次进行:
首先从内存表中进行查找,因为内存表一般是用于动态更新,所以一般选择SkipList、Vector、HashTable等数据结构。对于指定key(即:要查询的key),根据其各自的查找算法进行搜索即可。如果搜索成功,返回结果即可。 否则需要从持久化的数据表文件中进行查找。
从数据表文件查找时从上层到下层依次查找,如果在L_i 层并未找到匹配的key,则继续在下一层L_(i+1)中 查找,直到匹配成功或者达到最后一层。至此,完成整个数据的查找过程。
首先从 L0 层开始查找,因为 L0 中的数据文件之间并不是有序排列,所以需要从新到旧遍历L0层的所有数据文件。对于非 L0 层数据,数据表文件之间都是以 key 的单调递增顺序排列,选择包含指定key范围的数据文件查找即可。
在任一数据表文件中查找指定key时,从该数据文件的footer中加载索引信息到内存中,包括:完美哈希索引的参数信息、block的偏移数据和 signature数据。然后,计算指定key 的 hash_1 和hash_2,以及通过上述公式2计算指定key对应的 slot索引,通过上述公式3计算对应的签名信息,比较 slot对应的签名信息,如果不匹配,则确定该指定key的值一定不存在于当前的数据表中。如果匹配成功,根据slot对应的block位置,从数据表文件中读取出block并解析出对应slot的内容,如果解析得到的key与指定key相等,则查找成功,否则返回不存在。至此,完成数据文件的查找。
本申请提供的方案具有高效的点查性能,一次查询时间最多仅进行一次磁盘IO操作,所以数据的查询时延是可预测的。对于要求查询时延低并且稳定的系统来说,有极大的收益。相比较目前采取范围索引的解决方案来说,查询复杂度是O(logn),查询时延较高,同时无法提供可预测的查询时延,针对不同的key查询时延方差可能巨大。
虽然有一些方案通过将数据的存储位置索引全量建立在内存中,从理论上来说也可以提供最多进行一次磁盘IO查询的开销,但是,这种方案相比于本申请提供的方案,其内存开销巨大。由于本申请提供的方案中,内存索引仅保留完美哈希函数的参数信息,可以做到对于每个key来说仅占据2 byte左右的大小,相同的内存环境下相比于现有方案可以存储更多的数据量。
本申请实施例提供了一种数据处理装置,如图6所示,该数据处理装置1000可以包括:处理单元1001和存储单元1002,其中,
处理单元1001用于利用第一哈希函数和第二哈希函数,将待存储的键值数据中的每个键编码为第一哈希值和第二哈希值;以及,遍历所述待存储的键值数据中所有键的所述第一哈希值和所述第二哈希值,确定所述待存储的键值数据对应的完美哈希的参数信息,其中,所述完美哈希的参数信息包括:每个键对应的存储单元slot的索引;
存储单元1002用于将所述待存储的键值数据,按照每个键对应的slot的索引进行存储。
进一步地,处理单元1001在确定所述待存储的键值数据对应的完美哈希的参数信息时,具体用于:
将待存储的键值数据中的所有键划分到多个哈希桶中;
将所述多个哈希桶按照每个桶中的键的个数从大到小进行排序;
按照所述多个哈希桶的排序遍历所述多个哈希桶,确定每个哈希桶对应的所述完美哈希的参数信息。
进一步地,所述完美哈希的参数信息还包括:每个哈希桶对应的完美哈希的第一参数和第二参数;
处理单元1001在确定每个哈希桶对应的所述完美哈希的参数信息时,具体用于:确定当前哈希桶对应的完美哈希的第一参数和第二参数,以及当前哈希桶中每个键对应的slot的索引;
其中,所述当前哈希桶对应的完美哈希的第一参数和第二参数使得当前哈希桶中每个键对应的slot未被占据。
进一步地,若所述当前哈希桶为所述多个哈希桶中排序第一的哈希桶,处理单元1001在确定当前哈希桶对应的所述完美哈希的参数信息时,具体用于:
针对所述当前哈希桶中的每个键,根据该键的第一哈希值和第二哈希值,初始完美哈希表,以及随机选择的第一初始参数和第二初始参数,确定该键对应的slot的索引;
若所述当前哈希桶中每个键对应的slot未被占据,确定所述第一初始参数为当前哈希桶的第一参数,所述第二初始参数为当前哈希桶的第二参数;
若所述当前哈希桶中的第一键对应的slot已被占据,重复执行以下步骤:
重新选择第一初始参数和第二初始参数;
根据所述当前哈希桶中每个键的第一哈希值和第二哈希值,重新选择的第一初始参数和第二初始参数,以及初始完美哈希表,确定每个键对应的slot的索引;
判断每个键对应的slot是否被占据;
若每个键对应的slot未被占据,确定重新选择的第一初始参数为当前哈希桶的第一参数,重新选择的第二初始参数为当前哈希桶的第二参数。
进一步地,若所述当前哈希桶为所述多个哈希桶中排序非第一的哈希桶,处理单元1001在确定当前哈希桶对应的所述完美哈希的参数信息时,具体用于:
针对所述当前哈希桶中的每个键,根据该键的第一哈希值和第二哈希值,初始完美哈希表,以及上一哈希桶对应的第一参数和第二参数,确定该键对应的slot的索引;
若所述当前哈希桶中每个键对应的slot未被占据,确定上一哈希桶对应的第一参数为当前哈希桶的第一参数,上一哈希桶对应的第二参数为当前哈希桶的第二参数;
若所述当前哈希桶中的第二键对应的slot已被占据,重复执行以下步骤:
重新选择第一参数和第二参数;
根据所述当前哈希桶中每个键的第一哈希值和第二哈希值,重新选择的第一参数和第二参数,以及初始完美哈希表,确定每个键对应的slot的索引;
判断每个键对应的slot是否被占据;
若每个键对应的slot未被占据,确定重新选择的第一参数为当前哈希桶的第一参数,重新选择的第二参数为当前哈希桶的第二参数。
进一步地,若重复执行的步骤已执行预设次数,所述当前哈希桶中仍有至少一个键对应的slot被占据,确定所述当前哈希桶对应的第一参数和第二参数未确定出来。
进一步地,若所述多个哈希桶中的至少一个哈希桶对应的第一参数和第二参数未确定出来,处理单元1001还用于:
重复执行以下步骤,直到确定出所述多个哈希桶中每个哈希桶对应的第一参数和第二参数:
将所述初始完美哈希表按照预设步长扩大,得到完美哈希表;
针对第一哈希桶中的每个键,根据每个键的第一哈希值和第二哈希值,获取的第一参数和第二参数以及所述完美哈希表,确定每个键对应的slot的索引;
判断每个键对应的slot是否被占据;
若每个键对应的slot未被占据,确定获取的第一参数为第一哈希桶的第一参数,获取的第二参数为第一哈希桶的第二参数;
若所述第一哈希桶中的第三键对应的slot已被占据,重复执行以下步骤:
重新获取第一参数和第二参数;
根据每个键的第一哈希值和第二哈希值,重新获取的第一参数和第二参数,以及所述完美哈希表,确定每个键对应的slot的索引;
判断每个键对应的slot是否被占据;
若每个键对应的slot未被占据,确定重新获取的第一参数为第一哈希桶的第一参数,重新获取的第二参数为第一哈希桶的第二参数。
进一步地,存储单元1002具体用于:将所述待存储的键值数据,按照每个键对应的slot的索引写入至少一个存储块中,每个存储块中存储的slot的数量基于存储设备的存储单位的大小确定;将所述至少一个存储块进行压缩后,写入所述存储设备。
进一步地,存储单元1002具体用于:按照每个键对应的slot的索引,将每个slot的长度信息写入相应存储块的头部位置,并将每个slot中的键值数据依次写入相应的存储块中。
进一步地,处理单元1001还用于:记录每个存储块的文件偏移位置信息,得到偏移数据;将每个键的第一哈希值或第二哈希值的一部分确定为每个键的签名信息,得到签名数据;
存储单元1002具体用于:基于压缩后的所述至少一个存储块、所述偏移数据、所述签名数据、所述完美哈希的参数信息以及数据表的属性信息,生成数据表文件;采用日志结构合并树LSM-Tree结构,将所述数据表文件写入所述存储设备。
进一步地,存储单元1002在采用LSM-Tree结构,将所述数据表文件写入所述存储设备时,具体用于:
将所述数据表文件写入LSM-Tree结构的L0层;
若Li层存储的第一数据文件达到第一预设阈值,将所述第一数据文件合并到Li+1层,其中,i取0到n,n为大于1的正整数。
进一步地,所述将所述第一数据文件合并到Li+1层,包括:
若L i+1层未存储数据,将所述第一数据文件直接写入L i+1层;
若L i+1层已存储第二数据文件,分别将所述第一数据文件和所述第二数据文件根据键的哈希值,划分为S个数据片段,并针对属于所述第一数据文件的第j个数据片段和属于所述第二数据文件的第j个数据片段,执行以下操作:
获取两个所述第j个数据片段中所有键的第一哈希值和第二哈希值;
根据每个键的第一哈希值和第二哈希值,确定每个键对应的slot的索引;
根据每个slot中的键值数据,确定相应的操作;
其中,S为大于1的预设值,j取1到S。
进一步地,所述根据每个slot中的键值数据,确定相应的操作,包括:
若当前slot中为空,确定不进行任何操作;
若当前slot中的键值数据为所述第一数据文件中的键值数据,或者,所述第二数据文件中的键值数据,确定执行将当前slot中的键值数据,按照当前slot的索引写入存储设备的步骤;
若当前slot中的键值数据包括:所述第一数据文件中的键值数据和所述第二数据文件中的键值数据,确定将新键值数据写入当前slot,并执行将当前slot中的新键值数据,按照当前slot的索引写入存储设备的步骤,
其中,所述新键值数据基于所述第一数据文件中的键值数据和所述第二数据文件中的键值数据得到。
进一步地,处理单元1001还用于:若写入第一内存表中的键值数据的数量达到第二预设阈值,将所述第一内存表标记为不可更新状态,并将所述第一内存表中的键值数据,确定为所述待存储的键值数据。
进一步地,还包括:读取单元1003,用于响应于接收到的读取指令,从所述存储设备的数据表文件中读取相应的键值数据,其中,所述读取指令用于指示读取特定键的键值数据。
进一步地,读取单元1003具体用于:
若在内存表中查到所述特定键,则读取所述特定键对应的键值数据;
若在内存表中未查到,则遍历L0层的数据表文件查找所述特定键;
若未在Li层的数据表文件中查到,则在Li+1层的特定数据表文件中查找,直到查找到Ln层,或者,查到所述特定键并读取所述特定键对应的键值数据,其中,所述特定数据表文件为包含所述特定键的键值范围对应的数据表文件。
进一步地,读取单元1003从任一数据表文件中读取所述特定键的键值数据时,具体用于:
读取该数据表文件中的偏移数据、签名数据和完美哈希的参数信息,其中,所述完美哈希的参数信息包括该数据表文件中所有键对应的完美哈希的第一参数和第二参数;
确定所述特定键的第一哈希值和第二哈希值;
基于所述特定键的第一哈希值和第二哈希值,以及完美哈希的参数信息,确定所述特定键对应的slot的索引;
基于所述特定键的第一哈希值或第二哈希值,确定所述特定键对应的签名信息;
基于所述特定键对应的签名信息在所述签名数据中查找,若未查找到匹配的签名信息,确定该数据表文件中不存在所述特定键,并返回提示键值数据不存在的信息;
若查找到匹配的签名信息,根据slot的索引和所述偏移数据,读取相应的存储块中的slot中的键值数据;
若所述特定键与读取的键值数据中的键相同,则返回读取的键值数据,否则,返回提示键值数据不存在的信息。
本申请实施例的装置可执行本申请实施例所提供的方法,其实现原理相类似,本申请各实施例的装置中的各模块所执行的动作是与本申请各实施例的方法中的步骤相对应的,对于装置的各模块的详细功能描述具体可以参见前文中所示的对应方法中的描述,此处不再赘述。
本申请实施例中提供了一种电子设备,包括存储器、处理器及存储在存储器上的计算机程序,该处理器执行上述计算机程序以实现数据处理方法的步骤,与现有技术相比可实现:通过遍历待存储的键值数据中所有键的第一哈希值和第二哈希值,确定每个键对应的slot的索引,并将待存储的键值数据,按照每个键对应的slot的索引进行存储,可以减小数据索引的大小,并在进行数据查询时降低磁盘的IO开销,提升查询效率,从而解决了数据查询时磁盘的IO开销大,查询效率低的问题。
在一个可选实施例中提供了一种电子设备,如图7所示,图7所示的电子设备4000包括:处理器4001和存储器4003。其中,处理器4001和存储器4003相连,如通过总线4002相连。可选地,电子设备4000还可以包括收发器4004,收发器4004可以用于该电子设备与其他电子设备之间的数据交互,如数据的发送和/或数据的接收等。需要说明的是,实际应用中收发器4004不限于一个,该电子设备4000的结构并不构成对本申请实施例的限定。
处理器4001可以是CPU(Central Processing Unit,中央处理器),通用处理器,DSP(Digital Signal Processor,数据信号处理器),ASIC(Application SpecificIntegrated Circuit,专用集成电路),FPGA(Field Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器4001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
总线4002可包括一通路,在上述组件之间传送信息。总线4002可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(ExtendedIndustry Standard Architecture,扩展工业标准结构)总线等。总线4002可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器4003可以是ROM(Read Only Memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,RAM(Random Access Memory,随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM(Electrically ErasableProgrammable Read Only Memory,电可擦可编程只读存储器)、CD-ROM(Compact DiscRead Only Memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质、其他磁存储设备、或者能够用于携带或存储计算机程序并能够由计算机读取的任何其他介质,在此不做限定。
存储器4003用于存储执行本申请实施例的计算机程序,并由处理器4001来控制执行。处理器4001用于执行存储器4003中存储的计算机程序,以实现前述方法实施例所示的步骤。
本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可实现前述方法实施例的步骤及相应内容。
本申请实施例还提供了一种计算机程序产品,包括计算机程序,计算机程序被处理器执行时可实现前述方法实施例的步骤及相应内容。
应该理解的是,虽然本申请实施例的流程图中通过箭头指示各个操作步骤,但是这些步骤的实施顺序并不受限于箭头所指示的顺序。除非本文中有明确的说明,否则在本申请实施例的一些实施场景中,各流程图中的实施步骤可以按照需求以其他的顺序执行。此外,各流程图中的部分或全部步骤基于实际的实施场景,可以包括多个子步骤或者多个阶段。这些子步骤或者阶段中的部分或全部可以在同一时刻被执行,这些子步骤或者阶段中的每个子步骤或者阶段也可以分别在不同的时刻被执行。在执行时刻不同的场景下,这些子步骤或者阶段的执行顺序可以根据需求灵活配置,本申请实施例对此不限制。
以上所述仅是本申请部分实施场景的可选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请的方案技术构思的前提下,采用基于本申请技术思想的其他类似实施手段,同样属于本申请实施例的保护范畴。

Claims (20)

1.一种数据处理方法,其特征在于,包括:
利用第一哈希函数和第二哈希函数,将待存储的键值数据中的每个键编码为第一哈希值和第二哈希值;
遍历所述待存储的键值数据中所有键的所述第一哈希值和所述第二哈希值,确定所述待存储的键值数据对应的完美哈希的参数信息,其中,所述完美哈希的参数信息包括:每个键对应的存储单元slot的索引;
将所述待存储的键值数据,按照每个键对应的slot的索引进行存储。
2.根据权利要求1所述的方法,其特征在于,所述确定所述待存储的键值数据对应的完美哈希的参数信息,包括:
将待存储的键值数据中的所有键划分到多个哈希桶中;
将所述多个哈希桶按照每个桶中的键的个数从大到小进行排序;
按照所述多个哈希桶的排序遍历所述多个哈希桶,确定每个哈希桶对应的所述完美哈希的参数信息。
3.根据权利要求2所述的方法,其特征在于,所述完美哈希的参数信息还包括:每个哈希桶对应的完美哈希的第一参数和第二参数;
所述确定每个哈希桶对应的所述完美哈希的参数信息,包括:
确定当前哈希桶对应的完美哈希的第一参数和第二参数,以及当前哈希桶中每个键对应的slot的索引;
其中,所述当前哈希桶对应的完美哈希的第一参数和第二参数使得当前哈希桶中每个键对应的slot未被占据。
4.根据权利要求3所述的方法,其特征在于,若所述当前哈希桶为所述多个哈希桶中排序第一的哈希桶,确定当前哈希桶对应的所述完美哈希的参数信息,包括:
针对所述当前哈希桶中的每个键,根据该键的第一哈希值和第二哈希值,初始完美哈希表,以及随机选择的第一初始参数和第二初始参数,确定该键对应的slot的索引;
若所述当前哈希桶中每个键对应的slot未被占据,确定所述第一初始参数为当前哈希桶的第一参数,所述第二初始参数为当前哈希桶的第二参数;
若所述当前哈希桶中的第一键对应的slot已被占据,重复执行以下步骤:
重新选择第一初始参数和第二初始参数;
根据所述当前哈希桶中每个键的第一哈希值和第二哈希值,重新选择的第一初始参数和第二初始参数,以及初始完美哈希表,确定每个键对应的slot的索引;
判断每个键对应的slot是否被占据;
若每个键对应的slot未被占据,确定重新选择的第一初始参数为当前哈希桶的第一参数,重新选择的第二初始参数为当前哈希桶的第二参数。
5.根据权利要求3所述的方法,其特征在于,若所述当前哈希桶为所述多个哈希桶中非排序第一的哈希桶,确定当前哈希桶对应的所述完美哈希的参数信息,包括:
针对所述当前哈希桶中的每个键,根据该键的第一哈希值和第二哈希值,初始完美哈希表,以及上一哈希桶对应的第一参数和第二参数,确定该键对应的slot的索引;
若所述当前哈希桶中每个键对应的slot未被占据,确定上一哈希桶对应的第一参数为当前哈希桶的第一参数,上一哈希桶对应的第二参数为当前哈希桶的第二参数;
若所述当前哈希桶中的第二键对应的slot已被占据,重复执行以下步骤:
重新选择第一参数和第二参数;
根据所述当前哈希桶中每个键的第一哈希值和第二哈希值,重新选择的第一参数和第二参数,以及初始完美哈希表,确定每个键对应的slot的索引;
判断每个键对应的slot是否被占据;
若每个键对应的slot未被占据,确定重新选择的第一参数为当前哈希桶的第一参数,重新选择的第二参数为当前哈希桶的第二参数。
6.根据权利要求4或5所述的方法,其特征在于,若重复执行的步骤已执行预设次数,所述当前哈希桶中仍有至少一个键对应的slot被占据,确定所述当前哈希桶对应的第一参数和第二参数未确定出来。
7.根据权利要求6所述的方法,其特征在于,若所述多个哈希桶中的至少一个哈希桶对应的第一参数和第二参数未确定出来,所述方法还包括:
重复执行以下步骤,直到确定出所述多个哈希桶中每个哈希桶对应的第一参数和第二参数:
将所述初始完美哈希表按照预设步长扩大,得到完美哈希表;
针对第一哈希桶中的每个键,根据每个键的第一哈希值和第二哈希值,获取的第一参数和第二参数以及所述完美哈希表,确定每个键对应的slot的索引;
判断每个键对应的slot是否被占据;
若每个键对应的slot未被占据,确定获取的第一参数为第一哈希桶的第一参数,获取的第二参数为第一哈希桶的第二参数;
若所述第一哈希桶中的第三键对应的slot已被占据,重复执行以下步骤:
重新获取第一参数和第二参数;
根据每个键的第一哈希值和第二哈希值,重新获取的第一参数和第二参数,以及所述完美哈希表,确定每个键对应的slot的索引;
判断每个键对应的slot是否被占据;
若每个键对应的slot未被占据,确定重新获取的第一参数为第一哈希桶的第一参数,重新获取的第二参数为第一哈希桶的第二参数。
8.根据权利要求1-5、7中任一项所述的方法,其特征在于,所述将所述待存储的键值数据,按照每个键对应的slot的索引进行存储,包括:
将所述待存储的键值数据,按照每个键对应的slot的索引写入至少一个存储块中,每个存储块中存储的slot的数量基于存储设备的存储单位的大小确定;
将所述至少一个存储块进行压缩后,写入所述存储设备。
9.根据权利要求8所述的方法,其特征在于,所述将所述待存储的键值数据,按照每个键对应的slot的索引写入至少一个存储块中,包括:
按照每个键对应的slot的索引,将每个slot的长度信息写入相应存储块的头部位置,并将每个slot中的键值数据依次写入相应的存储块中。
10.根据权利要求9所述的方法,其特征在于,还包括:
记录每个存储块的文件偏移位置信息,得到偏移数据;
将每个键的第一哈希值或第二哈希值的一部分确定为每个键的签名信息,得到签名数据;
其中,将所述至少一个存储块进行压缩后,写入所述存储设备,包括:
基于压缩后的所述至少一个存储块、所述偏移数据、所述签名数据、所述完美哈希的参数信息以及数据表的属性信息,生成数据表文件;
采用日志结构合并树LSM-Tree结构,将所述数据表文件写入所述存储设备。
11.根据权利要求10所述的方法,其特征在于,所述采用LSM-Tree结构,将所述数据表文件写入所述存储设备,包括执行以下至少一项操作:
将所述数据表文件写入LSM-Tree结构的L0层;
若Li层存储的第一数据文件达到第一预设阈值,将所述第一数据文件合并到Li+1层,其中,i取0到n,n为大于1的正整数。
12.根据权利要求11所述的方法,其特征在于,所述将所述第一数据文件合并到Li+1层,包括:
若L i+1层未存储数据,将所述第一数据文件直接写入L i+1层;
若L i+1层已存储第二数据文件,分别将所述第一数据文件和所述第二数据文件根据键的哈希值,划分为S个数据片段,并针对属于所述第一数据文件的第j个数据片段和属于所述第二数据文件的第j个数据片段,执行以下操作:
获取两个所述第j个数据片段中所有键的第一哈希值和第二哈希值;
根据每个键的第一哈希值和第二哈希值,确定每个键对应的slot的索引;
根据每个slot中的键值数据,确定相应的操作;
其中,S为大于1的预设值,j取1到S。
13.根据权利要求12所述的方法,其特征在于,所述根据每个slot中的键值数据,确定相应的操作,包括:
若当前slot中为空,确定不进行任何操作;
若当前slot中的键值数据为所述第一数据文件中的键值数据,或者,所述第二数据文件中的键值数据,确定执行将当前slot中的键值数据,按照当前slot的索引写入存储设备的步骤;
若当前slot中的键值数据包括:所述第一数据文件中的键值数据和所述第二数据文件中的键值数据,确定将新键值数据写入当前slot,并执行将当前slot中的新键值数据,按照当前slot的索引写入存储设备的步骤,
其中,所述新键值数据基于所述第一数据文件中的键值数据和所述第二数据文件中的键值数据得到。
14.根据权利要求1-5、7、9-13中任一项所述的方法,其特征在于,还包括:
若写入第一内存表中的键值数据的数量达到第二预设阈值,将所述第一内存表标记为不可更新状态,并将所述第一内存表中的键值数据,确定为所述待存储的键值数据。
15.根据权利要求11所述的方法,其特征在于,还包括:
响应于接收到的读取指令,从所述存储设备的数据表文件中读取相应的键值数据,其中,所述读取指令用于指示读取特定键的键值数据。
16.根据权利要求15所述的方法,其特征在于,读取特定键的键值数据的过程包括:
若在内存表中查到所述特定键,则读取所述特定键对应的键值数据;
若在内存表中未查到,则遍历L0层的数据表文件查找所述特定键;
若未在Li层的数据表文件中查到,则在Li+1层的特定数据表文件中查找,直到查找到Ln层,或者,查到所述特定键并读取所述特定键对应的键值数据,其中,所述特定数据表文件为包含所述特定键的键值范围对应的数据表文件。
17.根据权利要求16所述的方法,其特征在于,从任一数据表文件中读取所述特定键的键值数据的过程包括:
读取该数据表文件中的偏移数据、签名数据和完美哈希的参数信息,其中,所述完美哈希的参数信息包括该数据表文件中所有键对应的完美哈希的第一参数和第二参数;
确定所述特定键的第一哈希值和第二哈希值;
基于所述特定键的第一哈希值和第二哈希值,以及完美哈希的参数信息,确定所述特定键对应的slot的索引;
基于所述特定键的第一哈希值或第二哈希值,确定所述特定键对应的签名信息;
基于所述特定键对应的签名信息在所述签名数据中查找,若未查找到匹配的签名信息,确定该数据表文件中不存在所述特定键,并返回提示键值数据不存在的信息;
若查找到匹配的签名信息,根据slot的索引和所述偏移数据,读取相应的存储块中的slot中的键值数据;
若所述特定键与读取的键值数据中的键相同,则返回读取的键值数据,否则,返回提示键值数据不存在的信息。
18.一种数据处理装置,其特征在于,包括:
处理单元,用于利用第一哈希函数和第二哈希函数,将待存储的键值数据中的每个键编码为第一哈希值和第二哈希值;以及,遍历所述待存储的键值数据中所有键的所述第一哈希值和所述第二哈希值,确定所述待存储的键值数据对应的完美哈希的参数信息,其中,所述完美哈希的参数信息包括:每个键对应的存储单元slot的索引;
存储单元,用于将所述待存储的键值数据,按照每个键对应的slot的索引进行存储。
19.一种电子设备,包括:存储器、处理器及存储在存储器上的计算机程序,其特征在于,所述处理器执行所述计算机程序以实现权利要求1-17任一项所述数据处理方法。
20.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-17任一项所述的数据处理方法的步骤。
CN202310719381.8A 2023-06-16 2023-06-16 数据处理方法、装置、设备及存储介质 Active CN116450656B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310719381.8A CN116450656B (zh) 2023-06-16 2023-06-16 数据处理方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310719381.8A CN116450656B (zh) 2023-06-16 2023-06-16 数据处理方法、装置、设备及存储介质

Publications (2)

Publication Number Publication Date
CN116450656A true CN116450656A (zh) 2023-07-18
CN116450656B CN116450656B (zh) 2023-08-22

Family

ID=87128858

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310719381.8A Active CN116450656B (zh) 2023-06-16 2023-06-16 数据处理方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN116450656B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116561073A (zh) * 2023-04-14 2023-08-08 云和恩墨(北京)信息技术有限公司 基于数据库的文件合并方法及系统、设备、存储介质
CN117891414A (zh) * 2024-03-14 2024-04-16 支付宝(杭州)信息技术有限公司 一种基于完美哈希的数据存储方法及相关设备
CN117909296A (zh) * 2024-03-14 2024-04-19 支付宝(杭州)信息技术有限公司 一种基于lsm树的文件合并方法及相关设备

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102682116A (zh) * 2012-05-14 2012-09-19 中兴通讯股份有限公司 基于哈希表的表项处理方法及其装置
KR102050828B1 (ko) * 2018-10-26 2020-01-08 한국과학기술원 병렬 연산을 이용한 오픈 가상 스위치의 가속화 방법 및 이를 이용한 오픈 가상 스위치
CN111352931A (zh) * 2018-12-21 2020-06-30 中兴通讯股份有限公司 一种哈希冲突的处理方法、装置及计算机可读存储介质
CN111837113A (zh) * 2019-09-12 2020-10-27 创新先进技术有限公司 日志结构存储系统
CN113407550A (zh) * 2021-08-19 2021-09-17 支付宝(杭州)信息技术有限公司 数据存储及查询方法、装置及数据库系统
CN113641841A (zh) * 2021-10-15 2021-11-12 支付宝(杭州)信息技术有限公司 数据编码方法、图数据存储方法、图数据查询方法及装置
CN113961961A (zh) * 2021-10-11 2022-01-21 百保(上海)科技有限公司 一种基于scalable-ot的隐私集合求交方法及装置
CN116401258A (zh) * 2023-06-06 2023-07-07 支付宝(杭州)信息技术有限公司 数据索引方法、数据查询方法及对应装置

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102682116A (zh) * 2012-05-14 2012-09-19 中兴通讯股份有限公司 基于哈希表的表项处理方法及其装置
KR102050828B1 (ko) * 2018-10-26 2020-01-08 한국과학기술원 병렬 연산을 이용한 오픈 가상 스위치의 가속화 방법 및 이를 이용한 오픈 가상 스위치
CN111352931A (zh) * 2018-12-21 2020-06-30 中兴通讯股份有限公司 一种哈希冲突的处理方法、装置及计算机可读存储介质
CN111837113A (zh) * 2019-09-12 2020-10-27 创新先进技术有限公司 日志结构存储系统
CN113407550A (zh) * 2021-08-19 2021-09-17 支付宝(杭州)信息技术有限公司 数据存储及查询方法、装置及数据库系统
CN113961961A (zh) * 2021-10-11 2022-01-21 百保(上海)科技有限公司 一种基于scalable-ot的隐私集合求交方法及装置
CN113641841A (zh) * 2021-10-15 2021-11-12 支付宝(杭州)信息技术有限公司 数据编码方法、图数据存储方法、图数据查询方法及装置
CN116401258A (zh) * 2023-06-06 2023-07-07 支付宝(杭州)信息技术有限公司 数据索引方法、数据查询方法及对应装置

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
EDWARD A. FOX等: "A Faster Algorithm for Constructing Minimal Perfect Hash Functions", 《ACM》, pages 266 - 273 *
云原生基地: "深入理解完美哈希", pages 3 - 11, Retrieved from the Internet <URL:https://zhuanlan.zhihu.com/p/544513034> *
李海涛;: "基于多级相关图的大规模词典完美哈希函数构造算法", 计算机工程与科学, no. 12 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116561073A (zh) * 2023-04-14 2023-08-08 云和恩墨(北京)信息技术有限公司 基于数据库的文件合并方法及系统、设备、存储介质
CN116561073B (zh) * 2023-04-14 2023-12-19 云和恩墨(北京)信息技术有限公司 基于数据库的文件合并方法及系统、设备、存储介质
CN117891414A (zh) * 2024-03-14 2024-04-16 支付宝(杭州)信息技术有限公司 一种基于完美哈希的数据存储方法及相关设备
CN117909296A (zh) * 2024-03-14 2024-04-19 支付宝(杭州)信息技术有限公司 一种基于lsm树的文件合并方法及相关设备

Also Published As

Publication number Publication date
CN116450656B (zh) 2023-08-22

Similar Documents

Publication Publication Date Title
CN116450656B (zh) 数据处理方法、装置、设备及存储介质
JP2957703B2 (ja) データを記憶し検索する方法及びメモリ構成体
US10678654B2 (en) Systems and methods for data backup using data binning and deduplication
US8099421B2 (en) File system, and method for storing and searching for file by the same
US7853598B2 (en) Compressed storage of documents using inverted indexes
CN113961514B (zh) 数据查询方法及装置
CN111324750B (zh) 一种大规模文本相似度计算及文本查重方法
JP2005267600A5 (zh)
CN111552692B (zh) 一种加减法布谷鸟过滤器
WO2013152678A1 (zh) 元数据查询方法和装置
KR20090048624A (ko) 데이터 구조를 가지는 하나 이상의 장치 판독가능 매체, 및장치 실행가능 명령어를 구비한 하나 이상의 장치 판독가능 매체
CN113901279B (zh) 一种图数据库的检索方法和装置
CN112148928A (zh) 一种基于指纹家族的布谷鸟过滤器
CN113535670B (zh) 一种虚拟化资源镜像存储系统及其实现方法
CN114610708A (zh) 一种向量数据处理方法及装置、电子设备及存储介质
CN114116612B (zh) 一种基于b+树索引归档文件的存取方法
CN116521641A (zh) 基于数据湖的数据读写方法、数据读写装置以及存储介质
CN115708080A (zh) 具有散列的键值存储设备
CN112434085B (zh) 基于Roaring Bitmap的用户数据统计方法
US20240220470A1 (en) Data storage device and storage control method based on log-structured merge tree
CN116414304B (zh) 基于日志结构化合并树的数据存储装置和存储控制方法
US11914587B2 (en) Systems and methods for key-based indexing in storage devices
KR100446639B1 (ko) 셀 기반의 고차원 데이터 색인 장치 및 그 방법
CN113886391B (zh) 基于离散型的双指纹存储布谷鸟过滤器的数据处理方法
US20240061823A1 (en) Memory-frugal index design in storage engine

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
GR01 Patent grant