CN117149100B - 数据存储方法及装置 - Google Patents

数据存储方法及装置 Download PDF

Info

Publication number
CN117149100B
CN117149100B CN202311433168.7A CN202311433168A CN117149100B CN 117149100 B CN117149100 B CN 117149100B CN 202311433168 A CN202311433168 A CN 202311433168A CN 117149100 B CN117149100 B CN 117149100B
Authority
CN
China
Prior art keywords
data
key
value
storage space
storage
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
Application number
CN202311433168.7A
Other languages
English (en)
Other versions
CN117149100A (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.)
Hundsun Technologies Inc
Original Assignee
Hundsun Technologies Inc
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 Hundsun Technologies Inc filed Critical Hundsun Technologies Inc
Priority to CN202311433168.7A priority Critical patent/CN117149100B/zh
Publication of CN117149100A publication Critical patent/CN117149100A/zh
Application granted granted Critical
Publication of CN117149100B publication Critical patent/CN117149100B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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/0608Saving storage space on storage systems
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本说明书提供数据存储方法及装置,其中所述数据存储方法包括:响应于数据存储请求获取键数据以及所述键数据对应的多个值数据,并确定所述多个值数据对应的数据类型;确定所述数据存储请求关联的数据存储结构中预设的数据写入规则,其中,所述数据存储结构由在目标存储空间中确定的键存储空间和值存储空间组成;按照所述数据写入规则将所述键数据存储至所述键存储空间,以及按照所述键数据和所述数据写入规则将所述多个值数据依次存储至所述值存储空间;基于存储结果建立所述键数据、所述数据类型和所述多个值数据之间的映射关系,并将所述映射关系作为所述数据存储结构的索引信息。

Description

