CN117093579A - 数据查询、数据存储方法、装置、设备及存储介质 - Google Patents

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

Info

Publication number
CN117093579A
CN117093579A CN202310789008.XA CN202310789008A CN117093579A CN 117093579 A CN117093579 A CN 117093579A CN 202310789008 A CN202310789008 A CN 202310789008A CN 117093579 A CN117093579 A CN 117093579A
Authority
CN
China
Prior art keywords
cache data
value
target
index
file
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.)
Pending
Application number
CN202310789008.XA
Other languages
English (en)
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.)
Ant Blockchain Technology Shanghai Co Ltd
Original Assignee
Ant Blockchain Technology Shanghai 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 Ant Blockchain Technology Shanghai Co Ltd filed Critical Ant Blockchain Technology Shanghai Co Ltd
Priority to CN202310789008.XA priority Critical patent/CN117093579A/zh
Publication of CN117093579A publication Critical patent/CN117093579A/zh
Pending legal-status Critical Current

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
    • 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/24552Database cache management
    • 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/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Computational Linguistics (AREA)
  • Fuzzy Systems (AREA)
  • Mathematical Physics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本公开提供一种数据查询、数据存储方法、装置、设备及存储介质,待查询的缓存数据基于索引文件进行查询;索引文件用于存储缓存数据的索引信息;缓存数据的value存储于内容文件;其中,索引信息包含缓存数据的key的hash值和缓存数据的value在内容文件中的存储位置信息;方法包括:响应于接收到的查询请求,获取查询请求中包含的待查询的目标缓存数据的目标key;计算目标key的目标hash值,并查询索引文件中是否存储了包含目标hash值的目标索引信息;若是,读取目标索引信息中包含的存储位置信息,并基于存储位置信息从内容文件中读取目标缓存数据的value。

Description

