数据结构-针对“倒排索引”的想法

今天看某篇技术文章看到了“倒排索引”这个词,之前只是简单了解一下,这次再看发现印象又有点模糊,要思考半天才能回忆,因此记录下加深印象。

既然有倒排索引,那么自然有正排索引,简称索引。做IT行业的应该对索引很熟的,数据库查询必备。那么什么是索引,引用百度的定义:在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。 

很清楚了,大家都看过书,索引就是书中的目录。那么索引的目的是什么?目的只有一个,就是更高效的进行查询。在书中,我们会把内容分章分节,每一个章节取一个标题,最后这些标题就构成了索引。当你想查找的内容在这个索引中,你可以快速定位到对应位置;如果不在,那你只能全部翻一遍了;甚至可能全部翻一遍也可能不存在。而计算机和人也是有区别的,计算机不具备人的抽象概括能力,但是具备极强的运算能力。人看书可以根据概括出来的标题,大致判断是否存在,不存在的话也不可能一个字一个字的去全书翻阅;而计算机需要明确的索引值来进行判断,如果没有找到,则可以遍历查询。所以在数据库中,一般根据列的值建索引,索引量一般很大,所以不能直接丢一堆,否则索引查询也很慢,一般都是根据值进行排序,排好序的索引通过一些算法就可以快速定位数据,而且由于索引的很细,查找更精确。

那么问题来了,为啥又出现一个倒排索引呢?我一向认为,技术服务于需求,正是由于需求的无穷无尽,所以技术(科学)的发展永无止境,人类社会才会越来越好(有可能只是自我感觉越来越好,但生为人,最好不要跟自己作对。PS:人类思想的绝对自由就是学会跟自己作对,所以凡事有利就一定有弊,自己要把握度。再PS:需求太多、欲望太强的人,最好学学艺术,别问为什么,扯太多了)。

人的需求无止境,当我需要更细粒度的查询时,你能不能给每一列都建上索引呢。当然可以,但是凡事有利就有弊:第一,索引占据额外的存储,所有列建上,存储至少增加一倍,当然,现在存储不是什么大问题;第二,索引的维护需要消耗资源,当一条新数据进来,需要对所有列上的索引也进行插入,当数据修改或删除时,也要进行相应的维护,这是个大问题。所以,一定要把握度。

之前的角度是,不管我输入什么,你就到数据库中查,匹配到了就给我展示。换个角度,人们搜索的时候输入的是什么呢,人们搜索的是一个个单词,输入的组合是无限的,但是单词的数量是有限的,不管怎么分,它总有一个限度,基本可以涵盖大部分的用户输入。倒排索引就是在这个角度中产生的,它有一个关键的概念就是词典,这个词典也是无限增长的,但是增长速度是越来越慢的。那么当用户想要查什么东西的时候,可以针对用户输入的句子进行切分,然后到词典中去查有没有相关的数据。每一个单词后面会跟一个列表,这个列表用来存储所有跟这个单词有关的文档编号、单词在文档中的位置等信息,并且基本按照从前到后顺序排列。

所以倒排索引中的这个倒排,不是说把顺序倒过来排,而是概念上的一个切换。数据库索引是,对存储的原数据列进行索引,这个原数据那就是可以有无限可能了,并且一个索引只对应一列;而倒排索引是对用户可能的输入进行索引,因为用户的输入一定是有意义的、符合一定规则的,因此会更快。那么问题来了,这样的话,对于每一个文档插入或更新的时候不都要针对词典进行分析然后建立索引吗?没错,确实需要,凡事有利就有弊,所以这种模式的插入、更新速度一定会比数据库慢,但是随着分布式计算等技术的逐渐成熟,计算机(或者计算群)计算和存储能力一定会越来越强,那就不成问题了。

回过头来再想一下,倒排索引的这个概念,是否跟人读书的标题索引有点像呢,这其实是不是就是计算机上面的抽象、概括能力呢?没有人不喜欢明确的答案对不对,但是当数据规模在一定程度上,想要获得明确的答案,付出的时间代价太大或者说理论上不可能实现情况下,那就必须得具备抽象、概括能力,因为人的计算存储能力就很差,但凭借抽象概括能力能完成太多太多工作。

再回过头来想一想,现在的大数据处理的各种概念、人工智能,一部分用来提高计算机的计算存储能力,另一部分就是往抽象、概括上走。计算和存储能带来精确结果,而抽象、概括就是人类智能的顶级能力(可以无限自推)。以目前计算机世界的原理和架构,想要实现人类智能是不可能的,只能在人类智能安排下、在特定领域实现类人类智能。

再想一想,没必要去实现真正的人类智能吧(目前也不可能实现),因为没这个需求啊(技术服务于需求),我们只需要看起来更智能更稳定的帮手就行了(解决人类计算和存储能力的不足)!

还有,能否说:1.凡事有利就有弊,(既有人类抽象能力又有强大计算和存储能力,在自然界不可能存在);2.人不能提起自己,也不可能发明跟自己一样的东西。(人类智能,很多小动物都有啊,培养小动物提升他们的智能达到人类的层次,我觉得还是很有可能的;计算机,不可能)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值