深度科技的anything快速检索技术研究
2018-02-07张木梁
张木梁 张 磊 秦 娣
1(武汉深之度科技有限公司技术部 北京 100080) 2(武汉深之度科技有限公司研发中心 北京 100080) 3(武汉深之度科技有限公司市场部 北京 100080) (zhangmuliang@deepin.com)
为了能够向用户提供一个高速的、基于文件名搜索的离线文件搜索功能,我们引入了“anything快速检索”技术.对于“anything”的定义是Something like everything, but nothing is really like anything….
而anything之所以叫anything,是受到了Windows下everything软件的启发[1].原来在Linux中有一个类似的rlocate程序[2],但是那个程序有点太老了,效率低下,效率方面的设计与当前时代不相称.主要是出于与Linux传统桌面结合得比较紧密,优化起来对系统其他组件影响都很大,很多发行版就不会在这方面进行优化.
1 基础索引设计
1.1 简要分析
在Linux下,最常用的文件搜索软件是find,它会递归遍历每个目录,针对每个目录与文件按照用户给出的参数过滤出符合条件的目录与文件,并打印出来.
在命令行模式下,find使用很广,功能强大,不仅可以根据文件名查找文件,还可以根据文件类型、权限、修改时间、大小,甚至与其他软件配合对文件进行过滤.但是在图形界面下,用户最常用的仍是根据文件名对文件进行查找,这是anything面向的核心问题.
使用find搜索时,如果已经搜索过,则对应的文件与目录信息将会被缓存在内存中,可以大大加速搜索.当然,root用户可以运行sysctl -w vm.drop_caches=3来清除这些缓存.但是,即使使用了缓存,在仅使用文件名搜索的前提下,find的搜索速度仍然是不理想的.
find搜索会通过系统调用遍历每个目录的内容,读取其中的文件列表,再根据文件列表中……