数据查询、数据存储方法、装置、设备及存储介质
技术领域
本公开涉及数据处理技术领域,尤其涉及数据查询、数据存储方法、装置、设备及存储介质。
背景技术
如隐私计算等多种场景下均会有信息查询需求。以隐私计算场景为例,多个(两个或以上)数据方进行求交运算后,各数据方会分别存储交集,之后根据需要从交集中查询所需数据。相关技术中采用基于内存的key-value(键值对)存储方案,例如Redis(一种开源的、基于内存的数据结构存储***)等内存数据库,可以通过key快速查询到value,但基于内存的存储方案的成本较高。若为了降低成本,可以将数据集以文件方案进行管理,采用磁盘等持久化存储器进行存储,但通常未采用此种方案,因为文件管理难以使用到文件内部的信息,无法支持查询需求。
发明内容
为克服相关技术中存在的问题,本公开提供了数据查询、数据存储方法、装置、设备及存储介质。
根据本说明书实施例的第一方面,提供一种数据查询方法,待查询的缓存数据基于索引文件进行查询;所述索引文件用于存储所述缓存数据的索引信息;所述缓存数据的value存储于内容文件;其中,所述索引信息包含所述缓存数据的key的hash值和所述缓存数据的value在所述内容文件中的存储位置信息;所述方法包括:
响应于接收到的查询请求,获取所述查询请求中包含的待查询的目标缓存数据的目标key;
计算所述目标key的目标hash值,并查询所述索引文件中是否存储了包含所述目标hash值的目标索引信息;
若是,读取所述目标索引信息中包含的存储位置信息,并基于所述存储位置信息从所述内容文件中读取所述目标缓存数据的value。
根据本说明书实施例的第二方面,提供一种数据存储方法,待查询的缓存数据基于索引文件进行查询;所述索引文件用于存储所述缓存数据的索引信息;所述缓存数据的value存储于内容文件;其中,所述索引信息包含所述缓存数据的key的hash值和所述缓存数据的value在所述内容文件中的存储位置信息;所述方法包括:
获取缓存数据,所述缓存数据包括key和value;
计算所述缓存数据的key的hash值;
将所述缓存数据的value存储至所述内容文件中,得到所述缓存数据的value在所述内容文件中的存储位置信息;
将所述key的hash值和所述存储位置信息作为所述缓存数据的索引信息存储至所述索引文件。
根据本说明书实施例的第三方面,提供一种数据查询装置,待查询的缓存数据基于索引文件进行查询;所述索引文件用于存储所述缓存数据的索引信息;所述缓存数据的value存储于内容文件;其中,所述索引信息包含所述缓存数据的key的hash值和所述缓存数据的value在所述内容文件中的存储位置信息;所述装置包括:
获取模块:响应于接收到的查询请求,获取所述查询请求中包含的待查询的目标缓存数据的目标key;
查询模块:计算所述目标key的目标hash值,并查询所述索引文件中是否存储了包含所述目标hash值的目标索引信息;
读取模块:若是,读取所述目标索引信息中包含的存储位置信息,并基于所述存储位置信息从所述内容文件中读取所述目标缓存数据的value。
根据本说明书实施例的第四方面,提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现前述第一方面或第二方面所述方法实施例的步骤。
根据本说明书实施例的第五方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现前述第一方面或第二方面所述方法实施例的步骤。
本说明书的实施例提供的技术方案可以包括以下有益效果:
本说明书实施例中,一方面,可以采用文件管理方案实现低成本存储;另一方面,可以基于缓存数据的key的hash在索引文件中查询相关的索引信息,并基于查询的索引信息中的存储位置信息,从内容文件中读取缓存数据的value,从而可以实现针对key-value型的缓存数据的value的精确查询。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实施例,并与说明书一起用于解释本公开的原理。
图1A是本说明书根据一示例性实施例示出的一种数据查询的示意图。
图1B是本说明书根据一示例性实施例示出的一种数据查询方法的流程图。
图1C是本说明书根据一示例性实施例示出的一种索引文件和内容文件的示意图。
图1D是本说明书根据一示例性实施例示出的另一种索引文件和内容文件的示意图。
图1E是本说明书根据一示例性实施例示出的从内容文件中获取值信息的示意图。
图2是本说明书根据一示例性实施例示出的一种数据存储方法的流程图。
图3是本说明书根据一示例性实施例示出的一种数据查询装置所在计算机设备的一种硬件结构图。
图4是本说明书根据一示例性实施例示出的一种数据查询装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
本公开所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
以隐私计算场景为,隐私计算(Privacy Computing)是一种利用密码学、多方计算、安全计算等技术,保护数据隐私的计算模式。隐私计算可以在不暴露数据内容的前提下,对数据进行计算和分析,从而能够实现数据共享和合作计算,同时保护用户的隐私权。
在隐私计算场景下,多方数据进行求交(Private Set Intersection,隐私求交)是一种常用的计算方法,其主要作用是找到多个数据集之间的交集,即找到同时出现在多个数据集中的数据。由多方数据求交得到的数据集可以存储起来,后续为数据分析、信息共享、隐私保护等方面提供有力的支持,这是隐私计算技术的重要应用之一。
在隐私计算等场景下,数据存储会面临一些问题:
已有方案通常采用基于内存的key-value(键值对)存储,例如Redis等内存数据库。但数据存储在内存中,因此需要足够大的内存空间来存储数据,内存成本相对于磁盘来说要高得多,造成此种存储方案的成本较高,一个2亿100维的数据就需要超过1TB(Terabyte,千兆字节)的Redis机器。
若为了降低成本,可以将数据集以文件方案进行管理,采用磁盘等持久化存储器进行存储,但通常未采用此种方案,因为文件管理无法使用到文件内部的信息,无法支持用户的查询需求。
一些场景下还会采用Hadoop(一种分布式计算和存储框架)等其他分布式存储方案,但需要部署多个节点,部署成本高,运维成本也太高,不适用于隐私计算等私有化部署的场景,读取速度也难以保障。
基于此,本说明书实施例中,设计了一种以文件的形式缓存key-value型的数据时的数据存储格式。在该数据存储格式中,可以包括用于存储缓存数据的索引信息的索引文件和用于存储缓存数据的value的内容文件。其中,索引文件中存储的索引信息,可以包含缓存数据的key的hash值和缓存数据的value在内容文件中的存储位置信息。
通过这种设计,一方面,可以采用文件管理方案实现低成本存储;另一方面,可以基于缓存数据的key的hash在索引文件中查询相关的索引信息,并基于查询的索引信息中的存储位置信息,从内容文件中读取缓存数据的value,从而可以实现针对key-value型的缓存数据的value的精确查询。
如图1A所示,是本说明书实施例示出的一种数据查询的示意图,本实施例中可以基于磁盘存储索引文件和内容文件,在查询时利用索引文件从内容文件中查询信息。
本说明书实施例中数据查询方案可以应用于多种查询场景,其中,数据源可以包括多条数据,该数据是指满足key-value(键值对)形式的数据。作为例子,在隐私计算场景下,数据集可以是多方(大于或等于两方)经过求交后得到的交集。数据集可以是一份或多份数据文件,其格式可以有多种,例如可以是CSV(Comma-Separated Values,逗号分隔的值)文件格式,文件内的各条数据可以使用逗号、制表符、分号或其他符号将各字段之间进行分隔,每行表示一个数据记录,其中每个字段对应记录中的一个属性。每条数据包括标识(ID,identity)字段和其他字段,标识字段可以作为key,其他字段作为value。
内容文件中存储多个value,即各条缓存数据的value。索引文件中记录多条索引信息,每条索引信息对应一条缓存数据,每条索引信息包括缓存数据的key的hash值和position,position是指缓存数据的value在内容文件中的存储位置。
索引文件和内容文件可以预先创建并存储于磁盘等持久化存储器中。索引文件和内容文件的创建过程,作为例子,可以是:获取缓存数据,所述缓存数据包括key和value;计算所述缓存数据的key的hash值;将所述缓存数据的value存储至所述内容文件中,得到所述缓存数据的value在所述内容文件中的存储位置信息;将所述key的hash值和所述存储位置信息作为所述缓存数据的索引信息存储至所述索引文件。
本实施例中可以采用任一哈希函数,对数据的key计算出哈希值hash,哈希函数具体可以包括MD5(Message Digest Algorithm 5)或SHA(Secure Hash Algorithm)等,本实施例对此不进行限定。可选的,可以根据需要设置哈希值的位数。
基于此,通过索引文件和内容文件可以支持对缓存数据的value的精确查询。如图1B所示,是本说明书根据一示例性实施例示出的一种数据查询方法的流程图,包括以下步骤:
步骤102、响应于接收到的查询请求,获取所述查询请求中包含的待查询的目标缓存数据的目标key;
步骤104、计算所述目标key的目标hash值,并查询所述索引文件中是否存储了包含所述目标hash值的目标索引信息;
步骤106、若是,读取所述目标索引信息中包含的存储位置信息,并基于所述存储位置信息从所述内容文件中读取所述目标缓存数据的value。
针对步骤102,查询请求中携带有key,本实施例将其称为目标key;步骤104中,目标key可以利用哈希函数产生目标hash值key_hash;此处,与创建索引文件时,对各条数据的key产生key_hash的算法保持一致,即所采用的哈希函数以及哈希值的位数保持一致。
对于步骤106,本实施例中对数据集采用了文件管理的方案,索引文件和内容文件可以存储于磁盘等持久化存储器中。在确定目标哈希值后,可以从索引文件中查询是否有记录目标hash值的目标索引信息。
在一些例子中,若未查询到目标索引信息,可返回查询失败结果。
在一些例子中,为了加速查询,索引文件中的部分或全部可以加载至内存中,例如,执行本实施例的应用程序向操作***执行一次读取请求后,数据会被写入至内存的缓存区中并保留,以供后续再次接收到查询请求后使用。或者,也可以是应用程序在启动后预先加载至内存中;因此,所需要查询的目标索引信息在预先加载至内存中的情况下,可以加速查询速度。在另一些例子中,在内存资源支持的情况下,内容文件也可以部分或全部可以加载至内存中。
在一些例子中,所述索引文件以分页存储的方式存储索引信息;
所述索引文件的索引信息,通过如下方式存储至所述索引文件:
根据预设的映射关系确定与所述缓存数据的key的hash值对应的分页号,并将包括所述缓存数据的索引信息存储至与所述分页号对应的分页中;
所述查询所述索引文件中是否存储了包含所述目标hash值的索引信息,包括:
根据所述预设的映射关系,确定与所述目标hash值对应的目标分页号;
访问所述索引文件中与所述目标分页号对应的目标分页,查询所述目标分页中是否存储了包含所述目标hash值的索引信息。
本实施例中,在数据量较大的情况下,索引文件可能存储有很多索引信息,在查询索引文件中是否有某个索引信息时可能会耗费一定的时间。在文件存储中,数据分页(paging)是指将大文件分成若干个固定大小的分页(或称为块),以便更有效地管理和访问文件。每个分页都有一个独立的分页号,方便管理和检索。当需要读取或写入文件时,可以根据分页号来定位特定的分页。因此,本实施例为了提高查询速度,设计了key_hash与索引文件中分页号的映射关系,使得通过key_hash能够知道对应索引信息在索引文件的分页号,因此在查询时,只需要从索引文件的某一分页中进行查询即可,提高了查询效率。
上述预设的映射关系可以根据需要灵活配置,本实施例对此不进行限定。作为例子,为了提高计算速度,预设的映射关系可以包括:余数与分页号的映射关系,所述余数是指哈希值除以所述索引文件的分页总数的余数;也即是,可以采用如下计算公式得到余数后,进一步得到分页号;
key_hash%page_count;
其中,page_count为索引文件的分页总数,该参数在创建索引文件时可以获取到;例如,有n条数据,则可以确定需要记录n个索引信息;再确定每个分页所要记录的索引信息的个数items_per_page,items_per_page可以通过分页的大小以及索引信息的大小确定,从而可以知道页总数。例如,假设一个文件页大小是100Byte(字节),一个索引信息是4Byte,则一个分页可以存储的items_per_page为25;有n条数据,基于n除以items_per_page后向上取整的整数,可以确定分页总数。其中,分页总数可以大于或等于n除以items_per_page后向上取整的整数。其中,一个分页内索引信息的数量还可以根据所有数据的key_hash而确定,实际应用中,由于key_hash是随机的,索引文件中每个分页所存储的key_hash的数量可能是不均匀的,有些分页可能记录较少数量的key_hash,有些分页可能记录较多数量的key_hash。为了使一个分页能够存储该分页下的所有key_hash,在页大小不变的情况下,分页下item的数量可以通过调节item的大小来调节,使得每个分页有足够的item数量来记录该分页的key_hash即可。
根据需要,索引文件中的分页除了记录索引信息之外,可以设计更多分页用于记录其他信息,本实施例对此不进行限定。
通常情况下,分页的大小会根据需求而定。page_size表示每个分页的大小,本实施例中,索引文件和内容文件,可以存储在存储设备搭载的磁盘中,所述分页的大小,是磁盘的磁盘块大小的整数倍。本实施例中,考虑到在进行文件读写时,操作***通常会按照磁盘块的大小来划分文件的读写操作。具体来说,操作***会将一个大文件划分为多个等大小或不等大小的块,在进行文件访问时,通常是按照块为单位进行读写操作,而一个块可以包含多个扇区(sector)。在进行磁盘I/O(Input or Output,输入或输出)操作时,如果读写的数据大小小于一个块的大小,那么操作***可能会选择读取整个文件块,而不是仅读取部分数据,以充分利用磁盘缓存和提高读取效率。反之,如果读写的数据大小大于一个块的大小,操作***可能需要多次进行读写操作,从而可能会降低读写效率。如此,本实施例将分页大小设计为磁盘块大小的整数倍,一次I/O操作可以针对索引文件的整个分页,从而在整个分页中查询索引信息,可以实现对索引文件的一次读操作来完成索引信息的查询,可以在保证数据完整性和可靠性的前提下,最大限度地提高磁盘I/O操作的性能和效率。
在一些例子中,所述索引文件中的至少一个分页预先被加载至存储设备的内存中,如此,在查询索引信息时,可以确定所述内存中是否加载了与所述目标分页号对应的目标分页;若是,从所述内存中访问所述目标分页号对应的目标分页。基于此,可以根据需要将索引文件的一个或多个分页加载至内存中,可以提升查询速度。
针对步骤106,由于索引信息中存储了position,因此利用position,通过一次读操作即可获取到所需的value。其中,position可以采用文件内部的偏移量(Offset)来表示。偏移量是指相对于文件开头的位置,也就是文件内部所占用的字节数。根据这个偏移量和文件的起始位置,可以准确地定位到文件中具体的某个位置,然后进行读取操作。通常,偏移量的单位是字节(Byte),而访问文件某个位置时,也会指定要访问的字节数,本实施例即value的长度record_length。本实施例可以通过多种方式,在获取value前先获取到value的长度record_length。
实际应用中,各条数据的value可以是等长的,也可以是不等长的。在等长的情况下,value的长度record_length是固定且已知的(创建索引文件时根据各条数据的value即可确定)。其中,待查询的缓存数据还可以基于meta参数进行查询,record_length可以作为meta参数(Metadata,元参数),meta参数是关于文件的描述性信息,用于执行主体的辅助查询。内容文件存储各条数据的value,从目标索引信息中获取目标存储位置,通过目标存储位置和长度record_length,可以获取到所查询的value。具体的,执行本实施例的应用程序可以通过***调用请求(携带position和长度record_length),在内容文件的目标存储位置处,读取出长度为record_length的值信息。
在另一些例子中,各条数据的value不等长的情况下,可以有多种方式记录value的长度record_length,例如记录在索引文件中或记录在内容文件中。如图1C所示,是本说明书根据一示例性实施例示出的一种索引文件和内容文件的示意图。图1C中索引文件包括多个分页,如图1C中示出的分页page-index-1中,可以包括多个条目item,即图中的item-0、item-1、……。条目item用于存储索引信息。本实施例的索引信息在存储key_hash和position的基础上,还可以包括value的长度record_length,用于表示value所占用的字节大小。如此,所述读取所述索引信息中包含的存储位置信息,并基于所述存储位置信息从所述内容文件中读取所述目标缓存数据的value,可以包括:读取所述索引信息中包含的存储位置信息和所述长度信息,并从所述内容文件中与所述存储位置信息对应的存储位置上,读取与所述长度对应的存储内容,以得到所述目标缓存数据的value。基于此,本实施例通过在索引信息中记录record_length,可以快速地从内容文件中获取到所需的value。
如图1D所示,是本说明书根据一示例性实施例示出的另一种索引文件和内容文件的示意图。在本实施例中,待查询的缓存数据还可以基于与内容文件中存储的缓存数据的value对应的meta参数进行查询;其中,内容文件中还存储了位于缓存数据的value之前的长度字段length;长度字段length用于记录缓存数据的value的长度record_length;meta参数包括与长度字段对应的长度参数,长度参数用于描述长度字段length的长度length'。可以理解,此处长度字段length是定长的,其大小可以根据实际应用中数据的value的长度而确定,本实施例对此不进行限定。例如,实际应用中value的长度通常是有限的,即使value最长是100000Byte,长度字段length取定长的32位就足够记录了。
所述基于所述存储位置信息从所述内容文件中读取所述目标缓存数据的value,可以包括:
从所述内容文件中与所述存储位置信息对应的存储位置上,根据所述长度参数描述的长度length'读取出长度字段length,并解析出所述长度字段length中记录的value的长度record_length;
在读取出所述长度字段的存储位置之后,根据解析出的value的长度record_length读取存储内容,以得到所述缓存目标数据的value。
上述实施例中,需要先读取长度字段,解析出value的长度record_length后,再去读取value;此处可以是通过两次读操作实现。在其他例子中,为了实现一次读操作,可以基于存储位置信息从内容文件中读取value时,在内容文件中与存储位置信息对应的存储位置上,一次读取较长的存储内容。如图1E所示,是本说明书根据一示例性实施例示出的从内容文件中获取存储内容的示意图,从图中可以看出,其一次读操作读取了较长的存储内容,超过了“length+value”的长度,读取之后再从中按照上述实施例解析出value即可。
本实施例中,为了辅助查询,可以记录如下一种或多种meta参数:
哈希算法参数,所述哈希算法参数用于指示计算hash值的哈希算法。
索引信息参数,所述索引信息参数用于指示从索引文件中读取索引信息;例如该参数可以包括索引信息的长度等。
hash值参数,所述哈希值参数用于指示从索引信息中读取hash值;例如该参数可以包括hash值的位数等。
存储位置参数,所述存储位置参数用于指示从索引信息中读取存储位置信息;例如该参数可以包括position的长度等。
映射关系参数,所述映射关系参数用于指示所述预设的映射关系,例如该参数可以表示映射关系的计算公式等等。
如此,本实施例方法的执行主体,可以在启动运行后先读取meta参数,基于meta参数的指示执行后续的流程。
在一些例子中,所述meta参数存储在所述内容文件或者所述索引文件中的指定分页,例如首页等。或者,meta参数可以存储在一份参数文件中。
接下来再通过如下实施例进行说明。获取指定的数据集,指定的数据集可以是文件形式。一个文件对应一张表,文件中一条记录即一条缓存数据,即对应Key-Value存储中的一个key-value对。本实施例可以确定如下一种或多种meta参数:
大小端endian,对一张表,确定使用一种大小端规则即可。其表示索引文件中数据的存放顺序。小端模式表示数据的高字节存放在高地址中,计算机读取数据的方向,是从高地址开始读取的。大端模式表示数据的高字节存放在低地址中,计算机读取数据的方向是从低地址开始读取的。
page_size:索引文件的分页大小,可以选用一个磁盘块大小的整数倍,例如64KB等。
page_count:索引文件的分页总数;根据数据集中数据的条数,确定好items_per_page,就可以知道分页总数。
key_hash:表示哈希算法参数,即表示计算key的hash值的计算方式。
key_hash_size:key的hash值的位数。
page_index:表示key_hash与页码的映射关系,映射方式可以采用如下公式:key_hash%page_count,即key_hash对page_count取余,利用余数确定页码;根据该公式可快速计算出key_hash对应的页码。
position_size:position的长度,即索引文件中存储的position的长度;
items_per_page:每个分页存储的记录数,每个记录item用于存储索引信息。
实际应用中,meta参数根据需要还可以有其他实现方式,本实施例对此不进行限定。
本实施例的流程可以分为两个阶段:1.数据导入阶段;2.在线读取阶段。两个阶段中key计算hash的处理,以及获取key_hash对应的page_index的处理应该保持一致。
一、数据导入阶段
准备好数据集文件,从中获取每条数据的key字段和value字段,也可以获取数据集中数据的条数;
开始创建文件;可选的,可以在磁盘中创建目录,并使用特定的目录名,以跟其他文件进行隔离。
初始化文件:初始化一个索引文件,一个内容文件;可选的,还可以创建用于记录元数据的文件,或者,元数据也可以无需单独存一个文件,而是存储在索引文件,或者是内容文件中;存储的位置可以根据需要进行配置,例如可以是首页或尾页等。
读取数据集中的每条数据,针对每条数据执行如下步骤:
对每条数据的value存入内容文件中,并记录此value的开始位置position和长度record_length。在一些例子中,长度record_length若是固定的,也可以采用一个meta参数记录它。
对key做hash,得到key_hash。
计算page_index;page_index=key_hash%page_count。在其他例子中,也可以采用其他映射方式,例如可以对page_index=key_hash%page_count+1,也即是page_index是余数加一,则索引文件的首页可用于记录其他信息,例如可以存储前述的meta参数等。
在索引文件的每一分页中写入索引信息;具体的,需要根据key_hash对应的分页号,将索引信息写入至对应的分页中。其中,每一个分页可以存储多个item,每个item即一条索引信息或者也可称为一个元素。索引信息可以是(key_hash,position)或(key_hash,position,record_length),此处索引信息中信息的顺序,如key_hash设置在position之前只是示例,实际应用中可以根据需要进行配置,本实施例对此不进行限定。
处理完成数据集中所有数据后,结束此阶段。参数、索引文件和内容文件存储于持久化存储器中。
二、记录检索阶段
例如接收到一条查询key="id-1"的查询请求,可以执行如下步骤得到value:
对key做hash,得到key_hash;
计算page_index;例如,计算key_hash%page_count,根据余数确定page_index;
从索引文件中页码为page_index的分页中,找到记录有key_hash的索引信息;
如果没有找到该索引信息,则返回“未查中”等表示查询失败的消息。
如果找到,则根据该索引信息中对应的position,在内容文件中找到对应位置,并根据record_length获取value;
返回获取到的value,检索结束。
上述实施例中,提供了一种基于文件管理的Key-Value存储设计,读性能很高,但是存储基于磁盘,成本较低。该方案适用于多种数据查询场景,例如隐私计算等场景下,数据方获取到隐私计算(例如求交计算)后的数据集,每个数据方均可以对自身持有的数据集进行数据查询,只需要key就可查询对应的value,不需要采用适用于复杂查询场景的关系型数据库。
与前述数据查询方法的实施例相对应,本说明书还提供了一种数据存储的方法实施例,待查询的缓存数据基于索引文件进行查询;所述索引文件用于存储所述缓存数据的索引信息;所述缓存数据的value存储于内容文件;其中,所述索引信息包含所述缓存数据的key的hash值和所述缓存数据的value在所述内容文件中的存储位置信息;如图2所示,所述方法包括:
在步骤202中,获取缓存数据,所述缓存数据包括key和value;
在步骤204中,计算所述缓存数据的key的hash值;
在步骤206中,将所述缓存数据的value存储至所述内容文件中,得到所述缓存数据的value在所述内容文件中的存储位置信息;
在步骤208中,将所述key的hash值和所述存储位置信息作为所述缓存数据的索引信息存储至所述索引文件中。
上述实施例具体可查看前述实施例的描述,在此不进行赘述。
与前述数据查询方法的实施例相对应,本说明书还提供了数据查询装置/数据存储装置及其所应用的终端的实施例。
本说明书数据查询装置/数据存储装置的实施例可以应用在计算机设备上,例如服务器或终端设备。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图3所示,为本说明书数据查询装置所在计算机设备的一种硬件结构图,除了图3所示的处理器310、内存330、网络接口320、以及非易失性存储器340之外,实施例中数据查询装置/数据存储装置331所在的计算机设备,通常根据该计算机设备的实际功能,还可以包括其他硬件,对此不再赘述。
如图4所示,图4是本说明书根据一示例性实施例示出的一种数据查询装置的框图,待查询的缓存数据基于索引文件进行查询;所述索引文件用于存储所述缓存数据的索引信息;所述缓存数据的value存储于内容文件;其中,所述索引信息包含所述缓存数据的key的hash值和所述缓存数据的value在所述内容文件中的存储位置信息;所述装置包括:
获取模块41:响应于接收到的查询请求,获取所述查询请求中包含的待查询的目标缓存数据的目标key;
查询模块42:计算所述目标key的目标hash值,并查询所述索引文件中是否存储了包含所述目标hash值的目标索引信息;
读取模块43:若是,读取所述目标索引信息中包含的存储位置信息,并基于所述存储位置信息从所述内容文件中读取所述目标缓存数据的value。
在一些例子中,所述索引文件以分页存储的方式存储索引信息;
所述索引文件的索引信息,通过如下方式存储至所述索引文件:
根据预设的映射关系确定与所述缓存数据的key的hash值对应的分页号,并将包括所述缓存数据的索引信息存储至与所述分页号对应的分页中;
所述查询所述缓存索引中是否存储了包含所述目标hash值的目标索引信息,包括:
根据所述预设的映射关系,确定与所述目标hash值对应的目标分页号;
访问所述索引文件中与所述目标分页号对应的目标分页,查询所述目标分页中是否存储了包含所述目标hash值的索引信息。
在一些例子中,所述预设的映射关系,包括:
余数与分页号的映射关系,所述余数是指哈希值除以所述索引文件的分页总数的余数。
在一些例子中,所述索引文件和所述内容文件,存储在存储设备搭载的磁盘中;所述分页的大小,是磁盘的磁盘块大小的整数倍。
在一些例子中,所述索引文件的索引信息还包括所述缓存数据的value的长度;
所述读取模块43:
读取所述索引信息中包含的存储位置信息和所述长度信息,并从所述内容文件中与所述存储位置信息对应的存储位置上,读取与所述长度对应的存储内容,以得到所述目标缓存数据的value。
在一些例子中,所述待查询的缓存数据还基于与所述内容文件中存储的缓存数据的value对应的meta参数进行查询;其中,所述内容文件中还存储了位于缓存数据的value之前的长度字段;所述长度字段用于记录所述缓存数据的value的长度;所述meta参数包括与所述长度字段对应的长度参数,所述长度参数用于描述所述长度字段的长度;
所述读取模块43:
从所述内容文件中与所述存储位置信息对应的存储位置上,根据所述长度参数描述的长度读取出长度字段,并解析出所述长度字段中记录的value的长度;
在读取出所述长度字段的存储位置之后,根据解析出的value的长度读取存储内容,以得到所述目标缓存数据的value。
在一些例子中,所述待查询的缓存数据还基于meta参数进行查询,所述meta参数包括如下一种或多种:
哈希算法参数,所述哈希算法参数用于指示计算hash值的哈希算法;
索引信息参数,所述索引信息参数用于指示从索引文件中读取索引信息;
hash值参数,所述哈希值参数用于指示从索引信息中读取hash值;
存储位置参数,所述存储位置参数用于指示从索引信息中读取存储位置信息;
映射关系参数,所述映射关系参数用于指示所述预设的映射关系。
在一些例子中,所述meta参数存储在所述内容文件或者所述索引文件中的指定分页;或者,所述meta参数存储在参数文件中。
上述数据查询装置中各个模块的功能和作用的实现过程具体详见上述数据查询方法中对应步骤的实现过程,在此不再赘述。
相应的,本说明书实施例还提供了一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现前述数据查询方法/数据存储方法实施例的步骤。
相应的,本说明书实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现数据查询方法/数据存储方法实施例的步骤。
相应的,本说明书实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现数据查询方法/数据存储方法实施例的步骤。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
上述实施例可以应用于一个或者多个计算机设备中,所述计算机设备是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,所述计算机设备的硬件包括但不限于微处理器、专用集成电路(Application Specific IntegratedCircuit,ASIC)、可编程门阵列(Field-Programmable Gate Array,FPGA)、数字处理器(Digital Signal Processor,DSP)、嵌入式设备等。
所述计算机设备可以是任何一种可与用户进行人机交互的电子产品,例如,个人计算机、平板电脑、智能手机、个人数字助理(Personal Digital Assistant,PDA)、游戏机、交互式网络电视(Internet Protocol Television,IPTV)、智能式穿戴式设备等。
所述计算机设备还可以包括网络设备和/或用户设备。其中,所述网络设备包括,但不限于单个网络服务器、多个网络服务器组成的服务器组或基于云计算(CloudComputing)的由大量主机或网络服务器构成的云。
所述计算机设备所处的网络包括但不限于互联网、广域网、城域网、局域网、虚拟专用网络(Virtual Private Network,VPN)等。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
上面各种方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,只要包括相同的逻辑关系,都在本专利的保护范围内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法和流程的核心设计都在该申请的保护范围内。
其中,“具体示例”、或“一些示例”等的描述意指结合所述实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
本领域技术人员在考虑说明书及实践这里申请的发明后,将容易想到本说明书的其它实施方案。本说明书旨在涵盖本说明书的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本说明书的一般性原理并包括本说明书未申请的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本说明书的真正范围和精神由下面的权利要求指出。
应当理解的是,本说明书并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本说明书的范围仅由所附的权利要求来限制。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。

