[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 ...
随机推荐
- svnkit https 忽略证书认证
直接上代码 解决jdk版本问题:Security.setProperty("jdk.tls.disabledAlgorithms", ""); import j ...
- perl 读写文件
#http://perlmaven.com/open-and-read-from-files #mode operand create truncate#read < #write > y ...
- Android 获得手机屏幕真实的宽高
http://stackoverflow.com/questions/1016896/get-screen-dimensions-in-pixels WindowManager w = activit ...
- 修改Unity中Lua文件的默认打开程序
项目中引用了XLua,而Lua文件又是以txt文件结尾的,当修改系统的扩展脚本编辑器为vs后双击lua文件(xx.txt)默认也使用vs打开了,无提示的黑白文本编辑 昨办? -. 后来看到网上有写Un ...
- I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
问题: 安装TensorFlow(CPU版本),使用pip install tensorflow安装,安装一切顺利,但是在跑一个简单的程序时,遇到如下情况: 大概意思是:你的CPU支持AVX扩展,但是 ...
- Android 里的数据储存
数据持久化 关于数据储存,这个话题已经被反复讨论过很多次了,我是不建议把网络存储这种方式纳入到数据储存的范围的,因为这个和Android没多少关系,因此就有如下的分类: 本地储存(也称之为数据持久化, ...
- Mongodb对集合(表)和数据的CRUD操作
一.集合(对应数据库的表) 1.查看当前库里的所有集合 show collections 2.新建集合 显式创建 db.createCollection("user") 隐式创建 ...
- iOS 7设计备忘单
With the release of iOS 7, app designers and developers will need to adjust their visual language to ...
- 判断Android 当前版本是否为debug版本
public static boolean isDebugVersion(Context context) { try { ApplicationInfo info = context.getAppl ...
- 【转载】Springboot整合 一 集成 redis
原文:http://www.ityouknow.com/springboot/2016/03/06/spring-boot-redis.html https://blog.csdn.net/plei_ ...