CN103106144B - 一种内存索引压缩方法和装置 - Google Patents
一种内存索引压缩方法和装置 Download PDFInfo
- Publication number
- CN103106144B CN103106144B CN201110362273.7A CN201110362273A CN103106144B CN 103106144 B CN103106144 B CN 103106144B CN 201110362273 A CN201110362273 A CN 201110362273A CN 103106144 B CN103106144 B CN 103106144B
- Authority
- CN
- China
- Prior art keywords
- index
- internal memory
- key assignments
- hash
- table space
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System (AREA)
Abstract
本发明公开一种内存索引压缩方法和装置。所述方法包括:在内存中创建索引哈希链表空间;当有内存索引键值需要保存到内存时,根据第一哈希函数对该内存索引键值进行哈希计算,得到哈希键值;查看所述索引哈希链表空间中是否已存在与所述哈希键值相同的值,是则不做操作,否则将所述哈希键值保存到所述索引哈希链表空间中。本发明的技术方案能有效对内存索引进行压缩,减小内存索引对内存的占用。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种内存索引压缩方法和装置。
背景技术
现有技术中,内存索引键值中包含字符类型,由于字符类型的长度不确定性,占用的内存量也不确定。大部分情况下内存索引对内存的使用较高都是由于字符类型的占用量比较高引起的。
发明内容
有鉴于此,本发明提供了一种内存索引压缩方法和装置,本发明的技术方案能有效对内存索引进行压缩,减小内存索引对内存的占用。
为达到上述目的,本发明的技术方案是这样实现的:
本发明公开了一种内存索引压缩方法,该方法包括:
在内存中创建索引哈希链表空间;
当有内存索引键值需要保存到内存时,根据第一哈希函数对该内存索引键值进行哈希计算,得到哈希键值;
查看所述索引哈希链表空间中是否已存在与所述哈希键值相同的值,是则不做操作,否则将所述哈希键值保存到所述索引哈希链表空间中。
上述方法中,所述索引哈希链表空间包含n个索引区,对应序号依次为0~n-1;
查看所述索引哈希链表空间中是否已存在与所述哈希键值相同的值包括:根据第二哈希函数对该内存索引键值进行哈希计算,对该哈希计算结果进行模n运算得到0~n-1中的一个值,确定序号与该值对应的索引区,查看该确定的索引区中是否已存在与所述哈希键值相同的值;
所述将哈希键值保存到所述索引哈希链表空间中包括:将所述哈希键值保存到该确定的索引区中。
在上述方法中,将所述哈希键值保存到该确定的索引区中包括:构建一个索引条目,该索引条目包括所述哈希键值和一个链表指针;将构建的索引条目添加到该确定的索引区中;其中,所述链表指针指向下一个索引条目。
在上述方法中,所述第一哈希函数为DJB哈希函数;所述第二哈希函数为CRC16哈希函数。
本发明还公开了一种内存索引压缩装置,该装置包括:内存模块、创建模块和内存索引压缩模块,其中:
创建模块,用于在内存模块中创建索引哈希链表空间,并通知内存索引压缩模块;
内存索引压缩模块,用于在接收到内存索引键值时,根据第一哈希函数对该内存索引键值进行哈希计算,得到哈希键值,然后查看内存模块中的索引哈希链表空间中是否已存在与所述哈希键值相同的值,是则不做操作,否则将所述哈希键值保存到所述索引哈希链表空间中。
在上述装置中,所述创建模块,用于在内存模块中创建包含n个索引区的索引哈希链表空间;该n个索引区的序号依次为0~n-1;
所述内存索引压缩模块,用于根据第二哈希函数对该内存索引键值进行哈希计算,对该哈希计算结果进行模n运算得到0~n-1中的一个值,确定序号与该值对应的索引区,查看该确定的索引区中是否已存在与所述哈希键值相同的值,如果不存在则将所述哈希键值保存到该确定的索引区中。
在上述装置中,所述内存索引压缩模块,用于构建一个索引条目,将构建的索引条目添加到该确定的索引区中;其中,所述索引条目包括所述哈希键值和一个链表指针;所述链表指针指向下一个索引条目。
在上述装置中,所述内存索引压缩模块,用于根据第DJB哈希函数对该内存索引键值进行哈希计算,得到哈希键值;并用于根据CRC16哈希函数对该内存索引键值进行哈希计算,对该哈希计算结果进行模n运算得到0~n-1中的一个值。
本发明实施例的有益效果是:本发明的技术方案中,由于对内存索引键值进行哈希运算后将整数型的哈希键值保存到内存中,整数型的数据对内存的占用要大大小于字符类型的数据对内存的占用,因此相对现有技术中直接在内存中保存字符类型的内存索引键值的方案相比,能有效对内存索引进行压缩,减小内存索引对内存的占用。
附图说明
图1是本发明实施例中的一种内存索引压缩方法的流程图;
图2是本发明实施例中的一种内存索引压缩装置的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
图1是本发明实施例中的一种内存索引压缩方法的流程图。如图1所示,该方法包括:
101,在内存中创建索引哈希链表空间;
102,当有内存索引键值需要保存到内存时,根据第一哈希函数对该内存索引键值进行哈希计算,得到哈希键值;
103,查看所述索引哈希链表空间中是否已存在与所述哈希键值相同的值,是则不做操作,否则将所述哈希键值保存到所述索引哈希链表空间中。
步骤101中所创建的索引哈希链表空间包含n个索引区,对应序号依次为0~n-1。
步骤103中的查看所述索引哈希链表空间中是否已存在与所述哈希键值相同的值包括:根据第二哈希函数对该内存索引键值进行哈希计算,对该哈希计算结果进行模n运算得到0~n-1中的一个值,确定序号与该值对应的索引区,查看该确定的索引区中是否已存在与所述哈希键值相同的值;
步骤103中所述将哈希键值保存到所述索引哈希链表空间中包括:将所述哈希键值保存到该确定的索引区中。
将所述哈希键值保存到该确定的索引区中具体可以为:构建一个索引条目,该索引条目包括所述哈希键值和一个链表指针;将构建的索引条目添加到该确定的索引区中;其中,所述链表指针指向下一个索引条目。
所述的第一哈希函数和第二哈希函数可以取任意的哈希函数。在本发明的一个实施例中,所述第一哈希函数为DJB哈希函数;所述第二哈希函数为CRC16哈希函数。
下面给出一个具体的实施例对上述方案进行说明。
首先在内存中创建一个包含n个索引区的索引哈希链表空间,具体可以如表1所示:
索引区0 |
索引区1 |
...... |
索引区n-1 |
表1
在本实施例中n取质数16785407。
定义索引条目的数据结构包括:哈希键值和链表指针,其中:
哈希键值:整数型,为字符类型的内存索引键值经过哈希运算后得到的整数;
链表指针:整数型,指向下一个索引条目结构,方便查找下一个索引条目。
当需要将一个字符类型的内存索引键值Key1保存到内存时,根据哈希函数CRC16进行计算,即CRC16(Key1)得到整数h1,对h1进行取模运算的到x,即x=h1%n,h1%n的运算复杂度为O(1),速度非常快,x即为Key1需要保存的索引区的序号。构造一个Key1的索引条目index1,index1中的哈希键值Hkey1为根据哈希函数DJB对Key1进行哈希运算得到的,即哈希键值Hkey1=DJB(Key1)。遍历索引区x中的所有索引条目,查看哈希键值Hkey1是否已经存在,是则不做任何操作,否则将索引条目index1添加到索引区x中。其中索引条目index1中的链表指针指向index1的下一个索引条目。
由于索引条目在内存里存的是整数型的哈希键值,而不是具体的字符类型的内存索引键值,因此可以将索引内存限制到固定大小(4字节,整型),即把字符型主键映射到内存占用固定的整数结构。
基于上述实施例,给出本发明中的一种内存索引压缩装置的结构。
图2是本发明实施例中的一种内存索引压缩装置的结构示意图。如图2所示,该装置包括:内存模块201、创建模块202和内存索引压缩模块203,其中:
创建模块202,用于在内存模块201中创建索引哈希链表空间,并通知内存索引压缩模块203;
内存索引压缩模块203,用于在接收到内存索引键值时,根据第一哈希函数对该内存索引键值进行哈希计算,得到哈希键值,然后查看内存模块201中的索引哈希链表空间中是否已存在与所述哈希键值相同的值,是则不做操作,否则将所述哈希键值保存到所述索引哈希链表空间中。
在图2中,所述创建模块202,用于在内存模块201中创建包含n个索引区的索引哈希链表空间;该n个索引区的序号依次为0~n-1;
所述内存索引压缩模块203,用于根据第二哈希函数对该内存索引键值进行哈希计算,对该哈希计算结果进行模n运算得到0~n-1中的一个值,确定序号与该值对应的索引区,查看该确定的索引区中是否已存在与所述哈希键值相同的值,如果不存在则将所述哈希键值保存到该确定的索引区中。
在图2中,所述内存索引压缩模块203,用于构建一个索引条目,将构建的索引条目添加到该确定的索引区中;其中,所述索引条目包括所述哈希键值和一个链表指针;所述链表指针指向下一个索引条目。
在图2中,所述内存索引压缩模块203,用于根据第DJB哈希函数对该内存索引键值进行哈希计算,得到哈希键值;并用于根据CRC16哈希函数对该内存索引键值进行哈希计算,对该哈希计算结果进行模n运算得到0~n-1中的一个值。
综上所述,本发明的技术方案中,由于对内存索引键值进行哈希运算后将整数型的哈希键值保存到内存中,整数型的数据对内存的占用要大大小于字符类型的数据对内存的占用,因此相对现有技术中直接在内存中保存字符类型的内存索引键值的方案相比,能有效对内存索引进行压缩,减小内存索引对内存的占用。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (8)
1.一种内存索引压缩方法,其特征在于,该方法包括:
在内存中创建索引哈希链表空间;
当有内存索引键值需要保存到内存时,根据第一哈希函数对该内存索引键值进行哈希计算,得到整数型的哈希键值;
查看所述索引哈希链表空间中是否已存在与所述整数型的哈希键值相同的值,是则不做操作,否则将所述整数型的哈希键值保存到所述索引哈希链表空间中。
2.根据权利要求1所述的方法,其特征在于,所述索引哈希链表空间包含n个索引区,对应序号依次为0~n-1;
查看所述索引哈希链表空间中是否已存在与所述哈希键值相同的值包括:根据第二哈希函数对该内存索引键值进行哈希计算,对该哈希计算结果进行模n运算得到0~n-1中的一个值,确定序号与该值对应的索引区,查看该确定的索引区中是否已存在与所述哈希键值相同的值;
所述将哈希键值保存到所述索引哈希链表空间中包括:将所述哈希键值保存到该确定的索引区中。
3.根据权利要求2所述的方法,其特征在于,将所述哈希键值保存到该确定的索引区中包括:
构建一个索引条目,该索引条目包括所述哈希键值和一个链表指针;
将构建的索引条目添加到该确定的索引区中;
其中,所述链表指针指向下一个索引条目。
4.根据权利要求2所述的方法,其特征在于,
所述第一哈希函数为DJB哈希函数;
所述第二哈希函数为CRC16哈希函数。
5.一种内存索引压缩装置,其特征在于,该装置包括:内存模块、创建模块和内存索引压缩模块,其中:
创建模块,用于在内存模块中创建索引哈希链表空间,并通知内存索引压缩模块;
内存索引压缩模块,用于在接收到内存索引键值时,根据第一哈希函数对该内存索引键值进行哈希计算,得到整数型的哈希键值,然后查看内存模块中的索引哈希链表空间中是否已存在与所述整数型的哈希键值相同的值,是则不做操作,否则将所述整数型的哈希键值保存到所述索引哈希链表空间中。
6.根据权利要求5所述的装置,其特征在于,
所述创建模块,用于在内存模块中创建包含n个索引区的索引哈希链表空间;该n个索引区的序号依次为0~n-1;
所述内存索引压缩模块,用于根据第二哈希函数对该内存索引键值进行哈希计算,对该哈希计算结果进行模n运算得到0~n-1中的一个值,确定序号与该值对应的索引区,查看该确定的索引区中是否已存在与所述哈希键值相同的值,如果不存在则将所述哈希键值保存到该确定的索引区中。
7.根据权利要求6所述的装置,其特征在于,
所述内存索引压缩模块,用于构建一个索引条目,将构建的索引条目添加到该确定的索引区中;
其中,所述索引条目包括所述哈希键值和一个链表指针;所述链表指针指向下一个索引条目。
8.根据权利要求6所述的装置,其特征在于,
所述内存索引压缩模块,用于根据第DJB哈希函数对该内存索引键值进行哈希计算,得到哈希键值;
所述内存索引压缩模块,用于根据CRC16哈希函数对该内存索引键值进行哈希计算,对该哈希计算结果进行模n运算得到0~n-1中的一个值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110362273.7A CN103106144B (zh) | 2011-11-15 | 2011-11-15 | 一种内存索引压缩方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110362273.7A CN103106144B (zh) | 2011-11-15 | 2011-11-15 | 一种内存索引压缩方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103106144A CN103106144A (zh) | 2013-05-15 |
CN103106144B true CN103106144B (zh) | 2015-10-28 |
Family
ID=48314020
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110362273.7A Active CN103106144B (zh) | 2011-11-15 | 2011-11-15 | 一种内存索引压缩方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103106144B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108153757B (zh) * | 2016-12-02 | 2020-04-03 | 深圳市中兴微电子技术有限公司 | 一种哈希表管理的方法和装置 |
CN109508334B (zh) * | 2018-11-23 | 2019-10-11 | 中科驭数(北京)科技有限公司 | 针对区块链数据库的数据压缩方法、访问方法和系统 |
CN112988654A (zh) * | 2019-12-12 | 2021-06-18 | 蜜蜂计算(香港)股份有限公司 | 适用于哈希算法的电路系统 |
CN112395213B (zh) * | 2020-11-18 | 2023-05-30 | 之江实验室 | 一种基于内存面向热点数据的aceh索引结构及方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101315628A (zh) * | 2007-06-01 | 2008-12-03 | 华为技术有限公司 | 内存数据库系统及实现内存数据库的方法和装置 |
CN101719141A (zh) * | 2009-12-24 | 2010-06-02 | 成都市华为赛门铁克科技有限公司 | 基于目录对象的文件处理方法和系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080168209A1 (en) * | 2007-01-09 | 2008-07-10 | Ibm Corporation | Data protection via software configuration of multiple disk drives |
-
2011
- 2011-11-15 CN CN201110362273.7A patent/CN103106144B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101315628A (zh) * | 2007-06-01 | 2008-12-03 | 华为技术有限公司 | 内存数据库系统及实现内存数据库的方法和装置 |
CN101719141A (zh) * | 2009-12-24 | 2010-06-02 | 成都市华为赛门铁克科技有限公司 | 基于目录对象的文件处理方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN103106144A (zh) | 2013-05-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2021042515A1 (zh) | 图数据存储和查询方法、装置及计算机可读存储介质 | |
CN100562021C (zh) | 一种分布式可同步的多源数据的控制方法和装置 | |
CN103106144B (zh) | 一种内存索引压缩方法和装置 | |
CN102970043B (zh) | 一种基于gzip的压缩硬件系统及其加速方法 | |
CN101599986B (zh) | 加速文件传输速度的方法及计算机系统 | |
CN107027036A (zh) | 一种fpga异构加速平台的解压缩方法、装置及系统 | |
CN108804768A (zh) | 一种使bim模型轻量化的方法 | |
US20180254888A1 (en) | Combining hashes of data blocks | |
CN102780685A (zh) | 用于对数据进行压缩和加密的方法及系统 | |
CN106648955B (zh) | 压缩方法及相关装置 | |
CN104104717A (zh) | 投放渠道数据统计方法及装置 | |
US10817178B2 (en) | Compressing and compacting memory on a memory device wherein compressed memory pages are organized by size | |
CN106302245A (zh) | 一种lte系统中数据包的压缩方法和装置 | |
CN104579948A (zh) | 一种报文分片处理方法及装置 | |
CN104579970B (zh) | 一种IPv6报文的策略匹配装置 | |
CN103580991B (zh) | 一种邮件附件的上传方法和设备 | |
CN102930004B (zh) | 哈希值存储方法、装置及芯片 | |
CN107422980B (zh) | 物联网数据文件存储系统及其数据文件存储方法 | |
CN106936545A (zh) | 数据传输方法及装置 | |
CN104503862B (zh) | 获得应用渠道包的校验值的方法和装置 | |
CN105389387A (zh) | 一种基于压缩的重复数据删除性能及重删率提升的方法和系统 | |
CN108694205B (zh) | 匹配目标字段的方法、装置 | |
CN112486848A (zh) | 一种测试数据的生成方法、装置、芯片及存储介质 | |
CN102316173A (zh) | 网络地址聚合方法和装置 | |
CN103685509A (zh) | 文件差量同步方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP02 | Change in the address of a patent holder |
Address after: Room 810, 8 / F, 34 Haidian Street, Haidian District, Beijing 100080 Patentee after: BEIJING D-MEDIA COMMUNICATION TECHNOLOGY Co.,Ltd. Address before: 100089 Beijing city Haidian District wanquanzhuang Road No. 28 Wanliu new building A block 5 layer Patentee before: BEIJING D-MEDIA COMMUNICATION TECHNOLOGY Co.,Ltd. |
|
CP02 | Change in the address of a patent holder |