1:我记得再我面试的时候第一次被问到这样的问题,我顿时有点语塞,也有点不理解然后我重新看了下资料,总结了下面的个人理解的。
首先大家应该都知道es是面向文档型的数据库,他跟传统型的关系型数据库还不一样,接下来为了方便大家理解我特意找了下资料,下面请看图.
大家看到了这幅图以后相信大家已经对es和传统型的关系型数据库有所了解了。
那么接下来进入正题,为啥es跟传统的关系型数据库查询的效率有很大的区别呢,那么我们接下来会引入一个概念,倒排索引
2:倒排索引
(1):什么是倒排索引呢?
再跟大家介绍倒排索引这个概念的时候,我想跟大家说一下“正排索引”相信。举个栗子
文章编号 (id) 文章内容(comment)
1001 my name is Mr qian
1002 my name is Li si
我们可以将文章编号(ID)可以作为主键,然后将其变成索引,这样搜索起来可以快速的查到我们所需要的内容。
当然这是正排索引所带来的效率是很快的。这里就不多做解释了,但是如果我们想要查其内容( 例子: Mr qian),这样我们查起来会非常的麻烦,我们需要做 模糊查询,模糊查询效率会很低,相当于全局去搜索数据库中所有的数据然后再去做匹配。这样的效率会很低,如果我们查询内容想要查询名字是大写的,但是内容中是小写(Mr qian)的怎么办呢。这时候大家是查还是不查呢。
上面这个栗子,是给大家回顾一下数据库的一些概念,目的就是为了更好的帮助大家解释下什么是倒排索引。
(2):下面继续给大家举个栗子:
我们可以将关键字和 id 作为关联 ,这时候如果我们查询name呢,那么他就会关联我们的1001,1002,如果我们查询 qian 那么就会关联 1001.
keyword id
name 1001,1002
qian 1001
这就是我们的倒排索引,他是跟关键字联系起来的,这样的效率就会大大的提升,在倒排索引中所体现出来的是关键字和文档编号的一个关联。
总结: 模糊查询虽然也能查出来我们想要的数据,但是大家都明白在数据量小的时候这样是可以的,但是一旦数据量巨大,往往带来的是很严重的效率问题,这也是我们需要优化的点之一,es就可以很好的解决这个问题,因为,他是将编号和关键字作为关联,这样我们差的时候就会效率更快而且更准确的查出我们想要的数据。后续小编也会更好的给大家解释下后续es的入门。
最后文章也只是对个人的所理解的东西做一个小小理解,如果有不足的地方还请各位大佬们指出。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)