数据存储方法及装置
技术领域
本说明书涉及数据处理技术领域,特别涉及一种数据存储方法及装置。
背景技术
在数据结构中,键值对的关系型结构具有高可读性的优点,通常被广泛的应用于系统开发以及通用框架中。数据同步、比对等任务也可以应用此内存数据结构。然而,键值对形式存储的数据存在“键数据”冗余存储的问题,这将导致此内存数据结构存储空间的大量占用。因此,亟需一种较为有效的方法以解决上述问题。
发明内容
有鉴于此,本说明书实施例提供了一种数据存储方法。本说明书同时涉及一种数据存储装置,一种数据读取方法,一种数据读取装置,一种计算设备,以及一种计算机可读存储介质,以解决现有技术中存在的技术缺陷。
根据本说明书实施例的第一方面,提供了一种数据存储方法,包括:
响应于数据存储请求获取键数据以及所述键数据对应的多个值数据,并确定所述多个值数据对应的数据类型;
确定所述数据存储请求关联的数据存储结构中预设的数据写入规则,其中,所述数据存储结构由在目标存储空间中确定的键存储空间和值存储空间组成;
按照所述数据写入规则将所述键数据存储至所述键存储空间,以及按照所述键数据和所述数据写入规则将所述多个值数据依次存储至所述值存储空间;
基于存储结果建立所述键数据、所述数据类型和所述多个值数据之间的映射关系,并将所述映射关系作为所述数据存储结构的索引信息。
可选地,所述响应于数据存储请求获取键数据以及所述键数据对应的多个值数据,包括:
响应于数据存储请求在键值对存储空间获取具有关联关系的多个键值对;
根据所述多个键值对中的键标识生成目标键数据,以及根据所述多个键值对确定所述目标键数据对应的多个值数据。
可选地,所述响应于数据存储请求获取键数据以及所述键数据对应的多个值数据,包括:
在所述数据存储请求关联对象存储空间的情况下,响应于数据存储请求在所述对象存储空间获取对象属性标识,以及所述对象属性标识对应的多个对象属性数据;
将所述对象属性标识作为所述键数据,以及将所述多个对象属性数据作为所述键数据对应的所述多个值数据。
可选地,所述方法还包括:
在所述目标存储空间中确定所述键存储空间和所述值存储空间,并基于所述键存储空间和所述值存储空间构建所述数据存储结构,以及执行所述响应于数据存储请求获取键数据以及所述键数据对应的多个值数据的步骤,或者,
基于所述键数据的数量在所述目标存储空间中确定所述键存储空间和所述值存储空间,并基于所述键存储空间和所述值存储空间构建所述数据存储结构,以及执行所述确定所述数据存储请求关联的数据存储结构中预设的数据写入规则步骤。
可选地,所述按照所述键数据和所述数据写入规则将所述多个值数据依次存储至所述值存储空间,包括:
将所述多个值数据分别转换为与所述数据类型对应的目标值数据;
按照所述键数据和所述数据写入规则将与所述数据类型对应的目标值数据依次存储至所述值存储空间。
可选地,所述按照所述键数据和所述数据写入规则将所述多个值数据依次存储至所述值存储空间,包括:
基于所述数据写入规则中的值数据写入规则在所述值存储空间中确定值存储子空间;
按照所述键数据将所述多个值数据依次存储至所述值存储空间中的所述值存储子空间。
可选地,所述按照所述数据写入规则将所述键数据存储至所述键存储空间,包括:
按照所述数据写入规则中的键数据写入规则,确定所述键数据的键写入标识,其中,所述键写入标识根据前序键写入标识确定;
将所述键数据存储至所述键存储空间中所述键写入标识对应的键存储子空间。
可选地,所述基于存储结果建立所述键数据、所述数据类型和所述多个值数据之间的映射关系,并将所述映射关系作为所述数据存储结构的索引信息之后,还包括:
接收针对存储所述键数据的键存储空间的数据操作请求,并对所述数据操作请求进行解析获得键操作标识;
基于所述键操作标识确定与所述数据存储结构关联的索引信息,按照所述索引信息在所述键存储空间确定键数据;
按照所述索引信息和所述键数据确定值存储空间,并在所述值存储空间中对所述数据操作请求对应的值数据进行数据操作。
可选地,所述基于存储结果建立所述键数据、所述数据类型和所述多个值数据之间的映射关系,并将所述映射关系作为所述数据存储结构的索引信息之后,还包括:
在接收到携带键信息的键数据查询请求的情况下,基于所述键信息在所述键存储空间进行查询,并基于第一键查询结果执行目标键任务;或者,
在接收到携带键信息的键数据查询请求的情况下,基于所述键信息在所述键存储空间进行查询,并基于第二键查询结果查询目标值存储空间,根据值查询结果执行目标值任务。
根据本说明书实施例的第二方面,提供了一种数据存储装置,包括:
获取模块,被配置为响应于数据存储请求获取键数据以及所述键数据对应的多个值数据,并确定所述多个值数据对应的数据类型;
确定模块,被配置为确定所述数据存储请求关联的数据存储结构中预设的数据写入规则,其中,所述数据存储结构由在目标存储空间中确定的键存储空间和值存储空间组成;
存储模块,被配置为按照所述数据写入规则将所述键数据存储至所述键存储空间,以及按照所述键数据和所述数据写入规则将所述多个值数据依次存储至所述值存储空间;
建立模块,被配置为基于存储结果建立所述键数据、所述数据类型和所述多个值数据之间的映射关系,并将所述映射关系作为所述数据存储结构的索引信息。
根据本说明书实施例的第三方面,提供了一种数据读取方法,包括:
接收数据读取请求,并对所述数据读取请求进行解析获得数据存储标识;
基于所述数据存储标识确定与数据存储结构关联的索引信息,其中,所述数据存储结构由在目标存储空间中确定的键存储空间和值存储空间组成;
按照所述索引信息在所述键存储空间读取键数据,以及在所述值存储空间依次读取与所述键数据对应的多个值数据。
可选地,所述在所述值存储空间依次读取与所述键数据对应的多个值数据,包括:
在所述值存储子空间依次读取与所述键数据对应的多个初始值数据,并将所述多个初始值数据分别转换为与所述数据类型对应的值数据。
可选地,所述按照所述索引信息在所述键存储空间读取键数据,以及在所述值存储空间依次读取与所述键数据对应的多个值数据之后,还包括:
响应于针对数据处理任务的数据处理指令,对所述键数据对应的键字节流和所述多个值数据对应的值字节流进行反序列化;
根据反序列化结果确定所述键数据对应的重构键数据,以及所述多个值数据对应的重构值数据;
基于所述重构键数据和所述重构值数据执行所述数据处理任务。
根据本说明书实施例的第四方面,提供了一种数据读取装置,包括:
接收模块,被配置为接收数据读取请求,并对所述数据读取请求进行解析获得数据存储标识;
确定模块,被配置为基于所述数据存储标识确定与数据存储结构关联的索引信息,其中,所述数据存储结构由在目标存储空间中确定的键存储空间和值存储空间组成;
读取模块,被配置为按照所述索引信息在所述键存储空间读取键数据,以及在所述值存储空间依次读取与所述键数据对应的多个值数据。
根据本说明书实施例的第五方面,提供了一种计算设备,包括:
存储器和处理器;
所述存储器用于存储计算机可执行指令,该指令被处理器执行时实现所述方法的步骤。
根据本说明书实施例的第六方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该指令被处理器执行时实现所述方法的步骤。
本说明书提供的数据存储方法,响应于数据存储请求获取键数据以及键数据对应的多个值数据,并确定多个值数据对应的数据类型;确定数据存储请求关联的数据存储结构中预设的数据写入规则,其中,数据存储结构由在目标存储空间中确定的键存储空间和值存储空间组成;按照数据写入规则将键数据存储至键存储空间,以及按照键数据和数据写入规则将多个值数据依次存储至值存储空间;基于存储结果建立键数据、数据类型和多个值数据之间的映射关系,并将映射关系作为数据存储结构的索引信息。本说明书一实施例通过将键数据存储至键存储空间,以及按照键数据和数据写入规则将多个值数据依次存储至值存储空间,实现了对键数据和值数据进行独立存储。减少了键数据的冗余存储次数,节省了大量的存储空间。
附图说明
图1示出了根据本说明书一实施例提供的一种数据存储方法的结构示意图;
图2是本说明书一实施例提供的一种数据存储方法的流程图;
图3是本说明书一实施例提供的一种数据存储方法的映射关系示意图;
图4是本说明书一实施例提供的一种应用于业务数据存储的数据存储方法的处理流程图;
图5是本说明书一实施例提供的一种数据存储装置的结构示意图;
图6是本说明书一实施例提供的一种数据读取方法的流程图;
图7是本说明书一实施例提供的一种数据读取装置的结构示意图;
图8是本说明书一实施例提供的一种计算设备的结构框图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。
在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
首先,对本说明书一个或多个实施例涉及的名词术语进行解释。
Map:用于保存具有映射关系的数据,因此Map集合里保存着两组值,一组值用于保存Map里的键(key),另外一组值用于保存Map里的值(value)。key和value都可以是任何类型的数据。Map的Key不重复。
OptMap:本说明书一实施例提供的与Map类似的数据结构,用于存储键数据(key)以及值数据(value),且Key不重复。
图1示出了根据本说明书一实施例提供的一种数据存储方法的结构示意图,如图1所示,在数据同步场景下,需要获取数据并进行存储。具体实现如下:响应于数据存储请求获取键数据以及键数据对应的多个值数据,并确定多个值数据对应的数据类型。确定数据存储请求关联的数据存储结构中预设的数据写入规则,数据存储结构由在目标存储空间中确定的键存储空间和值存储空间组成。按照数据写入规则将键数据存储至键存储空间,以及按照键数据和数据写入规则将多个值数据依次存储至值存储空间。基于存储结果建立键数据、数据类型和多个值数据之间的映射关系,并将映射关系作为数据存储结构的索引信息,索引信息用于获取键数据以及键数据对应的关联数据类型的值数据。
在本说明书中,提供了一种数据存储方法,本说明书同时涉及一种数据存储装置,一种数据读取方法,一种数据读取装置,一种计算设备,以及一种计算机可读存储介质,在下面的实施例中逐一进行详细说明。
图2示出了根据本说明书一实施例提供的一种数据存储方法的流程图,具体包括以下步骤:
步骤S202,响应于数据存储请求获取键数据以及所述键数据对应的多个值数据,并确定所述多个值数据对应的数据类型。
具体的,数据存储请求是指用于对指定数据进行存储的计算机指令,其中,指定的数据可以来自于现有的Map数据结构、也可以是数组或对象(java中的类对象);相应的,键数据和多个值数据构成了需要存储的数据;键数据可以是数据结构的头部,即,key;值数据可以是数据结构中的属性数据,即,value;数据类型可以是char, string, date, int,timestamp, long,bool等通用数据类型。
基于此,接收数据存储请求,基于所述数据获取请求确定键数据以及键数据对应的多个值数据。确定多个值数据对应的数据类型。
进一步的,在进行数据存储时,考虑到存在数据同步的场景,即,在键值对存储空间中获取数据,具体实现如下:
响应于数据存储请求在键值对存储空间获取具有关联关系的多个键值对;根据所述多个键值对中的键标识生成目标键数据,以及根据所述多个键值对确定所述目标键数据对应的多个值数据。
具体的,键值对存储空间可以是Map数据结构对应的存储空间,即,Map数据结构对应的键值对的存储空间,键值对存储空间可以是内存空间、磁盘等任意能够存储键值对的存储空间;关联关系可以是各个键值对中键数据之间的值数据类型关系,例如键数据key1对应的值数据为张**,键数据key2对应的值数据为李**,因此键数据key1和key2均对应姓名这一相同属性的数据;相应的,目标键标识即为根据各个键标识进行重命名获得的能够代表多个键标识的数据;将各个键标识对应的值数据进行整合,作为目标键数据对应的多个值数据。
基于此,接收数据存储请求,基于数据获取请求在键值对存储空间查找具有关联关系的多个键值对;确定多个键值对中每个键值对的键标识组成键标识集合,对键标识结合中的键标识进行整合生成目标键数据。在多个键值对中确定每个目标键数据对应值数据,并组成目标键数据对应的多个值数据。
举例说明,在Map数据结构对应的键值对存储空间确定待处理的键值对:key1:张**;key2:李**;key3:王**;key4:24岁。根据键值对中键对应的值的属性确定key1、key2、key3均表示姓名,因此,基于key1、key2、key3生成目标键数据,即,keyname;将张**、李**和王**;作为目标键数据keyname对应的值数据。
综上所述,在键值对存储空间获取具有关联关系的多个键值对,生成目标键数据并根据多个键值对确定目标键数据对应的多个值数据,实现在键值对存储空间获取原有键值对并进行后续处理。
进一步的,考虑到存在将数组数据或对象(Java中的类对象)以键值对形式存储的需求,因此可以在关联对象存储空间获取键数据和值数据,具体实现如下:
在所述数据存储请求关联对象存储空间的情况下,响应于数据存储请求在所述对象存储空间获取对象属性标识,以及所述对象属性标识对应的多个对象属性数据;将所述对象属性标识作为所述键数据,以及将所述多个对象属性数据作为所述键数据对应的所述多个值数据。
具体的,对象存储空间用于存储数组或对象(Java中的类对象);对象属性标识可以是数组标识或类标识(public class EmployeePojo);相应的,对象属性数据可以是数组中的数据或类标识对应的类数据(姓名、性别等数据)。
基于此,在数据存储请求关联对象存储空间的情况下,接收数据存储请求,基于数据存储请求在对象存储空间获取对象属性标识,以及对象属性标识对应的多个对象属性数据将对象属性标识作为键数据,以及将多个对象属性数据作为键数据对应的多个值数据。以便于后续对键数据和键数据对应的多个值数据进行独立存储。
沿用上例,在对象存储空间存储的为数组的情况下,将数据标识(数组名)作为键数据,以及将数组中的多个数据作为多个值数据;在对象存储空间存储的为类对象:publicclass EmployeePojo { public String firstName;public String lastName; privateLocalDate startDate;}的情况下,将类名EmployeePojo作为键数据,将firstName对应的数据、lastName对应的数据以及LocalDate startDate对应的数据作为键数据对应的多个值数据。
综上所述,基于对象存储空间确定键数据和值数据,提高获取数据的数据源的多样性。
步骤S204,确定所述数据存储请求关联的数据存储结构中预设的数据写入规则,其中,所述数据存储结构由在目标存储空间中确定的键存储空间和值存储空间组成。
具体的,在上述响应于数据存储请求获取键数据以及键数据对应的多个值数据,并确定多个值数据对应的数据类型之后,即可确定数据存储请求关联的数据存储结构中预设的数据写入规则,其中,数据存储结构由在目标存储空间中确定的键存储空间和值存储空间组成,其中,数据存储结构是指键数据和值数据对应的数据结构,是一种关系型数据结构;相应的,数据写入规则表示值数据的写入顺序和写入位置,以及键数据的写入顺序和写入位置;目标存储空间即为与数据存储结果对应的存储空间,目标存储空间可以是磁盘或内存等任意能够存储数据的空间;键数据存储空间用于存储键数据的特定空间,值存储空间用于存储值数据的特定空间。
基于此,在上述响应于数据存储请求获取键数据以及键数据对应的多个值数据,并确定多个值数据对应的数据类型后,确定数据存储请求关联的数据存储结构,并确定数据存储结果中预设的数据写入规则,数据存储结构由键存储空间和值存储空间组成,键存储空间和值存储空间在目标存储空间中确定,键存储空间和值存储空间是通过申请目标存储空间中的部分存储空间获得的。
进一步的,考虑到在进行键数据和值数据进行存储时,所需的数据存储空间大小具有不确定行,因此可以在确定键数据和值数据之前预估所需的键存储空间大小以及值存储,具体实现如下:
在所述目标存储空间中确定所述键存储空间和所述值存储空间,并基于所述键存储空间和所述值存储空间构建所述数据存储结构,以及执行所述响应于数据存储请求获取键数据以及所述键数据对应的多个值数据的步骤,或者,基于所述键数据的数量在所述目标存储空间中确定所述键存储空间和所述值存储空间,并基于所述键存储空间和所述值存储空间构建所述数据存储结构,以及执行所述确定所述数据存储请求关联的数据存储结构中预设的数据写入规则步骤。
基于此,在目标存储空间中确定键存储空间和值存储空间,并基于键存储空间和值存储空间构建数据存储结构,进而在接收到数据存储请求时,基于数据获取请求获取键数据以及键数据对应的多个值数据。此外,还可以在确定键数据和值数据之后,基于键数据的数量在目标存储空间中确定键存储空间,以及值存储空间。基于键存储空间和值存储空间构建数据存储结构,进而确定数据存储请求关联的数据存储结构中预设的数据写入规则,完成数据写入。
综上所述,可以在确定键数据和值数据之前,在目标存储空间中确定键存储空间和值存储空间并构建数据存储结构;还可以在确定键数据和值数据之后,基于确定的键数据数量构建数据存储结构,从而提高数据存储结构构建的灵活性。
步骤S206,按照所述数据写入规则将所述键数据存储至所述键存储空间,以及按照所述键数据和所述数据写入规则将所述多个值数据依次存储至所述值存储空间。
基于此,在上述确定数据存储请求关联的数据存储结构中预设的数据写入规则后,按照数据写入规则将键数据存储至键存储空间,按照数据写入规则将键数据对应的多个值数据依次存储至值存储空间。
进一步的,考虑到在对键数据和值数据进行存储后,还存在对存储后的键数据和值数据进行序列化的场景,因此需要存储与数据类型对应的目标值数据,具体实现如下:
将所述多个值数据分别转换为与所述数据类型对应的目标值数据;按照所述键数据和所述数据写入规则将与所述数据类型对应的目标值数据依次存储至所述值存储空间。
具体的,目标值数据的类型与数据类型对应,在数据类型为布尔型的情况下,在对值数据进行存储时,也需要存储为布尔型的数据,实现将值数据转换为目标值数据,即,实现值数据的类型转换。
基于此,将多个值数据分别转换为与数据类型对应的目标值数据;根据数据写入规则确定每个目标值数据在值存储空间的存储位置,并按照键数据和将与数据类型对应的目标值数据依次存储至值存储空间。
综上所述,在对值数据进行存储之前,将值数据转换为与数据类型对应的目标值数据,从而确保存储至值存储空间的目标值数据具有相同的数据类型。
进一步的,考虑到值存储空间中可以存储多个不同键数据对应值数据,因此在存储键数据对应的多个值数据之前,可以在值存储空间确定与多个值数据对应的存储空间,具体实现如下:
基于所述数据写入规则中的值数据写入规则在所述值存储空间中确定值存储子空间;按照所述键数据将所述多个值数据依次存储至所述值存储空间中的所述值存储子空间。
具体的,值数据写入规则表示值数据在值存储空间的写入位置和写入顺序;值存储子空间是指在值存储空间中确定的用于存储键数据对应的多个值数据的存储空间,值存储子空间可以是数组结构,将值数据以数组的形式存储至值存储子空间。
基于此,基于数据写入规则中的值数据写入规则在值存储空间中确定数组结构的值存储子空间,并将值数据的排列顺序作为数据写入顺序。按照键数据将多个值数据依次存储至值存储空间中的值存储子空间。
沿用上例,在确定多个值数据:张**;李**;王**后,在确定的值存储空间中确定能够存储多个值数据的固定大小的值存储子空间,用于存储多个值数据。
综上所述,在值存储空间中确定值存储子空间,将多个值数据依次存储至值存储空间中的值存储子空间,从而实现在值存储空间中确定与键数据对应的存储空间,用于存储键数据对应的值数据,提高数据存储的规范性。
此外,还可以在将多个值数据分别转换为与数据类型对应的目标值数据后,基于数据写入规则中的值数据写入规则在值存储空间中确定数组结构的值存储子空间,并将目标值数据的排列顺序作为数据写入顺序。按照键数据将目标值数据依次存储至值存储空间中的值存储子空间。从而确保存储至值存储子空间的中的目标值数据为相同数据类型的数据。
进一步的,考虑到键存储空间可以是数组结构,为了便于确定键数据的排列位置,可以在确定键数据的键写入标识后,再对键数据进行存储,具体实现如下:
按照所述数据写入规则中的键数据写入规则,确定所述键数据的键写入标识,其中,所述键写入标识根据前序键写入标识确定;将所述键数据存储至所述键存储空间中所述键写入标识对应的键存储子空间。
具体的,键数据写入规则表示键数据在键存储空间的写入位置和写入顺序;键写入标识用于表示键数据在键存储空间中的存储位置,建立键数据与键写入标识之间的映射,键写入标识可以表示为1、2、3等数字,也可以表示为a、b、c等字母,能够表示键数据的写入顺序和写入位置即可,本实施例不对键写入标识的具体表达形式进行限定;键存储子空间是指键存储空间中键数据对应的存储位置,在键存储空间为数组的情况下,键存储子空间即为数组中的存储位置。
基于此,按照数据写入规则中的键数据写入规则,确定键数据在键存储空间中的键写入标识,键写入标识可以根据前序键写入标识确定。将键数据存储至键存储空间中键存储子空间中键写入标识对应的存储位置,建立键数据和键写入标识之间的映射关系,并存储映射关系。
沿用上例,键存储空间可以是数组的存储结构,键数据存储至键存储空间时是按照数组中数组元素存储空间依次存储的。在待存储的键数据依次为key1、key2、key3的情况下,确定键数据key1的键写入标识1,建立键数据key1和键写入标识1之间的映射;确定键数据key2的键写入标识2,建立键数据key2和键写入标识2之间的映射;以及确定键数据key3的键写入标识3,建立键数据key3和键写入标识3之间的映射。在存储键数据时,同时存储键数据和键写入标识之间的映射关系。从而在针对特定的键数据进行处理时,能够根据键写入标识确定键数据的排列位置。
综上所述,在存储键数据时,确定键数据的键写入标识,从而能够根据键写入标识快速确定键数据的写入顺序和写入位置,实现键数据的快速定位。
步骤S208,基于存储结果建立所述键数据、所述数据类型和所述多个值数据之间的映射关系,并将所述映射关系作为所述数据存储结构的索引信息。
具体的,在上述按照数据写入规则将键数据存储至键存储空间,以及按照键数据和数据写入规则将多个值数据依次存储至值存储空间之后,即可基于存储结果建立键数据、数据类型和多个值数据之间的映射关系,并将映射关系作为数据存储结构的索引信息,其中,映射关系通过键数据、数据类型和多个值数据分别对应的指针表示,当键数据对应的指针指向特定键数据时,数据类型的指针指向特定键数据对应的数据类型,值数据的指针指向特定键数据对应的值数据,索引信息记录键数据、数据类型以及值数据之间的映射关系,基于索引信息可以确定键数据、数据类型以及值数据三者中的任意一个或多个。
基于此,在上述按照数据写入规则将键数据存储至键存储空间,以及按照键数据和数据写入规则将多个值数据依次存储至值存储空间后,基于键数据的存储位置、数据类型的存储位置以及值数据的存储位置等存储结果建立键数据、数据类型和多个值数据之间的映射关系,并将映射关系作为数据存储结构的索引信息。
沿用上例,如图3所示,在将键数据存储至键存储空间以及键值数据存储至值存储空间,即,将键数据:键1、键2、键3、键4直至键N存储至键存储空间,以及将每个键数据对应的多个值数据值1、值2、值3、值4直至值N存储至相应的值存储空间后。建立键1、类型1以及键1对应的值三者之间的映射关系,以及键2至键N分别对应的映射关系。映射关系可以作为索引信息,根据索引信息可以实现对键数据、值数据以及数据类型的查询等处理。
进一步的,考虑到将键数据和值数据存储完成后,由于存在针对值数据进行数据操作的需求,因此可以基于键数据确定值数据并对值数据进行相应的操作,具体实现如下:
接收针对存储所述键数据的键存储空间的数据操作请求,并对所述数据操作请求进行解析获得键操作标识;基于所述键操作标识确定与所述数据存储结构关联的索引信息,按照所述索引信息在所述键存储空间确定键数据;按照所述索引信息和所述键数据确定值存储空间,并在所述值存储空间中对所述数据操作请求对应的值数据进行数据操作。
具体的,数据操作请求是指针对键数据对应的值数据进行操作的计算机指令,其中,数据操作可以是针对指定键数据对应的值数据进行修改处理、更新处理和删除处理,也可以指定键数据,并在键数据对应的值存储空间插入值数据。键操作标识可以是键数据对应的键名,也可以是键数据对应的键写入标识;数据操作可以是针对指定的值数据进行修改、删除、查询,读取,或针对键数据添加值数据。
基于此,在建立键数据、数据类型和多个值数据之间的映射关系后,可以针对指定的值数据进行操作。接收到针对存储键数据的键存储空间的数据操作请求后,对数据操作请求进行解析即可获得键操作标识;基于键操作标识确定与数据存储结构关联的索引信息,按照索引信息在键存储空间确定键数据;按照索引信息和键数据确定值存储空间,并在值存储空间中对数据操作请求对应的值数据进行数据操作,数据操作可以通过调用函数实现。
沿用上例,在需要对支持空间中已经存储的值数据进行操作时,可以通过查找指定的键的方式修改指定键的值,以及实现值的修改插入,或针对指定的键插入指定的值。可以针对键1对应的值数据值1进行修改,或者在值1之后插入值数据值2。或者将值1修改为值3。实现对键数据对应的值数据进行指定操作。与Map数据结构类似,数据存储结构中插入指定键的值可以通过调用函数OptMap.put(k,v)实现;插入但不修改指定键的值可以通过调用函数OptMap.putIfAbsent (k,v)实现;修改指定键的值可以通过调用函数OptMap.put(k,v)实现;删除指定键的值可以通过调用函数OptMap.remove(k,v)实现。
综上所述,基于键数据确定值数据并对值数据进行数据操作,从而提高数据的可操作性。通过键数据确定被操作的值数据,提高数据操作的准确性。
进一步的,将键数据和值数据存储完成后,还可以实现数据访问,具体实现如下:
在接收到携带键信息的键数据查询请求的情况下,基于所述键信息在所述键存储空间进行查询,并基于第一键查询结果执行目标键任务;或者,
在接收到携带键信息的键数据查询请求的情况下,基于所述键信息在所述键存储空间进行查询,并基于第二键查询结果查询目标值存储空间,根据值查询结果执行目标值任务。
具体的,键信息可以是键名,也可以是键数据的存储标识,键数据查询请求用于在键存储空间查询与键信息对应的键数据,可以实现判断指定的键数据是否存在;值数据查询请求用于在值存储空间查询与键信息对应的值数据,可以实现判断指定的值数据是否存在;相应的,第一键查询结果可以是与键数据查询请求对应的查询到的键数据,也可以是键数据存在或键数据不存在等表示键数据存在与否的查询结果;第二键数据查询结果可以是键数据存在或键数据不存在等表示键数据存在与否的查询结果,也可以是与键数据查询请求对应的查询到的键数据。目标键任务可以是键数据的查询任务,在键数据不存在的情况下可以在键存储空间中插入键数据;相应的,目标值任务可以是值数据的查询任务,在值数据不存在的情况下可以在目标值存储空间中插入值数据。键数据的查询以及目标值存储空间的查询可以通过调用函数实现。
基于此,在接收到携带键信息的键数据查询请求的情况下,对键数据查询请求进行解析获得键信息,基于键信息在键存储空间中进行查询,获得键数据存在或不存在的第一键查询结果;若键数据存在,可以获得查找到的键数据,作为数据查询请求的反馈,完成指定键数据的查询。或者,在获得键数据存在或不存在的第一键查询结果后,若键数据存在,可以基于查找确定的键数据在与键数据对应的目标值存储空间中进行值数据的查询,完成指定值数据的查询。若查询到值数据,表示目标值存储空间中已经存储了该值数据;若未查询到值数据,表示目标值存储空间中未存储该值数据,可以将该值数据添加至目标值存储空间。
沿用上例,在数据存储结构中,与Map数据结构类似的,键数据的查询可以通过调用函数OptMap.containsKey(key)实现。在键存储空间中不存在键数据的情况下,可以在键存储空间中添加键数据;值数据的查询可以通过调用函数OptMap.containsValue(val)实现。在值存储空间中不存在值数据的情况下,可以在键数据对应的值存储空间中添加值数据。
综上所述,基于键信息在键存储空间中进行查询,获得键数据存在或不存在的键查询结果;以及基于值信息在值存储空间中进行查询,获得值数据存在或不存在的值查询结果。提高数据查询的便利性,实现在数据插入前对键存储空间以及值存储空间进行检测。
本说明书提供的数据存储方法,响应于数据存储请求获取键数据以及键数据对应的多个值数据,并确定多个值数据对应的数据类型;确定数据存储请求关联的数据存储结构中预设的数据写入规则,其中,数据存储结构由在目标存储空间中确定的键存储空间和值存储空间组成;按照数据写入规则将键数据存储至键存储空间,以及按照键数据和数据写入规则将多个值数据依次存储至值存储空间;基于存储结果建立键数据、数据类型和多个值数据之间的映射关系,并将映射关系作为数据存储结构的索引信息。本说明书一实施例通过将键数据存储至键存储空间,以及按照键数据和数据写入规则将多个值数据依次存储至值存储空间,实现了对键数据和值数据进行独立存储。减少了键数据的冗余存储次数,节省了大量的存储空间。
下述结合附图4,以本说明书提供的数据存储方法在业务数据存储的应用为例,对所述数据存储方法进行进一步说明。其中,图4示出了本说明书一实施例提供的一种应用于业务数据存储的数据存储方法的处理流程图,具体包括以下步骤:
步骤S402,基于键数据的数量在目标存储空间中确定键存储空间和值存储空间,并基于键存储空间和值存储空间构建数据存储结构。
在对数据处理业务对应的数据集进行存储的场景下,与Map数据结构类似的,通过调用函数new OptMap(fieldCount)并指定键的数量即可构建OptMap对象,完成数据存储结构的初始化。
步骤S404,获取键数据以及键数据对应的多个值数据,并确定多个值数据对应的数据类型。
设置哈希的键以及对应值的类型。通过调用函数addField添加单独的键(key)数据至键存储空间(即optMap.addField(fieldName,fieldType));或者通过调用函数addFields批量添加预构建键(key)数据至键存储空间(即optMap.addFields(fieldNames,fieldTypes)),设置每个key对应value的数据类型可以在反序列化时避免将值数据全部转为字符串类型。实现了可以在现有Map数据结构快速切换到OptMap数据结构。基于现有Map数据结构中的键数据确定OptMap数据结构对应的键数据,即,通过调用buildFromMap以Map数据结构作为入参构建OptMap数据结构对应的键。解析出Map中的每个键,以及键对应值的数据类型,调用addField设置为OptMap数据结构对应的键数据。可以通过建立键和键存储空间中数组下标之间的映射缓存,便于快速定位键数据。
步骤S406,按照数据写入规则将键数据存储至键存储空间,以及按照键数据和数据写入规则将多个值数据依次存储至值存储空间。
在向值存储空间插入值数据时,可以以OptMap方式插入,以单行和多行方式添加各个键对应的值组成的数组或者对象。在值数据为对象的情况下,则对象与键名对应的属性值可以被记录为值数据。还可以将Map数据结构转换为OptMap数据结构。将Map数据结构对应的列表中数据转换为键数据。
步骤S408,基于存储结果建立键数据、数据类型和多个值数据之间的映射关系,并将映射关系作为数据存储结构的索引信息。
键数据、值数据、数据类型分别对应指针,在遍历时三个指针同步变化。
步骤S410,响应于数据操作请求确定与数据存储结构关联的索引信息,按照索引信息在键存储空间确定键数据。
步骤S412,按照索引信息和键数据确定值存储空间,并在值存储空间中对数据操作请求对应的值数据进行数据操作。
在将键数据和值数据存储完成后,可以指定键数据,在键数据对应的值存储空间中插入新的值数据,替换原有值数据;还可以在键数据对应的值存储空间中插入不存在的值数据;还可以对键数据对应的值数据进行修改或删除,以及查询指定键数据对应的值数据,若值数据不存在,则返回空标识(null)。
需要说明的是,步骤S410和步骤S412对应的数据操作与上述步骤S408的执行并不具备连续性,存在数据操作需求时,可以通过步骤S410和步骤S412实现数据操作。
步骤S414,在接收到携带键信息的键数据查询请求的情况下,基于键信息在键存储空间中进行查询,获得键查询结果。
OptMap数据存储结构中提供键数据访问功能,可以通过调用函数OptMap.containsKey(key)判断指定的键数据是否存在。
步骤S416,在接收到携带值信息的值数据查询请求的情况下,基于值信息在值存储空间中进行查询,获得值查询结果。
OptMap数据存储结构中提供值数据访问功能,可以通过调用函数OptMap.containsValue(val)判断指定的值数据是否存在。键数据以及值数据的查询,兼容标准Map的通用接口,使得基于OptMap代替Map时,不会出现行为不一致的情况。
步骤S418,对键数据和值数据进行序列化以及返序列化。
OptMap数据存储结构中提供序列化和反序列化功能,通过系列化可以高效、灵活的实现服务间的数据传输,由于维护了数据类型这一属性,序列化后非二进制类型会被表示为文本类型,同时包含每个键的类型。与序列化相对应,还支持人工创建的字节流和基于序列化直接生成的字节流反序列化为OptMap对象,以便于后续应用重构后使用。
需要说明的是,步骤S414、步骤S416和步骤S418,与前序步骤S410和步骤S412的执行并不具备连续性。在步骤S408执行完成后,存在键数据查询、值数据查询等需求时,执行相应的步骤即可。
综上所述,在对键数据和值数据进行存储的同时维护了值数据对应的数据类型,以及建立了键数据、数据类型和多个值数据之间的映射关系,从而在遍历时,基于键数据对应的指针、数据类型对应的指针和多个值数据对应的指针可以同步实现遍历。通过维护数据结构使得在后续进行序列化和反序列化是不会出现数据类型维度的错误,由于通过c/java/go等语言进行逻辑实现和存储布局的方式相同,从而可以支持跨平台和跨语言实现。保持了和Map数据结构类似的函数调用逻辑,实现对Map的兼容。由于键数据和值数据独立存储,避免了键数据冗余,节省了存储空间的同时,降低了CPU执行存储管理等任务的耗时。
与上述方法实施例相对应,本说明书还提供了数据存储装置实施例,图5示出了本说明书一实施例提供的一种数据存储装置的结构示意图。如图5所示,该装置包括:
获取模块502,被配置为响应于数据存储请求获取键数据以及所述键数据对应的多个值数据,并确定所述多个值数据对应的数据类型;
确定模块504,被配置为确定所述数据存储请求关联的数据存储结构中预设的数据写入规则,其中,所述数据存储结构由在目标存储空间中确定的键存储空间和值存储空间组成;
存储模块506,被配置为按照所述数据写入规则将所述键数据存储至所述键存储空间,以及按照所述键数据和所述数据写入规则将所述多个值数据依次存储至所述值存储空间;
建立模块508,被配置为基于存储结果建立所述键数据、所述数据类型和所述多个值数据之间的映射关系,并将所述映射关系作为所述数据存储结构的索引信息。
一个可选地实施例中,所述获取模块502,进一步被配置为:
响应于数据存储请求在键值对存储空间获取具有关联关系的多个键值对;
根据所述多个键值对中的键标识生成目标键数据,以及根据所述多个键值对确定所述目标键数据对应的多个值数据。
一个可选地实施例中,所述获取模块502,进一步被配置为:
在所述数据存储请求关联对象存储空间的情况下,响应于数据存储请求在所述对象存储空间获取对象属性标识,以及所述对象属性标识对应的多个对象属性数据;
将所述对象属性标识作为所述键数据,以及将所述多个对象属性数据作为所述键数据对应的所述多个值数据。
一个可选地实施例中,所述确定模块504,还被配置为:
在所述目标存储空间中确定所述键存储空间和所述值存储空间,并基于所述键存储空间和所述值存储空间构建所述数据存储结构,以及执行所述响应于数据存储请求获取键数据以及所述键数据对应的多个值数据的步骤,或者,
基于所述键数据的数量在所述目标存储空间中确定所述键存储空间和所述值存储空间,并基于所述键存储空间和所述值存储空间构建所述数据存储结构,以及执行所述确定所述数据存储请求关联的数据存储结构中预设的数据写入规则步骤。
一个可选地实施例中,所述存储模块506,进一步被配置为:
将所述多个值数据分别转换为与所述数据类型对应的目标值数据;
按照所述键数据和所述数据写入规则将与所述数据类型对应的目标值数据依次存储至所述值存储空间。
一个可选地实施例中,所述存储模块506,进一步被配置为:
基于所述数据写入规则中的值数据写入规则在所述值存储空间中确定值存储子空间;
按照所述键数据将所述多个值数据依次存储至所述值存储空间中的所述值存储子空间。
一个可选地实施例中,所述存储模块506,进一步被配置为:
按照所述数据写入规则中的键数据写入规则,确定所述键数据的键写入标识,其中,所述键写入标识根据前序键写入标识确定;
将所述键数据存储至所述键存储空间中所述键写入标识对应的键存储子空间。
一个可选地实施例中,所述建立模块508,还被配置为:
接收针对存储所述键数据的键存储空间的数据操作请求,并对所述数据操作请求进行解析获得键操作标识;
基于所述键操作标识确定与所述数据存储结构关联的索引信息,按照所述索引信息在所述键存储空间确定键数据;
按照所述索引信息和所述键数据确定值存储空间,并在所述值存储空间中对所述数据操作请求对应的值数据进行数据操作。
一个可选地实施例中,所述建立模块508,还被配置为:
在接收到携带键信息的键数据查询请求的情况下,基于所述键信息在所述键存储空间进行查询,并基于第一键查询结果执行目标键任务;或者,
在接收到携带键信息的键数据查询请求的情况下,基于所述键信息在所述键存储空间进行查询,并基于第二键查询结果查询目标值存储空间,根据值查询结果执行目标值任务。
本说明书提供的数据存储方法,响应于数据存储请求获取键数据以及键数据对应的多个值数据,并确定多个值数据对应的数据类型;确定数据存储请求关联的数据存储结构中预设的数据写入规则,其中,数据存储结构由在目标存储空间中确定的键存储空间和值存储空间组成;按照数据写入规则将键数据存储至键存储空间,以及按照键数据和数据写入规则将多个值数据依次存储至值存储空间;基于存储结果建立键数据、数据类型和多个值数据之间的映射关系,并将映射关系作为数据存储结构的索引信息。本说明书一实施例通过将键数据存储至键存储空间,以及按照键数据和数据写入规则将多个值数据依次存储至值存储空间,实现了对键数据和值数据进行独立存储。减少了键数据的冗余存储次数,节省了大量的存储空间。
上述为本实施例的一种数据存储装置的示意性方案。需要说明的是,该数据存储装置的技术方案与上述的数据存储方法的技术方案属于同一构思,数据存储装置的技术方案未详细描述的细节内容,均可以参见上述数据存储方法的技术方案的描述。
图6示出了根据本说明书一实施例提供的一种数据读取方法的流程图,具体包括以下步骤:
步骤S602,接收数据读取请求,并对所述数据读取请求进行解析获得数据存储标识;
步骤S604,基于所述数据存储标识确定与数据存储结构关联的索引信息,其中,所述数据存储结构由在目标存储空间中确定的键存储空间和值存储空间组成;
步骤S606,按照所述索引信息在所述键存储空间读取键数据,以及在所述值存储空间依次读取与所述键数据对应的多个值数据。
具体的,数据读取请求对应针对数据存储结构的序列化操作,用于实现数据存储结构对应的键数据以及值数据的数据同步、数据传输等操作;数据存储标识可以是待序列化的键数据的键名、键数据的存储标识,用于确定指定的键数据,索引信息记录键数据、数据类型以及值数据之间的映射关系,通过确定键数据对应的索引信息即可确定对应的值数据以及数据类型。
基于此,在接收到用于对数据存储结构对应的键数据以及值数据进行序列化的数据读取请求后,对数据读取请求进行解析获得待读取的键数据的数据存储标识。基于数据存储标识查找索引信息表中存储的索引信息,确定与数据存储结构关联的索引信息,由于数据存储结构由在目标存储空间中确定的键存储空间和值存储空间组成,索引信息记录键数据、数据类型以及值数据之间的映射关系,按照索引信息即可在键存储空间读取键数据,以及在值存储空间依次读取与键数据对应的多个值数据,实现对数据存储结构对应的键数据和值数据的序列化。
实际应用中,由于索引信息记录键数据、数据类型以及值数据之间的映射关系,因此在序列化过程中,基于索引信息即可确定存储键数据的键存储空间,以及存储值数据的值存储空间。
进一步的,考虑到数据读取过程中,也就是序列化过程中容易对值数据的类型产生误判,因此结合预先确定的数据类型进行序列化,即可避免这一问题,具体实现如下:
在所述值存储子空间依次读取与所述键数据对应的多个初始值数据,并将所述多个初始值数据分别转换为与所述数据类型对应的值数据。
具体的,初始值数据即为键存储空间中存储的键数据,相应的,值数据即为对初始值数据进行数据类型转换后获得的值数据;在初始值数据为非二进制类型的情况下,会将初始值数据转换为文本类型的值数据。
基于此,在值存储子空间依次读取与键数据对应的多个初始值数据,并对初始值数据的数据类型进行判断,在初始值数据为非二进制类型的情况下,可以将多个初始值数据分别转换为与数据类型对应的文本类型的值数据。
举例说明,将确定的键数据以及值数据存储至键存储空间和值存储空间,以及通过遍历实现键数据和值数据的序列化,可以通过下述代码实现:
OptMap optMap = new OptMap();
List<String>fieldNames = new ArrayList<>();
fieldNames.add("key1");
fieldNames.add("key2");
List<Class>fieldTypes = new ArrayList<>();
fieldTypes.add(String.class);
fieldTypes.add(BigDecimal.class);
optMap.addFields(fieldNames,fieldTypes);
List<Object[]>rows = new ArrayList<>();
for (int i=0;i<10;i++) {
Object[] row = new Object[2];
row[0] = "f" + (i+1);
row[1] = new BigDecimal(1);
rows.add(row);
}
optMap.addRows(rows);
optMap.next();
optMap.put("key1","put加入");
optMap.putIfAbsent("key2","put加入不了");
while(optMap.hasNext()) {
optMap.next();
for (Map.Entry entry : optMap.entrySet()) {
entry.getValue();
}
}
序列化后获得:{"hd":{"id","value"},”typ”:{“S”,”BD”},"data":[{"put加入",1},{"f2",1},{"f3",1},{"f4",1},{"f5",1},{"f6",1},{"f7",1},{"f8",1},{"f9",1},{"f10",1}]}。
综上所述,在值存储空间依次读取与键数据对应的符合数据类型的多个值数据,实现对数据存储结构对应的键数据和值数据的序列化,避免在序列化过程中出现数据误判。
进一步的,考虑到键数据和值数据存储后,存在迁移、数据同步等需求,因此可以通过反序列化执行相应的数据处理任务,具体实现如下:
响应于针对数据处理任务的数据处理指令,对所述键数据对应的键字节流和所述多个值数据对应的值字节流进行反序列化;根据反序列化结果确定所述键数据对应的重构键数据,以及所述多个值数据对应的重构值数据;基于所述重构键数据和所述重构值数据执行所述数据处理任务。
具体的,数据处理任务可以是数据迁移、数据同步以及数据比对等任务;相应的,数据处理指令用于实现对键数据以及键数据对应的多个值数据进行反序列化处理,用于实现键数据以及值数据的重构;键字节流是指对键数据进行序列化处理后获得的键数据对应的字节形式的键数据;值字节流是指对值数据进行序列化处理后获得的值数据对应的字节流形式的值数据;重构键数据是指对键字节流进行反序列化处理后获得的键数据,重构值数据是指对值字节流进行反序列化处理后获得的值数据,重构值数据和重构键数据用于完成数据迁移后的数据恢复,使得迁移后的数据能够辅助完成数据查询等服务。
基于此,在执行数据处理任务时,接收针对数据处理任务的数据处理指令。对键数据进行序列化处理获得键数据对应的键字节流,以及对多个值数据分别进行序列化处理获得值数据对应的值字节流。基于数据处理指令对键数据对应的键字节流和多个值数据对应的值字节流进行反序列化;根据反序列化结果确定键数据对应的重构键数据,以及多个值数据对应的重构值数据。基于重构键数据和重构值数据执行数据处理任务。在数据处理任务为数据迁移、数据同步任务的情况下,将重构键数据和重构值数据存储至数据迁移任务或数据同步任务对应的目标存储空间。
沿用上例,在对键数据以及值数据进行序列化获得序列化后获得:{"hd":{"id","value"},”typ”:{“S”,”BD”},"data":[{"put加入",1},{"f2",1},{"f3",1},{"f4",1},{"f5",1},{"f6",1},{"f7",1},{"f8",1},{"f9",1},{"f10",1}]}后。为了实现将键数据以及值数据同步至目标存储空间,还可以对序列化后获得的键数据以及值数据进行反序列化,并存储至目标存储空间。使得目标存储空间的键数据和值数据能够支持数据处理相关的业务。
综上所述,在接收到用于对数据存储结构对应的键数据以及值数据进行序列化的数据读取请求后,对数据读取请求进行解析获得待读取的键数据的数据存储标识。基于数据存储标识查找索引信息表中存储的索引信息,确定与数据存储结构关联的索引信息,在值存储空间依次读取与键数据对应的多个值数据,实现对数据存储结构对应的键数据和值数据的序列化。从而避免在序列化过程中出现数据误判,提高序列化的准确性,同时由于与c/java/go实现逻辑和存储布局相同,因此支持跨平台和语言实现数据读取。
与上述方法实施例相对应,本说明书还提供了数据读取装置实施例,图7示出了本说明书一实施例提供的一种数据读取装置的结构示意图。如图7所示,该装置包括:
接收模块702,被配置为接收数据读取请求,并对所述数据读取请求进行解析获得数据存储标识;
确定模块704,被配置为基于所述数据存储标识确定与数据存储结构关联的索引信息,其中,所述数据存储结构由在目标存储空间中确定的键存储空间和值存储空间组成;
读取模块706,被配置为按照所述索引信息在所述键存储空间读取键数据,以及在所述值存储空间依次读取与所述键数据对应的多个值数据。
一个可选地实施例中,所述读取模块706,进一步被配置为:
在所述值存储子空间依次读取与所述键数据对应的多个初始值数据,并将所述多个初始值数据分别转换为与所述数据类型对应的值数据。
一个可选地实施例中,所述读取模块706,进一步被配置为:
响应于针对数据处理任务的数据处理指令,对所述键数据对应的键字节流和所述多个值数据对应的值字节流进行反序列化;根据反序列化结果确定所述键数据对应的重构键数据,以及所述多个值数据对应的重构值数据;基于所述重构键数据和所述重构值数据执行所述数据处理任务。
综上所述,在接收到用于对数据存储结构对应的键数据以及值数据进行序列化的数据读取请求后,对数据读取请求进行解析获得待读取的键数据的数据存储标识。基于数据存储标识查找索引信息表中存储的索引信息,确定与数据存储结构关联的索引信息,在值存储空间依次读取与键数据对应的多个值数据,实现对数据存储结构对应的键数据和值数据的序列化。从而避免在序列化过程中出现数据误判,提高序列化的准确性,同时由于与c/java/go实现逻辑和存储布局相同,因此支持跨平台和语言实现数据读取。
上述为本实施例的一种数据读取装置的示意性方案。需要说明的是,该数据读取装置的技术方案与上述的数据读取方法的技术方案属于同一构思,数据读取装置的技术方案未详细描述的细节内容,均可以参见上述数据读取方法的技术方案的描述。
图8示出了根据本说明书一实施例提供的一种计算设备800的结构框图。该计算设备800的部件包括但不限于存储器810和处理器820。处理器820与存储器810通过总线830相连接,数据库850用于保存数据。
计算设备800还包括接入设备840,接入设备840使得计算设备800能够经由一个或多个网络860通信。这些网络的示例包括公用交换电话网(PSTN)、局域网(LAN)、广域网(WAN)、个域网(PAN)或诸如因特网的通信网络的组合。接入设备840可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(NIC))中的一个或多个,诸如IEEE802.11无线局域网(WLAN)无线接口、全球微波互联接入(Wi-MAX)接口、以太网接口、通用串行总线(USB)接口、蜂窝网络接口、蓝牙接口、近场通信(NFC)接口,等等。
在本说明书的一个实施例中,计算设备800的上述部件以及图8中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图8所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
计算设备800可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或PC的静止计算设备。计算设备800还可以是移动式或静止式的服务器。
其中,处理器820用于执行如下计算机可执行指令,该计算机可执行指令被处理器执行时实现上述数据存储方法的步骤。
上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的数据存储方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述数据存储方法的技术方案的描述。
本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现上述数据存储方法的步骤。
上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的数据存储方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述数据存储方法的技术方案的描述。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书并不受所描述的动作顺序的限制,因为依据本说明书,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。

