[IR] Time and Space Efficiencies Analysis of Full-Text Index Techniques
文章阅读:全文索引技术时空效率分析
LIU Xiao-Zhu
PENG Zhi-Yong
根据全文索引实现技术的不同,将其分为三大类:
- 索引技术 (倒排文件、签名文件 、后缀树与后缀数组)
- 压缩与索引混合技术
- 自索引技术(self-index technique).
研究表明 , 对于 1GB 的文本数据 ,
在 Solaris 系统、 Sun SPARC10 处理器及 256MB 内存的系统配置下,将每个实验执行 5 次取其平均值以减少外部因素的干扰 ,
采用 参数 b 取 5 时的 Golomb 编码 .
通过对倒排文件的倒排列表、索引词位置信息等进行压缩后与不采用压缩时相比 :
- 存储空间减少了 5 倍、
- 内存空间消耗减少了20 倍、
- CPU 资源消耗减少至少 3 倍、
- I/O 操作减少 5 倍、
- 索引创建时间至少降低 2 倍 .
这使得倒排索引的时空效率得到了极大的提高 , 压缩的倒排索引得到了广泛的应用 .
存储空间:倒排文件的存储空间低于原文本大小的15%。可见, space cost的劣势不在了!
索引创建 : 倒排文件的索引创建采用复杂性低的整数编码 , 因此创建速度快 ; 而后缀数组的创建速度一方面
依赖于所采用的压缩算法的复杂性 , 另一方面 , 为了实现由索引直接还原原始数据 , 必须附加很多其他信息 , 这
增加了索引创建的开销 .
索引更新维护 : 倒排文件支持索引的更新与维护 , 能够实现部分更新与索引重建 , 而且开销低于 45%; 但对
于后缀数组 , 当有新的数据加入或数据发生变化时 , 目前的技术还无法实现部分更新 , 只能对整个后缀数组进行
完全重排 , 并对定位函数进行重算等 . 因此难以实现索引的动态更新 , 尤其是对于大数据集 , 需要对后缀数组进
行完全重构 , 索引维护更新成本更高 .
排序查询 : 倒排文件支持排序查询功能且易于扩展 , 如支持语义相似度、文档结构查询与分离查询等功能 ;
后缀数组由于其紧凑的结构特性 , 只能完成完全匹配时的查找定位 , 难以支持相似度匹配、排序查询等功能 , 且
难以实现位置信息插入、文档结构查询、分离查询等功能 .
查询速度与定位开销 : 倒排文件的查询速度虽然有了很大提高 , 但是由于后缀数组采用基于定位函数的匹
配方式 , 能够快速计算出查询词的位置信息 , 因此与倒排文件相比 , 后缀数组在信息查询速度与定位开销上具有
明显的优势
先前的研究关注得更多的是压缩率 , 而往往忽略了索引的动态性 , 即压缩索引在查询、动态更新时是否需要先解压后才能实现相应的功能 .
而压缩率与动态性往往是相矛盾的 , 压缩带来的解码时间消耗 , 在一定程度上降低了索引的时间效率 .
自索引技术一定程度地克服了上述矛盾 , 从而使时空效率同时提高成为可能 .
目前的自索引可分为两种 : 基于倒排文件的自索引 以及 基于后缀数组的自索引. 这里只关心前者。
(原理略)
基于倒排文件的自索引的本质是以插入少量的辅助信息为代价 , 尽可能地减少压缩带来的解码时间消耗 ,
即通过辅助信息在不需要完全解码的情况下 , 实现信息的准确定位与查询功能 .
这种索引不仅具备复杂性低、简单且易于实现的优点 , 同时具有良好的查询性能和可扩展性 , 但其缺陷在于 :
一是当倒排文件中的位置信息列表被分成大量的小块时 , 插入的辅助信息不仅会导致大量的额外存储开销 , 同时由此产生的磁盘访问时间将超过压缩所带来的性能 ;
二是难以同时支持连接布尔查询与排序查询 ;
三是这种倒排文件自索引在文本显示功能上仍然依赖于原文本 .
总结与展望
索引与压缩技术的结合 , 极大地提高了索引的空间效率 . 通过压缩编码技术 , 倒排文件的大小将降低到原文本大小的 10%, 同时 , 内存空间、 CPU 资源、 I/O 操作、索引创建时间等性能都有了明显的改善 ;
压缩倒排索引仍然是应用最为广泛的索引 , 而且其应用面还在不断扩展 , 如支持结构化的 XML 查询、支持 P2P 的文本信息检索以及基于内容的多媒体音乐检索等新领域 ;
自索引技术作为索引与压缩技术的进一步发展 , 使得时间效率与空间效率的同时提高成为可能 , 一定程度地解决了时间与空间效率的矛盾问题 .
例如 , 对于同一数据集 , 采用基于倒排文件的自索引技术与不采用自索引技术相比 ,
- 对于 5~10 个词的连接布尔查询 , 处理时间减小约 5 倍 ;
- 对于排序查询 , 处理时间减小约 2~4 倍 .
- 而插入忽略信息的大小约为原始文本大小的 2%.
- 通过采用递归的方式对插入忽略信息的列表进行索引 , 并采用压缩技术 , 可以实现内存空间、存储空间与处理时间上的同时减小 .
[IR] Time and Space Efficiencies Analysis of Full-Text Index Techniques的更多相关文章
- [Algorithm] Fibonacci Sequence - Anatomy of recursion and space complexity analysis
For Fibonacci Sequence, the space complexity should be the O(logN), which is the height of tree. Che ...
- 本人AI知识体系导航 - AI menu
Relevant Readable Links Name Interesting topic Comment Edwin Chen 非参贝叶斯 徐亦达老板 Dirichlet Process 学习 ...
- Disk Space Usage 术语理解:unallocated, unused and reserved
通过standard reports查看Disk Usage,选中Database,右击,选择Reports->Standard Reports->Disk Space Usage,截图如 ...
- Building the Unstructured Data Warehouse: Architecture, Analysis, and Design
Building the Unstructured Data Warehouse: Architecture, Analysis, and Design earn essential techniqu ...
- [中英对照]Device Drivers in User Space: A Case for Network Device Driver | 用户态设备驱动: 以网卡驱动为例
前文初步介绍了Linux用户态设备驱动,本文将介绍一个典型的案例.Again, 如对Linux用户态设备驱动程序开发感兴趣,请阅读本文,否则请飘过. Device Drivers in User Sp ...
- Low overhead memory space management
Methods, apparatus, and systems, including computer programs encoded on a computer storage medium, m ...
- [20190918]shrink space与ORA-08102错误.txt
[20190918]shrink space与ORA-08102错误.txt 1.环境:SCOTT@test01p> @ ver1PORT_STRING V ...
- 【443】Tweets Analysis Q&A
[Question 01] When converting Tweets info to csv file, commas in the middle of data (i.e. locati ...
- 2016CVPR论文集
http://www.cv-foundation.org/openaccess/CVPR2016.py ORAL SESSION Image Captioning and Question Answe ...
随机推荐
- NDArray自动求导
NDArray可以很方便的求解导数,比如下面的例子:(代码主要参考自https://zh.gluon.ai/chapter_crashcourse/autograd.html) 用代码实现如下: im ...
- EasyUI学习总结(二)——easyloader分析与使用(转载)
本文转载自:http://www.cnblogs.com/haogj/archive/2013/04/22/3036685.html 使用脚本库总要加载一大堆的样式表和脚本文件,在easyui 中,除 ...
- 【OpenCV学习】计算两幅图像的重叠区域
问题描述:已知两幅图像Image1和Image2,计算出两幅图像的重叠区域,并在Image1和Image2标识出重叠区域. 算法思想: 若两幅图像存在重叠区域,则进行图像匹配后,会得到一张完整的全景图 ...
- java 查看线程的信息
的代码上加上 断点 运行 进入Terminal jps 查看进程号 jstack 进程号 查看线程的信息 jstack pid 此时进去DEBUG 端F9 跑完程序 再回到Terminal 中 就能 ...
- Web 安全 之 OpenSSL
什么是OpenSSL协议? SSL(Secure SocketLayer,安全套接层)协议是使用最为普遍网站加密技术,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技 ...
- donet core 2.1 DateTime ToString() 方法 在不同平台返回的时间格式不一样?
跟操作系统的 设置的时间格式和系统区域设置有关.为了保持一致性.参数自己写好格式.
- JS 判断object是否包含某个键
1. myObj.hasOwnProperty('myKey'); 2. if ('key' in myObj)
- oracle登陆提示“ora-01031 insufficient privileges”
本机装了服务端的oracle11.2g,一直没用,中间换过系统的登陆用户.今早发现登陆数据库时发现老提示“ora-01031 insufficient privileges”,以为监听没配置好,试过了 ...
- git代码统计
1.统计一段时间的代码量 git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; gi ...
- 游戏编程精粹学习 - 使用Bloom过滤来提高计算性能(BloomFilter)
原文在<游戏编程精粹2>的1.2中,BloomFilter是一种可以快速检测是否存在集合包含关系的数据结构,但有一定的误识别率. 该结构的优点 判断包含关系时效率较高,粗略测试了下比Lis ...