zoukankan      html  css  js  c++  java
  • Elasticsearch 相关名词理解


    Cluster包含多个node,Indices不应该理解成动词索引,Indices可理解成关系数据库中的databases,Indices可包含多个Index,Index对应关系数据库中的database,它是用来存储相关文档的。
    Elasticsearch与关系数据的类比对应关系如下:

    Relational DB ⇒ Databases ⇒ Tables ⇒ Rows ⇒ Columns

    Elasticsearch ⇒ Indices ⇒ Types ⇒ Documents ⇒ Fields

    这里的document的可以理解为一个JSON序列对象。每个document可包含多个field。


    再来说说Shard,每个Index(对应Database)包含多个Shard,默认是5个,分散在不同的Node上,但不会存在两个相同的Shard存在一个Node上,这样就没有备份的意义了。Shard是一个最小的Lucene索引单元。


    当来一个document的时候,Elasticsearch通过对docid进行hash来确定其放在哪个shard上面,然后在shard上面进行索引存储。


    replicas就是备份,Elasticsearch采用的是Push Replication模式,当你往 master主分片上面索引一个文档,该分片会复制该文档(document)到剩下的所有 replica副本分片中,这些分片也会索引这个文档。我个人觉得这种模式很nice,有些时候对于一个document的进行索引可能生成很大的索引文件,会很占带宽,而只传输原始文件会好很多。



    当进行查询是,如果提供了查询的DocID,Elasticsearch通过hash就知道Doc存在哪个shard上面,再通过routing table查询就知道再哪个node上面,让后去node上面去取就好了。如果不提供DocID,那么Elasticsearch会在该Index(indics)shards所在的所有node上执行搜索预警,然后返回搜索结果,由coordinating node gather之后返回给用户。

  • 相关阅读:
    阐述:SIP协议是什么
    【SIP协议】学习初学笔记
    【协议学习】SIP基本场景分析
    电话的前世今生
    深入浅出SIP协议
    QVariant类及QVariant与自定义数据类型转换的方法
    Qt中如何根据类名来实例化对象
    模板的全特化与偏特化
    为什么c++中,有时可以用类名直接访问非静态成员函数?
    C++引用详解
  • 原文地址:https://www.cnblogs.com/skyblue/p/5216690.html
Copyright © 2011-2022 走看看