CN111274245B - 一种用于优化数据存储的方法和装置 - Google Patents

一种用于优化数据存储的方法和装置 Download PDF

Info

Publication number
CN111274245B
CN111274245B CN202010054235.4A CN202010054235A CN111274245B CN 111274245 B CN111274245 B CN 111274245B CN 202010054235 A CN202010054235 A CN 202010054235A CN 111274245 B CN111274245 B CN 111274245B
Authority
CN
China
Prior art keywords
key
data
sub
key data
value pair
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
CN202010054235.4A
Other languages
English (en)
Other versions
CN111274245A (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.)
Suzhou Inspur Intelligent Technology Co Ltd
Original Assignee
Suzhou Inspur Intelligent 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 Suzhou Inspur Intelligent Technology Co Ltd filed Critical Suzhou Inspur Intelligent Technology Co Ltd
Priority to CN202010054235.4A priority Critical patent/CN111274245B/zh
Publication of CN111274245A publication Critical patent/CN111274245A/zh
Application granted granted Critical
Publication of CN111274245B publication Critical patent/CN111274245B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1004Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Quality & Reliability (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明实施例公开了一种用于优化数据存储的方法。该方法包括:将待写入非关系型数据库Redis的键值对中的键数据拆分为第一子键数据和第二子键数据;其中,第二子键数据是键数据末尾的第一数量的位的数据,第一子键数据是键数据除了第二子键数据以外的其他位的数据;采用哈希算法根据包括第一子键数据在内的一部分或者全部的所述键数据对键数据进行分桶;将第一子键数据作为已更新的键数据存储到Redis之中,将第二子键数据以及键值对中的值数据组成已更新的键值对,写入到散列表的哈希桶中。还公开了用于优化数据存储的装置。上述方案能够优化Redis数据库的存储性能以及对数据的处理能力。

Description

一种用于优化数据存储的方法和装置
技术领域
本发明涉及数据管理领域,尤指一种用于优化数据存储的方法和装置。
背景技术
在互联网领域,Redis(Remote dictionary server,远程字典服务器)作为一款基于内存的非常高效的非关系型数据库,因其提供非常高效的数据读写操作,并且支持string、list、set、hash等复杂的数据结构,在业界得到广泛应用。正是因为Redis具有以上的优异性能,因此Redis的一个典型的应用是作为缓存服务器存储海量数据的内存数据库,因此有限的存储空间很难存储海量的数据,限制了在使用Redis作为内存数据库时对数据的存储以及对数据的处理。
发明内容
为了解决上述技术问题,本发明提供了一种用于优化数据存储的方法和装置,其能够优化Redis数据库的存储性能以及对数据的处理能力。
为了达到本发明目的,本发明实施例提供了一种用于优化数据存储的方法,该方法包括:
将待写入非关系型数据库Redis的键值对中的键数据拆分为第一子键数据和第二子键数据;其中,第二子键数据是键数据末尾的第一数量的位的数据,第一子键数据是键数据除了第二子键数据以外的其他位的数据;
采用哈希算法根据包括第一子键数据在内的一部分或者全部的键数据对键数据进行分桶;
将第一子键数据作为已更新的键数据存储到Redis之中,将第二子键数据以及键值对中的值数据组成已更新的键值对,写入到散列表的哈希桶中。
在一个可选的实施例中,在将待写入非关系型数据库Redis的键值对中的键数据拆分为第一子键数据和第二子键数据的步骤之前,该方法还包括:
将待写入Redis的键值对的最大数据量设置为小于等于第二数值;
将待写入非关系型数据库Redis的键值对中的键数据拆分为第一子键数据和第二子键数据的步骤包括:
监测Redis中的未经压缩的键值对的数量;
当Redis中的未经压缩的键值对的数量大于第二数值的时候,将待写入Redis的键值对中的键数据拆分为第一子键数据和第二子键数据。
在一个可选的实施例中,哈希算法是:MD5算法、安全散列算法或者循环冗余校验算法。
在一个可选的实施例中,第二子键数据是采用哈希算法进行变换的;将第一子键数据作为已更新的键数据存储到Redis之中,将第二子键数据以及键值对中的值数据组成已更新的键值对,写入到散列表的哈希桶中的步骤包括:
将经变换的第二子键数据以及键值对中的值数据组成已更新的键值对,写入到散列表的哈希桶中。
为了达到上述目的,本发明实施例提供了一种用于优化数据存储的装置,该装置包括存储器和处理器;
存储器用于存储计算机可读指令;
处理器用于读取计算机可读指令,以执行如下操作:
将待写入非关系型数据库Redis的键值对中的键数据拆分为第一子键数据和第二子键数据;其中,第二子键数据是键数据末尾的第一数量的位的数据,第一子键数据是键数据除了第二子键数据以外的其他位的数据;
采用哈希算法根据包括第一子键数据在内的一部分或者全部的键数据对键数据进行分桶;
将第一子键数据作为已更新的键数据存储到Redis之中,将第二子键数据以及键值对中的值数据组成已更新的键值对,写入到散列表的哈希桶中。
在一个可选的实施例中,处理器用于读取执行计算机可读指令,以执行如下操作:
在将待写入非关系型数据库Redis的键值对中的键数据拆分为第一子键数据和第二子键数据的操作之前,
将待写入Redis的键值对的最大数据量设置为小于等于第二数值;
将待写入非关系型数据库Redis的键值对中的键数据拆分为第一子键数据和第二子键数据的操作包括:
监测Redis中的未经压缩的键值对的数量;
当Redis中的未经压缩的键值对的数量大于第二数值的时候,将待写入Redis的键值对中的键数据拆分为第一子键数据和第二子键数据。
在一个可选的实施例中,哈希算法是:MD5算法、安全散列算法或者循环冗余校验算法。
在一个可选的实施例中,第二子键数据是采用哈希算法进行变换的;将第一子键数据作为已更新的键数据存储到Redis之中,将第二子键数据以及键值对中的值数据组成已更新的键值对,写入到散列表的哈希桶中的操作包括:
将经变换的第二子键数据以及键值对中的值数据组成已更新的键值对,写入到散列表的哈希桶中。
本申请的有益效果在于,通过将Redis的键值对中的键数据拆分成第一子间数据和第二子键数据,使得其中一部分的子键数据或者全部的键数据在分桶时作为存储的内容,另一部分的子键数据以及键值对中的值数据组成新的键值对,写入到散列表的哈希桶中,从而使得Redis在存储键值对的时候,需要提供的存储空间可以更小,因此Redis可以存储更多的键值对,增强了对数据的存储以及对数据的处理的能力。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
附图说明
附图用来提供对本发明技术方案的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本发明的技术方案,并不构成对本发明技术方案的限制。
图1为本发明实施例提供的用于优化数据存储的方法的流程图;
图2为本发明实施例提供的用于优化数据存储的装置的框图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
为了解决上述技术问题,本发明实施例提供了一种用于优化数据存储的方法,如图1所示,该方法包括步骤S101-步骤S105。
步骤S101,将待写入非关系型数据库Redis的键值对中的键数据拆分为第一子键数据和第二子键数据;其中,第二子键数据是键数据末尾的第一数量的位的数据,第一子键数据是键数据除了第二子键数据以外的其他位的数据。
以原始的键数据是“11553987”为例,第二子键数据是原始的键数据末尾的3位的数据,也就是说,第一数量是3,那么第二子键数据是“987”,第一子键数据是“11553”。
步骤S103,采用哈希算法根据包括第一子键数据在内的一部分或者全部的键数据对键数据进行分桶。
在此,哈希算法对一部分键数据或者全部的键数据进行分桶,如果是对一部分的键数据进行分桶的话,那么这一部分的键数据中包括第一子键数据。分桶的优点在于,可以通过哈希算法的计算,将一个文件的大量数据分成若干个部分,并且通过索引的方式可以查找到分布于内存中的数据。
步骤S105,将第一子键数据作为已更新的键数据存储到Redis之中,将第二子键数据以及键值对中的值数据组成已更新的键值对,写入到散列表的哈希桶中。
在此,由于键数据已经拆分成第一子键数据和第二子键数据,因此第一子键数据比键数据更短,在Redis的存储空间固定不变的时候,可以存储数量更多的第一子键数据,然后利用散列表中写入的键值对,来调用第一子键数据,此外,由于更新之后的键值对的长度缩短了,因此在使用哈希算法将键值对写入到散列表中的时候,相对来说更加节省哈希算法所使用的计算资源,因此以上的数据处理方式一方面可以优化Redis对于数据的存储,一方面可以增强对于数据的处理。
本申请的有益效果在于,通过将Redis的键值对中的键数据拆分成第一子间数据和第二子键数据,使得其中一部分的子键数据或者全部的键数据在分桶时作为存储的内容,另一部分的子键数据以及键值对中的值数据组成新的键值对,写入到散列表的哈希桶中,从而使得Redis在存储键值对的时候,需要提供的存储空间可以更小,因此Redis可以存储更多的键值对,增强了对数据的存储以及对数据的处理的能力。
在一个可选的实施例中,在步骤S101之前,该方法还包括:
将待写入Redis的键值对的最大数据量设置为小于等于第二数值;
将待写入非关系型数据库Redis的键值对中的键数据拆分为第一子键数据和第二子键数据的步骤包括:
监测Redis中的未经压缩的键值对的数量;
当Redis中的未经压缩的键值对的数量大于第二数值的时候,将待写入Redis的键值对中的键数据拆分为第一子键数据和第二子键数据。
在此,考虑到Redis内存数据库的性能,可以将待写入Redis的键值对的最大数据量设置为小于等于第二数值,在Redis配置文件中hash-zipmap-max-entries项中可以设置键值对的最大数据量。根据经验,可以将第二数值设置为1000,当第二数值大于1000时,也就是说Redis中未经压缩的键值对的数量超过1000的时候,未经压缩的键值对将会将会影响到Redis的运行性能。以第二数据是1000为例,首先监测未经压缩的键值对的数量,如果Redis中的未经压缩的键值对的数量大于1000的时候,则将待写入Redis的键值对中的键数据拆分为第一子键数据和第二子键数据,进而执行分桶操作以及存储更新的键值对的操作。通过上述方式,限制了Redis中的未经压缩的键值对的数量,从而保证了Redis的运行性能。
在一个可选的实施例中,哈希算法是:MD5算法、安全散列算法或者循环冗余校验算法。
MD5算法、安全散列算法(Secure Hash Algorithm,SHA)以及循环冗余校验算法(Cyclic Redundancy Check,CRC)均是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。因此,采用上述的算法作为哈希算法,可以为进行分桶的数据随机生成在散列表中的地址,在统计意义上使得数据分布比较均匀,尽量避开热点存储。
在一个可选的实施例中,第二子键数据是采用哈希算法进行变换的;步骤S105包括:将经变换的第二子键数据以及键值对中的值数据组成已更新的键值对,写入到散列表的哈希桶中。
在此,采用哈希算法来处理第二子键数据,可以为更新的键值对数据随机生成在散列表中的地址,在统计意义上使得更新的键值对数据数据分布比较均匀,尽量避开热点存储。
为了达到本发明的目的,本发明实施例提供了一种用于优化数据存储的装置,如图2所示,该装置包括存储器10和处理器20;
存储器10用于存储计算机可读指令;
处理器20用于读取计算机可读指令,以执行如下操作:
将待写入非关系型数据库Redis的键值对中的键数据拆分为第一子键数据和第二子键数据;其中,第二子键数据是键数据末尾的第一数量的位的数据,第一子键数据是键数据除了第二子键数据以外的其他位的数据;
采用哈希算法根据包括第一子键数据在内的一部分或者全部的键数据对键数据进行分桶;
将第一子键数据作为已更新的键数据存储到Redis之中,将第二子键数据以及键值对中的值数据组成已更新的键值对,写入到散列表的哈希桶中。
在一个可选的实施例中,处理器20用于读取执行计算机可读指令,以执行如下操作:
在将待写入非关系型数据库Redis的键值对中的键数据拆分为第一子键数据和第二子键数据的操作之前,
在将待写入非关系型数据库Redis的键值对中的键数据拆分为第一子键数据和第二子键数据的操作之前,
将待写入Redis的键值对的最大数据量设置为小于等于第二数值;
将待写入非关系型数据库Redis的键值对中的键数据拆分为第一子键数据和第二子键数据的操作包括:
监测Redis中的未经压缩的键值对的数量;
当Redis中的未经压缩的键值对的数量大于第二数值的时候,将待写入Redis的键值对中的键数据拆分为第一子键数据和第二子键数据。
在一个可选的实施例中,哈希算法是:MD5算法、安全散列算法或者循环冗余校验算法。
在一个可选的实施例中,第二子键数据是采用哈希算法进行变换的;将第一子键数据作为已更新的键数据存储到Redis之中,将第二子键数据以及键值对中的值数据组成已更新的键值对,写入到散列表的哈希桶中的操作包括:
将经变换的第二子键数据以及键值对中的值数据组成已更新的键值对,写入到散列表的哈希桶中。
虽然本发明所揭露的实施方式如上,但上述的内容仅为便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式及细节上进行任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。

Claims (8)

1.一种用于优化数据存储的方法,其特征在于,包括:
将待写入非关系型数据库Redis的键值对中的键数据拆分为第一子键数据和第二子键数据;其中,第二子键数据是所述键数据末尾的第一数量的位的数据,第一子键数据是所述键数据除了所述第二子键数据以外的其他位的数据;
采用哈希算法根据包括所述第一子键数据在内的一部分或者全部的所述键数据对所述键数据进行分桶;
将所述第一子键数据作为已更新的键数据存储到Redis之中,将所述第二子键数据以及所述键值对中的值数据组成已更新的键值对,写入到散列表的哈希桶中。
2.根据权利要求1所述的方法,其特征在于,在所述将待写入非关系型数据库Redis的键值对中的键数据拆分为第一子键数据和第二子键数据的步骤之前,所述方法还包括:
将待写入所述Redis的键值对的最大数据量设置为小于等于第二数值;
所述将待写入所述Redis的键值对中的键数据拆分为第一子键数据和第二子键数据的步骤包括:
监测Redis中的未经压缩的键值对的数量;
当Redis中的未经压缩的键值对的数量大于第二数值的时候,将待写入Redis的键值对中的键数据拆分为第一子键数据和第二子键数据。
3.根据权利要求1所述的方法,其特征在于,所述哈希算法是:MD5算法、安全散列算法或者循环冗余校验算法。
4.根据权利要求1所述的方法,其特征在于,所述第二子键数据是采用哈希算法进行变换的;所述将所述第一子键数据作为已更新的键数据存储到Redis之中,将所述第二子键数据以及所述键值对中的值数据组成已更新的键值对,写入到散列表的哈希桶中的步骤包括:
将经变换的第二子键数据以及所述键值对中的值数据组成已更新的键值对,写入到散列表的哈希桶中。
5.一种用于优化数据存储的装置,其特征在于,包括存储器和处理器;
所述存储器用于存储计算机可读指令;
所述处理器用于读取所述计算机可读指令,以执行如下操作:
将待写入非关系型数据库Redis的键值对中的键数据拆分为第一子键数据和第二子键数据;其中,第二子键数据是所述键数据末尾的第一数量的位的数据,第一子键数据是所述键数据除了所述第二子键数据以外的其他位的数据;
采用哈希算法根据包括所述第一子键数据在内的一部分或者全部的所述键数据对所述键数据进行分桶;
将所述第一子键数据作为已更新的键数据存储到Redis之中,将所述第二子键数据以及所述键值对中的值数据组成已更新的键值对,写入到散列表的哈希桶中。
6.根据权利要求5所述的装置,其特征在于,所述处理器用于读取执行所述计算机可读指令,以执行如下操作:
在所述将待写入非关系型数据库Redis的键值对中的键数据拆分为第一子键数据和第二子键数据的操作之前,
将待写入所述Redis的键值对的最大数据量设置为小于等于第二数值;
所述将待写入非关系型数据库Redis的键值对中的键数据拆分为第一子键数据和第二子键数据的操作包括:
监测Redis中的未经压缩的键值对的数量;
当Redis中的未经压缩的键值对的数量大于第二数值的时候,将待写入Redis的键值对中的键数据拆分为第一子键数据和第二子键数据。
7.根据权利要求5所述的装置,其特征在于,所述哈希算法是:MD5算法、安全散列算法或者循环冗余校验算法。
8.根据权利要求5所述的装置,其特征在于,所述第二子键数据是采用哈希算法进行变换的;所述将所述第一子键数据作为已更新的键数据存储到Redis之中,将所述第二子键数据以及所述键值对中的值数据组成已更新的键值对,写入到散列表的哈希桶中的操作包括:
将经变换的第二子键数据以及所述键值对中的值数据组成已更新的键值对,写入到散列表的哈希桶中。
CN202010054235.4A 2020-01-17 2020-01-17 一种用于优化数据存储的方法和装置 Active CN111274245B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010054235.4A CN111274245B (zh) 2020-01-17 2020-01-17 一种用于优化数据存储的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010054235.4A CN111274245B (zh) 2020-01-17 2020-01-17 一种用于优化数据存储的方法和装置

Publications (2)

Publication Number Publication Date
CN111274245A CN111274245A (zh) 2020-06-12
CN111274245B true CN111274245B (zh) 2022-07-12

Family

ID=71001700

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010054235.4A Active CN111274245B (zh) 2020-01-17 2020-01-17 一种用于优化数据存储的方法和装置

Country Status (1)

Country Link
CN (1) CN111274245B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112559515A (zh) * 2020-07-08 2021-03-26 北京德风新征程科技有限公司 一种矩阵计算求变过程中优化数据存储空间的方法和装置
CN112988763B (zh) * 2021-05-14 2021-07-27 北京顺实科技有限公司 一种以部分散列Key为索引的Kv数据库存储与查询方法
CN117149100B (zh) * 2023-11-01 2024-04-23 恒生电子股份有限公司 数据存储方法及装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106126721A (zh) * 2016-06-30 2016-11-16 北京奇虎科技有限公司 一种实时计算平台的数据处理方法和装置
CN109408507B (zh) * 2018-09-27 2021-07-27 中国联合网络通信集团有限公司 多属性数据的处理方法、装置、设备及可读存储介质
CN110399104B (zh) * 2019-07-23 2023-06-09 网易(杭州)网络有限公司 数据存储方法、数据存储装置、电子设备、存储介质

Also Published As

Publication number Publication date
CN111274245A (zh) 2020-06-12

Similar Documents

Publication Publication Date Title
CN111274245B (zh) 一种用于优化数据存储的方法和装置
CN108427539B (zh) 缓存设备数据的离线去重压缩方法、装置及可读存储介质
US11232070B2 (en) Metadata compaction in a distributed storage system
RU2626334C2 (ru) Способ и устройство обработки объекта данных
US11627207B2 (en) Systems and methods for data deduplication by generating similarity metrics using sketch computation
EP3376393B1 (en) Data storage method and apparatus
CN110908589B (zh) 数据文件的处理方法、装置、系统和存储介质
US20200334292A1 (en) Key value append
WO2017020576A1 (zh) 一种键值存储系统中文件压实的方法和装置
CN107391761B (zh) 一种基于重复数据删除技术的数据管理方法及装置
CN110727404A (zh) 一种基于存储端的数据重删方法、设备以及存储介质
US10339124B2 (en) Data fingerprint strengthening
CN110618974A (zh) 一种数据存储方法、装置、设备及存储介质
US11899624B2 (en) System and method for random-access manipulation of compacted data files
US20170123689A1 (en) Pipelined Reference Set Construction and Use in Memory Management
CN107423425B (zh) 一种对k/v格式的数据快速存储和查询方法
CN115699584A (zh) 使用将未压缩/已压缩内容相关的索引的压缩/解压缩
US11995050B2 (en) Systems and methods for sketch computation
US20210191640A1 (en) Systems and methods for data segment processing
CN111694806A (zh) 一种事务日志的缓存方法、装置、设备和存储介质
WO2024021491A1 (zh) 一种数据切片方法、装置和系统
CN114840502A (zh) 使用不同的散列大小和压缩大小进行散列
CN112506651A (zh) 一种大数据量环境中数据运算的方法和设备
US20230385240A1 (en) Optimizations for data deduplication operations
US11748307B2 (en) Selective data compression based on data similarity

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