Claims (15)

1.一种数据存储方法,其特征在于,包括:
响应于数据存储请求在数据结构对应的键值对存储空间获取键数据以及所述键数据对应的多个值数据,并确定所述多个值数据对应的数据类型,其中,一个键数据对应多个值数据,所述键数据和所述多个值数据来自于Map数据结构、数组或Java类对象;
确定所述数据存储请求关联的数据存储结构中预设的数据写入规则,其中,所述数据存储结构由在目标存储空间中确定的键存储空间和值存储空间组成;
按照所述数据写入规则将所述键数据存储至所述键存储空间,以及按照所述键数据和所述数据写入规则将所述多个值数据依次存储至所述值存储空间;
基于存储结果建立所述键数据、所述数据类型和所述多个值数据之间的映射关系,并将所述映射关系作为所述数据存储结构的索引信息,所述映射关系通过所述键数据、所述数据类型和所述多个值数据分别对应的指针表示,所述索引信息用于基于所述键数据对应的指针、所述数据类型对应的指针和所述多个值数据对应的指针,同步进行数据遍历。
2.根据权利要求1所述的数据存储方法,其特征在于,所述响应于数据存储请求获取键数据以及所述键数据对应的多个值数据,包括:
响应于数据存储请求在键值对存储空间获取具有关联关系的多个键值对;
根据所述多个键值对中的键标识生成目标键数据,以及根据所述多个键值对确定所述目标键数据对应的多个值数据。
3.根据权利要求1所述的数据存储方法,其特征在于,所述响应于数据存储请求获取键数据以及所述键数据对应的多个值数据,包括:
在所述数据存储请求关联对象存储空间的情况下,响应于数据存储请求在所述对象存储空间获取对象属性标识,以及所述对象属性标识对应的多个对象属性数据;
将所述对象属性标识作为所述键数据,以及将所述多个对象属性数据作为所述键数据对应的所述多个值数据。
4.根据权利要求1所述的数据存储方法,其特征在于,所述方法还包括:
在所述目标存储空间中确定所述键存储空间和所述值存储空间,并基于所述键存储空间和所述值存储空间构建所述数据存储结构,以及执行所述响应于数据存储请求获取键数据以及所述键数据对应的多个值数据的步骤,或者,
基于所述键数据的数量在所述目标存储空间中确定所述键存储空间和所述值存储空间,并基于所述键存储空间和所述值存储空间构建所述数据存储结构,以及执行所述确定所述数据存储请求关联的数据存储结构中预设的数据写入规则步骤。
5.根据权利要求1所述的数据存储方法,其特征在于,所述按照所述键数据和所述数据写入规则将所述多个值数据依次存储至所述值存储空间,包括:
将所述多个值数据分别转换为与所述数据类型对应的目标值数据;
按照所述键数据和所述数据写入规则将与所述数据类型对应的目标值数据依次存储至所述值存储空间。
6.根据权利要求1所述的数据存储方法,其特征在于,所述按照所述键数据和所述数据写入规则将所述多个值数据依次存储至所述值存储空间,包括:
基于所述数据写入规则中的值数据写入规则在所述值存储空间中确定值存储子空间;
按照所述键数据将所述多个值数据依次存储至所述值存储空间中的所述值存储子空间。
7.根据权利要求1所述的数据存储方法,其特征在于,所述按照所述数据写入规则将所述键数据存储至所述键存储空间,包括:
按照所述数据写入规则中的键数据写入规则,确定所述键数据的键写入标识,其中,所述键写入标识根据前序键写入标识确定;
将所述键数据存储至所述键存储空间中所述键写入标识对应的键存储子空间。
8.根据权利要求1所述的数据存储方法,其特征在于,所述基于存储结果建立所述键数据、所述数据类型和所述多个值数据之间的映射关系,并将所述映射关系作为所述数据存储结构的索引信息之后,还包括:
接收针对存储所述键数据的键存储空间的数据操作请求,并对所述数据操作请求进行解析获得键操作标识;
基于所述键操作标识确定与所述数据存储结构关联的索引信息,按照所述索引信息在所述键存储空间确定键数据;
按照所述索引信息和所述键数据确定值存储空间,并在所述值存储空间中对所述数据操作请求对应的值数据进行数据操作。
9.根据权利要求1所述的数据存储方法,其特征在于,所述基于存储结果建立所述键数据、所述数据类型和所述多个值数据之间的映射关系,并将所述映射关系作为所述数据存储结构的索引信息之后,还包括:
在接收到携带键信息的键数据查询请求的情况下,基于所述键信息在所述键存储空间进行查询,并基于第一键查询结果执行目标键任务;或者,
在接收到携带键信息的键数据查询请求的情况下,基于所述键信息在所述键存储空间进行查询,并基于第二键查询结果查询目标值存储空间,根据值查询结果执行目标值任务。
10.一种数据读取方法,其特征在于,包括:
接收数据读取请求,并对所述数据读取请求进行解析获得数据存储标识;
基于所述数据存储标识确定与数据存储结构关联的索引信息,其中,所述数据存储结构由在目标存储空间中确定的键存储空间和值存储空间组成;
按照所述索引信息在所述键存储空间读取键数据,以及在所述值存储空间依次读取与所述键数据对应的多个值数据,其中,一个键数据对应多个值数据,所述键数据和所述多个值数据来自于Map数据结构、数组或Java类对象。
11.根据权利要求10所述的数据读取方法,其特征在于,所述在所述值存储空间依次读取与所述键数据对应的多个值数据,包括:
在所述值存储子空间依次读取与所述键数据对应的多个初始值数据,并将所述多个初始值数据分别转换为与所述数据类型对应的值数据。
12.根据权利要求10所述的数据读取方法,其特征在于,所述按照所述索引信息在所述键存储空间读取键数据,以及在所述值存储空间依次读取与所述键数据对应的多个值数据之后,还包括:
响应于针对数据处理任务的数据处理指令,对所述键数据对应的键字节流和所述多个值数据对应的值字节流进行反序列化;
根据反序列化结果确定所述键数据对应的重构键数据,以及所述多个值数据对应的重构值数据;
基于所述重构键数据和所述重构值数据执行所述数据处理任务。
13.一种数据存储装置,其特征在于,包括:
获取模块,被配置为响应于数据存储请求在数据结构对应的键值对存储空间获取键数据以及所述键数据对应的多个值数据,并确定所述多个值数据对应的数据类型,其中,一个键数据对应多个值数据,所述键数据和所述多个值数据来自于Map数据结构、数组或Java类对象;
确定模块,被配置为确定所述数据存储请求关联的数据存储结构中预设的数据写入规则,其中,所述数据存储结构由在目标存储空间中确定的键存储空间和值存储空间组成;
存储模块,被配置为按照所述数据写入规则将所述键数据存储至所述键存储空间,以及按照所述键数据和所述数据写入规则将所述多个值数据依次存储至所述值存储空间;
建立模块,被配置为基于存储结果建立所述键数据、所述数据类型和所述多个值数据之间的映射关系,并将所述映射关系作为所述数据存储结构的索引信息,所述映射关系通过所述键数据、所述数据类型和所述多个值数据分别对应的指针表示,所述索引信息用于基于所述键数据对应的指针、所述数据类型对应的指针和所述多个值数据对应的指针,同步进行数据遍历。
14.一种计算设备,其特征在于,包括存储器和处理器;所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,以实现权利要求1至12任意一项所述方法的步骤。
15.一种计算机可读存储介质,其存储有计算机指令,其特征在于,该指令被处理器执行时实现权利要求1至12任意一项所述方法的步骤。
CN202311433168.7A 2023-11-01 2023-11-01 数据存储方法及装置 Active CN117149100B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311433168.7A CN117149100B (zh) 2023-11-01 2023-11-01 数据存储方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311433168.7A CN117149100B (zh) 2023-11-01 2023-11-01 数据存储方法及装置