Claims (12)

1.一种数据查询方法,待查询的缓存数据基于索引文件进行查询;所述索引文件用于存储所述缓存数据的索引信息;所述缓存数据的value存储于内容文件;其中,所述索引信息包含所述缓存数据的key的hash值和所述缓存数据的value在所述内容文件中的存储位置信息;所述方法包括:
响应于接收到的查询请求,获取所述查询请求中包含的待查询的目标缓存数据的目标key;
计算所述目标key的目标hash值,并查询所述索引文件中是否存储了包含所述目标hash值的目标索引信息;
若是,读取所述目标索引信息中包含的存储位置信息,并基于所述存储位置信息从所述内容文件中读取所述目标缓存数据的value。
2.根据权利要求1所述的方法,所述索引文件以分页存储的方式存储索引信息;
所述索引文件的索引信息,通过如下方式存储至所述索引文件:
根据预设的映射关系确定与所述缓存数据的key的hash值对应的分页号,并将包括所述缓存数据的索引信息存储至与所述分页号对应的分页中;
所述查询所述缓存索引中是否存储了包含所述目标hash值的目标索引信息,包括:
根据所述预设的映射关系,确定与所述目标hash值对应的目标分页号;
访问所述索引文件中与所述目标分页号对应的目标分页,查询所述目标分页中是否存储了包含所述目标hash值的索引信息。
3.根据权利要求2所述的方法,所述预设的映射关系,包括:
余数与分页号的映射关系,所述余数是指哈希值除以所述索引文件的分页总数的余数。
4.根据权利要求2所述的方法,所述索引文件和所述内容文件,存储在存储设备搭载的磁盘中;所述分页的大小,是磁盘的磁盘块大小的整数倍。
5.根据权利要求1所述的方法,所述索引文件的索引信息还包括所述缓存数据的value的长度;
所述读取所述索引信息中包含的存储位置信息,并基于所述存储位置信息从所述内容文件中读取所述目标缓存数据的value,包括:
读取所述索引信息中包含的存储位置信息和所述长度信息,并从所述内容文件中与所述存储位置信息对应的存储位置上,读取与所述长度对应的存储内容,以得到所述目标缓存数据的value。
6.根据权利要求1所述的方法,所述待查询的缓存数据还基于与所述内容文件中存储的缓存数据的value对应的meta参数进行查询;其中,所述内容文件中还存储了位于缓存数据的value之前的长度字段;所述长度字段用于记录所述缓存数据的value的长度;所述meta参数包括与所述长度字段对应的长度参数,所述长度参数用于描述所述长度字段的长度;
所述基于所述存储位置信息从所述内容文件中读取所述目标缓存数据的value,包括:
从所述内容文件中与所述存储位置信息对应的存储位置上,根据所述长度参数描述的长度读取出长度字段,并解析出所述长度字段中记录的value的长度;
在读取出所述长度字段的存储位置之后,根据解析出的value的长度读取存储内容,以得到所述目标缓存数据的value。
7.根据权利要求2所述的方法,所述待查询的缓存数据还基于meta参数进行查询,所述meta参数包括如下一种或多种:
哈希算法参数,所述哈希算法参数用于指示计算hash值的哈希算法;
索引信息参数,所述索引信息参数用于指示从索引文件中读取索引信息;
hash值参数,所述哈希值参数用于指示从索引信息中读取hash值;
存储位置参数,所述存储位置参数用于指示从索引信息中读取存储位置信息;
映射关系参数,所述映射关系参数用于指示所述预设的映射关系。
8.根据权利要求6或7所述的方法,所述meta参数存储在所述内容文件或者所述索引文件中的指定分页;或者,所述meta参数存储在参数文件中。
9.一种数据存储方法,待查询的缓存数据基于索引文件进行查询;所述索引文件用于存储所述缓存数据的索引信息;所述缓存数据的value存储于内容文件;其中,所述索引信息包含所述缓存数据的key的hash值和所述缓存数据的value在所述内容文件中的存储位置信息;所述方法包括:
获取缓存数据,所述缓存数据包括key和value;
计算所述缓存数据的key的hash值;
将所述缓存数据的value存储至所述内容文件中,得到所述缓存数据的value在所述内容文件中的存储位置信息;
将所述key的hash值和所述存储位置信息作为所述缓存数据的索引信息存储至所述索引文件。
10.一种数据查询装置,待查询的缓存数据基于索引文件进行查询;所述索引文件用于存储所述缓存数据的索引信息;所述缓存数据的value存储于内容文件;其中,所述索引信息包含所述缓存数据的key的hash值和所述缓存数据的value在所述内容文件中的存储位置信息;所述装置包括:
获取模块:响应于接收到的查询请求,获取所述查询请求中包含的待查询的目标缓存数据的目标key;
查询模块:计算所述目标key的目标hash值,并查询所述索引文件中是否存储了包含所述目标hash值的目标索引信息;
读取模块:若是,读取所述目标索引信息中包含的存储位置信息,并基于所述存储位置信息从所述内容文件中读取所述目标缓存数据的value。
11.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现权利要求1至9任一所述方法的步骤。
12.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1至9任一所述方法的步骤。
CN202310789008.XA 2023-06-29 2023-06-29 数据查询、数据存储方法、装置、设备及存储介质 Pending CN117093579A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310789008.XA CN117093579A (zh) 2023-06-29 2023-06-29 数据查询、数据存储方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310789008.XA CN117093579A (zh) 2023-06-29 2023-06-29 数据查询、数据存储方法、装置、设备及存储介质

