Elasticsearch为什么查询速度快

Elasticsearch

Elasticsearch为什么查询速度快

正排索引

在这里插入图片描述

倒排索引

在这里插入图片描述

  • Term Dictionary
    如何高效的在这个索引结构中查询到 li 呢,结合我们之前的经验,只要我们将 Term 有序排列,便可以使用二叉树搜索树的数据结构在 o(logn) 下查询到数据。
    将一个文本拆分成一个一个独立Term 的过程其实就是我们常说的分词。
    而将所有 Term 合并在一起就是一个 Term Dictionary,也可以叫做单词词典。
    英文的分词相对简单,只需要通过空格、标点符号将文本分隔便能拆词,中文则相对复杂,但也有许多开源工具做支持。
    当我们的文本量巨大时,分词后的 Term 也会很多,这样一个倒排索引的数据结构如果存放于内存那肯定是不够存的,但如果像 MySQL 那样存放于磁盘,效率也没那么高。
  • Term Index
    我们可以选择一个折中的方法,既然无法将整个 Term Dictionary 放入内存中,那我们可以为 Term Dictionary 创建一个索引然后放入内存中。
    这样便可以高效的查询 Term Dictionary ,最后再通过 Term Dictionary 查询到 Posting List。
    相对于 MySQL 中的 B+树来说也会减少了几次磁盘 IO。
    这个 Term Index 我们可以使用这样的 Trie 树,也就是我们常说的字典树来存放。
    如果我们是以 j 开头的 Term 进行搜索,首先第一步就是通过在内存中的 Term Index 查询出以 j 打头的 Term 在 Term Dictionary 字典文件中的哪个位置(这个位置可以是一个文件指针,可能是一个区间范围)。
    紧接着在将这个位置区间中的所有 Term 取出,由于已经排好序,便可通过二分查找快速定位到具体位置;这样便可查询出 Posting List。
    最终通过 Posting List 中的位置信息便可在原始文件中将目标数据检索出来。
    在这里插入图片描述

在这里插入图片描述

为什么Elasticsearch不适合做数据存储

  1. mapping不可改,不能改index属性。
  2. 无法多对多。
  3. 没有用户验证和权限控制。
  4. 没有事务,不具备ACID的特性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值