Publications (2)

Publication Number Publication Date
CN117149100A CN117149100A (zh) 2023-12-01
CN117149100B true CN117149100B (zh) 2024-04-23

Family

ID=88901222

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311433168.7A Active CN117149100B (zh) 2023-11-01 2023-11-01 数据存储方法及装置

Country Status (1)

Country Link
CN (1) CN117149100B (zh)

Citations (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102521292A (zh) * 2011-11-29 2012-06-27 西安交通大学 一种基于模板对异构污染源集成数据的解析方法
CN106649436A (zh) * 2016-09-08 2017-05-10 东软集团股份有限公司 数据归档方法与装置
CN108052290A (zh) * 2017-12-13 2018-05-18 北京百度网讯科技有限公司 用于存储数据的方法和装置
CN108388569A (zh) * 2018-01-09 2018-08-10 杭州电子科技大学 一种快速的键值数据库的系统及建立方法
CN109684307A (zh) * 2018-12-26 2019-04-26 百度在线网络技术(北京)有限公司 一种数据存储方法、装置、设备及存储介质
CN110399104A (zh) * 2019-07-23 2019-11-01 网易(杭州)网络有限公司 数据存储方法、数据存储装置、电子设备、存储介质
CN111274245A (zh) * 2020-01-17 2020-06-12 苏州浪潮智能科技有限公司 一种用于优化数据存储的方法和装置
CN111522820A (zh) * 2020-04-26 2020-08-11 北京启迪区块链科技发展有限公司 数据存储结构、存储检索方法、系统、设备及存储介质
CN111611225A (zh) * 2020-05-15 2020-09-01 腾讯科技(深圳)有限公司 数据存储管理方法、查询方法、装置、电子设备及介质
CN112817973A (zh) * 2021-01-22 2021-05-18 平安普惠企业管理有限公司 数据处理方法、装置、数据处理设备及存储介质
CN113051301A (zh) * 2021-03-08 2021-06-29 网宿科技股份有限公司 一种对象存储方法、系统及设备
WO2021197493A1 (zh) * 2020-04-04 2021-10-07 厦门网宿有限公司 一种基于LSM-Tree存储引擎的文件管理方法和装置
CN113742344A (zh) * 2021-09-01 2021-12-03 南方电网深圳数字电网研究院有限公司 电力系统数据的索引方法及装置
CN114385620A (zh) * 2020-10-19 2022-04-22 腾讯科技(深圳)有限公司 数据处理方法、装置、设备及可读存储介质
CN114661726A (zh) * 2022-04-02 2022-06-24 广州华多网络科技有限公司 数据类型映射处理方法及其装置、设备、介质及产品
CN115203159A (zh) * 2022-07-25 2022-10-18 北京字跳网络技术有限公司 一种数据存储方法、装置、计算机设备和存储介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2759697C2 (ru) * 2016-08-25 2021-11-16 Конинклейке Филипс Н.В. Сохранение и извлечение пространственных данных в/из базы данных

Patent Citations (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102521292A (zh) * 2011-11-29 2012-06-27 西安交通大学 一种基于模板对异构污染源集成数据的解析方法
CN106649436A (zh) * 2016-09-08 2017-05-10 东软集团股份有限公司 数据归档方法与装置
CN108052290A (zh) * 2017-12-13 2018-05-18 北京百度网讯科技有限公司 用于存储数据的方法和装置
CN108388569A (zh) * 2018-01-09 2018-08-10 杭州电子科技大学 一种快速的键值数据库的系统及建立方法
CN109684307A (zh) * 2018-12-26 2019-04-26 百度在线网络技术(北京)有限公司 一种数据存储方法、装置、设备及存储介质
CN110399104A (zh) * 2019-07-23 2019-11-01 网易(杭州)网络有限公司 数据存储方法、数据存储装置、电子设备、存储介质
CN111274245A (zh) * 2020-01-17 2020-06-12 苏州浪潮智能科技有限公司 一种用于优化数据存储的方法和装置
WO2021197493A1 (zh) * 2020-04-04 2021-10-07 厦门网宿有限公司 一种基于LSM-Tree存储引擎的文件管理方法和装置
CN111522820A (zh) * 2020-04-26 2020-08-11 北京启迪区块链科技发展有限公司 数据存储结构、存储检索方法、系统、设备及存储介质
CN111611225A (zh) * 2020-05-15 2020-09-01 腾讯科技(深圳)有限公司 数据存储管理方法、查询方法、装置、电子设备及介质
CN114385620A (zh) * 2020-10-19 2022-04-22 腾讯科技(深圳)有限公司 数据处理方法、装置、设备及可读存储介质
CN112817973A (zh) * 2021-01-22 2021-05-18 平安普惠企业管理有限公司 数据处理方法、装置、数据处理设备及存储介质
CN113051301A (zh) * 2021-03-08 2021-06-29 网宿科技股份有限公司 一种对象存储方法、系统及设备
CN113742344A (zh) * 2021-09-01 2021-12-03 南方电网深圳数字电网研究院有限公司 电力系统数据的索引方法及装置
CN114661726A (zh) * 2022-04-02 2022-06-24 广州华多网络科技有限公司 数据类型映射处理方法及其装置、设备、介质及产品
CN115203159A (zh) * 2022-07-25 2022-10-18 北京字跳网络技术有限公司 一种数据存储方法、装置、计算机设备和存储介质

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
"一种面向工业路联网的云存储方法""";孟祥曦等;《北京航空航天大学学报》;第1-7部分 *
基于SQL-92和JDBC的SpaceOS数据库数据迁移的实现;宁泰安;刘金刚;;计算机应用与软件(12);全文 *
孟祥曦等."一种面向工业路联网的云存储方法""".《北京航空航天大学学报》.2019,第1-7部分. *

Also Published As

Publication number Publication date
CN117149100A (zh) 2023-12-01

Similar Documents

Publication Publication Date Title
US11475034B2 (en) Schemaless to relational representation conversion
CN113297320A (zh) 分布式数据库系统及数据处理方法
CN111460241B (zh) 一种数据查询方法、装置、电子设备及存储介质
CN109408594B (zh) 一种基于区块链的跨链数据检索系统
CN113760948A (zh) 一种数据查询的方法及装置
CN111506608A (zh) 一种结构化文本的比较方法和装置
US20220253419A1 (en) Multi-record index structure for key-value stores
CN114722036A (zh) 数据处理方法、装置、电子设备及可读存储介质
CN114860727A (zh) 拉链表更新方法及装置
CN117149100B (zh) 数据存储方法及装置
CN116361287A (zh) 路径解析方法、装置以及系统
CN117493333A (zh) 数据归档方法、装置、电子设备及存储介质
CN116414774A (zh) 文件迁移方法、装置、设备及存储介质
CN112100168A (zh) 一种确定数据关联关系的方法和装置
US20150347402A1 (en) System and method for enabling a client system to generate file system operations on a file system data set using a virtual namespace
CN117009430A (zh) 数据管理方法、装置和存储介质及电子设备
CN116048609A (zh) 配置文件更新方法、装置、计算机设备和存储介质
CN116010345A (zh) 一种实现流批一体数据湖的表服务方案的方法、装置及设备
CN111259003B (zh) 一种数据库建立方法及装置
CN114791882A (zh) 变量命名冲突解决方法和装置、电子设备、存储介质
EP3046307B1 (en) Processing method, device and system for data of distributed storage system
CN110471708B (zh) 基于可重用组件的配置项获取的方法及装置
CN109325057B (zh) 中间件管理方法、装置、计算机设备以及存储介质
CN110888863A (zh) 一种状态字段优化方法、装置、电子设备及存储介质
CN117093597B (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
GR01 Patent grant
GR01 Patent grant