[发明专利]一种读优化的内存数据库Trie树索引方法有效
| 申请号: | 201510459589.6 | 申请日: | 2015-07-30 |
| 公开(公告)号: | CN105117417B | 公开(公告)日: | 2018-04-17 |
| 发明(设计)人: | 段章峰;伍卫国;崔金华 | 申请(专利权)人: | 西安交通大学 |
| 主分类号: | G06F17/30 | 分类号: | G06F17/30 |
| 代理公司: | 西安智大知识产权代理事务所61215 | 代理人: | 贺建斌 |
| 地址: | 710049*** | 国省代码: | 陕西;61 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 优化 内存 数据库 trie 索引 方法 | ||
技术领域
本发明属于计算机技术领域,具体涉及一种读优化的内存数据库Trie树索引方法。
背景技术
在数据库应用中,可以通过对数据建立索引加快数据的访问速度,索引是一个或多个列(例如,employee表的姓氏(lname)列)的值进行排序的结构。如果想按特定职员的姓来查找,则与在表中搜索所有的行相比,索引有助于更快地获取信息。常见的磁盘数据库索引有B树索引,B+树索引,它们的使用可以显著的减少磁盘I/O数。随着内存价格的降低,内存数据库技术得到了广泛的应用。不同于磁盘数据库系统,内存数据库系统在数据访问时显著的减少或消除了磁盘I/O,提高了数据访问的速度,原来的数据库索引方法,如B树索引,由于其节点中存在着大量的指针结构,内存的空间利用率不高,而且由于节点内部存储的关键字个数少,导致Cache命中率不高,降低了内存数据库的数据访问效率。并且当数据库针对字符类型数据进行操作时有如下特点:
1)对于字符串类型的数据,不能直接利用“>”和“<”等比较操作符进行大小比较,而需要调用strcmp函数,这相比于int类型的比较来说,增加了时间消耗。
2)共享前缀信息,在存储如URL或者数据库中的关键日志信息时,key与key之间具有共享相同字符前缀的特点,例如:key为“201401055656”和key为“201401056565”的数据,共享的前缀为“20140105”。
3)原始数据的存储量大,如果针对原始的字符串类型数据进行简单的存储,那么数据量相比于其他结构化类型将增加很多,所以,在以字符串为key类型的系统上,当需要将数据持久化到硬盘等存储设备上时,有必要进行数据压缩,以减少和磁盘交互的数据量,但是,采用数据压缩算法后,在数据的压缩和解压缩过程中,会增加CPU的计算开销,影响数据库性能。
传统的Trie树是一种针对字符数据存储的查找结构,它提供了常数级的数据访问时间复杂度。在对待查找数据进行查找时,只需要从Trie树根节点开始,和字符串同步遍历一遍就可以得到操作结构,中间没有比较操作。是一种高效的针对字符数据的索引结构。但是,Trie树的节点内部,子节点指针静态分配,在针对所有可打印字符的数据的查找时,其子节点指针包括了所有ASCII字符中的可打印字符。但是,在应用中,待查找数据中存在着热点字符,即有的字符不会出现,静态的分配子节点空间,会造成内存空间的浪费。针对这些问题,需要通过优化索引结构的空间利用率和数据访问时间复杂度来提高数据的访问效率,提高内存数据库性能。
发明内容
为了克服上述现有技术的缺点,本发明的目的在于提供一种读优化的内存数据库Trie树索引方法,针对字符型数据,提高数据的Cache命中率,减少写回磁盘的数据量,提高数据写回效率。
为了达到上述目的,本发明所采用的技术方案是:
一种读优化的内存数据库Trie树索引方法,包括以下步骤:
第1步,构造基本的数据结构:
向优化的Trie树结构中写入数据,其过程如下:
1.1)如果根节点为空,则分配根节点空间,并进行初始化;
1.2)根据当前字符指针所指字符,在索引结构当前节点内部的哈希表中查找相应的子节点指针是否为空,如果为空,参照步骤1.1),分配节点空间,并且按照字符的大小顺序,插入到节点内部的排序链表中,保证数据有序;如果不为空,则跳转到步骤1.3);
1.3)索引结构指针指向相应的子节点指针,字符指针顺序后移,直到字符串结尾;判断节点内部的value域是否为空,如果为空,则直接进行拷贝操作,将新的value值拷贝进节点内部;如果不为空,那么判断新的value值所需空间是否大于当前节点内部的value值空间,如果大于,则重新申请空间;如果小于,则直接进行拷贝操作,并更新节点内部相应字段的值;
第2步,在已经建立好的优化的Trie树中进行数据查询操作:
查询操作分为单值查询和范围查询两种,单值查询操作的步骤如下:
2.1)如果根节点为空,则直接返回,否则,进行步骤2.2);
2.2)根据当前字符指针所指字符,计算其哈希值,在哈希表中查找对应的子节点指针,如果哈希表中没有找到,则需要在哈希链表中进一步查找,如果找到,则将哈希表中子节点指针值赋给当前索引结构指针,进行步骤2.3);如果没有找到,则返回,表示没有查找到key对应的value;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安交通大学,未经西安交通大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510459589.6/2.html,转载请声明来源钻瓜专利网。
- 上一篇:冷接触胶粘剂
- 下一篇:一种横机用的导纱装置