Publications (1)

Publication Number Publication Date
CN117093579A true CN117093579A (zh) 2023-11-21

Family

ID=88778410

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310789008.XA Pending CN117093579A (zh) 2023-06-29 2023-06-29 数据查询、数据存储方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN117093579A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118072426A (zh) * 2024-04-17 2024-05-24 苏州琨山通用锁具有限公司 基于hash的智能门锁用户信息存储方法、开锁方法及智能门锁

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118072426A (zh) * 2024-04-17 2024-05-24 苏州琨山通用锁具有限公司 基于hash的智能门锁用户信息存储方法、开锁方法及智能门锁

Similar Documents

Publication Publication Date Title
CN108459826B (zh) 一种处理io请求的方法及装置
CN107491523B (zh) 存储数据对象的方法及装置
US10678784B2 (en) Dynamic column synopsis for analytical databases
CN111475105B (zh) 监控数据存储方法、设备、服务器及存储介质
CN109885577B (zh) 数据处理方法、装置、终端及存储介质
US9710283B2 (en) System and method for pre-storing small data files into a page-cache and performing reading and writing to the page cache during booting
CN107391544B (zh) 列式存储数据的处理方法、装置、设备及计算机储存介质
KR101621385B1 (ko) 클라우드 스토리지 서비스의 파일 검색 시스템 및 방법, 및 파일 제어 방법
US10846338B2 (en) Data processing device, data processing method, and non-transitory computer readable medium
CN110597762A (zh) 文件处理方法、装置、设备及存储介质
CN112306957A (zh) 获取索引节点号的方法、装置、计算设备和存储介质
CN114647658A (zh) 一种数据检索方法、装置、设备及机器可读存储介质
CN108038253B (zh) 一种日志查询的处理方法及装置
Zhang et al. Recovering SQLite data from fragmented flash pages
CN111158606B (zh) 存储方法、装置、计算机设备和存储介质
CN116048396B (zh) 基于日志结构化合并树的数据存储装置和存储控制方法
US20200349186A1 (en) Method, apparatus and computer program product for managing metadata of storage object
CN117493282A (zh) 一种基于文件***的元数据管理方法及其相关设备
CN117093579A (zh) 数据查询、数据存储方法、装置、设备及存储介质
CN115145954A (zh) 一种数据查询方法、数据存储方法及装置
CN114416676A (zh) 数据处理方法、装置、设备和存储介质
CN112395613B (zh) 静态特征库的加载方法、装置及设备
CN113419792A (zh) 一种事件处理方法、装置、终端设备和存储介质
US10664442B1 (en) Method and system for data consistency verification in a storage system
CN112182261A (zh) 影像存储方法、装置、计算机设备和存储介质

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