美文网首页
Elasticsearch

Elasticsearch

作者: 与搬砖有关的日子 | 来源:发表于2020-03-24 22:43 被阅读0次

    1、简介 参考

    智能搜索,分布式的搜索引擎
    index -> type -> mapping -> document -> field。

    • index 索引(索引库)
      ES中的索引非传统索引的含义,ES中的索引是存放数据的地方,是ES中的一个概念词汇,index类似于我们Mysql里面的一个数据库 create database user; 好比就是一个索引库。
    • type类型
      类型是用来定义数据结构的,在每一个index下面,可以有一个或者多个type,好比数据库里面的一张表。每个 type 的字段都是差不多的,但是有一些略微的差别。
    • document
      文档就是最终的数据了,可以认为一个文档就是一条记录。是ES里面最小的数据单元,就好比表里面的一条数据
    • Field 字段
      好比关系型数据库中列的概念,一个document有一个或者多个field组成。
    • shard分片
      一台服务器,无法存储大量的数据,ES把一个index里面的数据,分为多个shard,分布式的存储在各个服务器上面。
      拆分多个 shard 是有好处的,一是支持横向扩展,比如你数据量是 3T,3 个 shard,每个 shard 就 1T 的数据,若现在数据量增加到 4T,怎么扩展,很简单,重新建一个有 4 个 shard 的索引,将数据导进去;二是提高性能,数据分布在多个 shard,即多台服务器上,所有的操作,都会在多台机器上并行分布式执行,提高了吞吐量和性能。
      接着就是这个 shard 的数据实际是有多个备份,就是说每个 shard 都有一个 primary shard,负责写入数据,但是还有几个 replica shard。primary shard 写入数据之后,会将数据同步到其他几个 replica shard 上去。
    • replica副本
      同一个节点上面,副本和主分片是一定不会在一台机器上面的,就是拥有相同数据的分片,是不会在同一个节点上面的。

    2、Elasticsearch集群

    ES是对等式的架构
    ES中master的作用
    1)管理集群的元数据,比如说索引的创建,和删除等等
    2)集群里面master也是自动选举的。
    如果某个非 master 节点宕机了。master 会让 primary shard 对应的 replica shard(在其他机器上)切换为 primary shard。如果宕机的机器修复了,修复后的节点也不再是 primary shard,而是 replica shard。
    要是 master 节点宕机了,那么会重新选举一个节点为 master 节点。

    3、Elasticsearch读写数据原理

    数据先写入内存 buffer,然后每隔 1s,将数据 refresh 到 os cache,到了 os cache 数据就能被搜索到(所以我们才说 es 从写入到能被搜索到,中间有 1s 的延迟)。每隔 5s,将数据写入 translog 文件(这样如果机器宕机,内存数据全没,最多会有 5s 的数据丢失),translog 大到一定程度,或者默认每隔 30mins,会触发 commit 操作,将缓冲区的数据都 flush 到 segment file 磁盘文件中。数据写入 segment file 之后,同时就建立好了倒排索引。


    image.png

    如果是删除操作,commit 的时候会生成一个 .del 文件,里面将某个 doc 标识为 deleted 状态,那么搜索的时候根据 .del 文件就知道这个 doc 是否被删除了。

    如果是更新操作,就是将原来的 doc 标识为 deleted 状态,然后新写入一条数据。

    buffer 每 refresh 一次,就会产生一个 segment file,所以默认情况下是 1 秒钟一个 segment file,这样下来 segment file 会越来越多,此时会定期执行 merge。每次 merge 的时候,会将多个 segment file 合并成一个,同时这里会将标识为 deleted 的 doc 给物理删除掉,然后将新的 segment file 写入磁盘,这里会写一个 commit point,标识所有新的 segment file,然后打开 segment file 供搜索使用,同时删除旧的 segment file。

    4、倒排索引

    倒排索引就是关键词到文档 ID 的映射,每个关键词都对应着一系列的文件,这些文件中都出现了关键词。

    5、es 在数据量很大的情况下(数十亿级别)如何提高查询效率

    • 增加filesystem_cache内存
    • 尽量写入需要检索的字段
    • 做一个专门的缓存预热子系统,就是对热数据每隔一段时间,就提前访问一下,让数据进入 filesystem cache 里面去。
    • 将冷数据写入一个索引中,然后热数据写入另外一个索引中,这样可以确保热数据在被预热之后,尽量都让他们留在 filesystem os cache 里,别让冷数据给冲刷掉。

    相关文章

      网友评论

          本文标题:Elasticsearch

          本文链接:https://www.haomeiwen.com/subject/nbhzyhtx.html