zoukankan      html  css  js  c++  java
  • Elasticsearch的Shard和Segment

    Shard是什么?

    在下面的文档中进行了介绍

    https://www.elastic.co/guide/cn/elasticsearch/guide/current/kagillion-shards.html
    

    1.一个分片的底层即为一个 Lucene 索引,会消耗一定文件句柄、内存、以及 CPU 运转。    

    2.每一个搜索请求都需要命中索引中的每一个分片,如果每一个分片都处于不同的节点还好, 但如果多个分片都需要在同一个节点上竞争使用相同的资源就有些糟糕了。    

    3.用于计算相关度的词项统计信息是基于分片的。如果有许多分片,每一个都只有很少的数据会导致很低的相关度。

     

    在官方文档中介绍了clusters, nodes, and shards的关系

    https://www.elastic.co/guide/en/elasticsearch/reference/current/scalability.html
    

    1.一个Es的索引实际上是一个或者多个的物理shard的组合

    2.Shard有两种:一种是primaries and replicas,即主分片和副本分片。索引中的每一个文档都属于一个主分片,副本分片是主分片的拷贝

    replica shard是primary shard的副本,负责容错,以及承担读请求负载

    每个document肯定只存在于某一个primary shard以及其对应的replica shard中,不可能存在于多个primary shard

    primary shard不能和自己的replica shard放在同一个节点上,否则宕机会出现数据丢失

    3.Es通过分散一个index中的文档到到多个shards中,以及分散这些shards到不同的节点来实现高可用

    4.主分片的数量在index创建的时候就决定好了, 副本分片的数量可以随时改变

    5.当增减节点的时候,shard会在集群中自动平衡

    6.primary shard的默认数量是5,replica默认是1,默认有10个shard,5个primary shard,5个replica shard,如下

    参考:https://blog.csdn.net/likui1314159/article/details/53217750

    https://blog.csdn.net/qq_37502106/article/details/80584041

    Segment是什么?

    每个分片包含多个segment(段),每一个segment都是一个倒排索引

    在查询的时,会把所有的segment查询结果汇总归并后最为最终的分片查询结果返回

    1.segment是不可变的,物理上你并不能从中删除信息,所以在删除文档的时候,是在文档上面打上一个删除的标记,然后在执行段合并的时候,进行删除

    2.索引segment段的个数越多,搜索性能越低且消耗内存更多

    参考:https://blog.csdn.net/likui1314159/article/details/53217750

    https://www.jianshu.com/p/2f65d801d367

  • 相关阅读:
    Apache日志分析
    iptables日志探秘
    php与其他一些相关工具的安装步骤分享
    ERROR 1 (HY000): Can't create/write to file '/tmp/#sql_830_0.MYI' (Errcode: 13)
    一些可能需要的正则
    restful api的简单理解
    认识MySQL Replication
    如何处理缓存失效、缓存穿透、缓存并发等问题
    经典算法mark
    php常用的一些代码
  • 原文地址:https://www.cnblogs.com/tonglin0325/p/12357016.html
Copyright © 2011-2022 走看看