zoukankan      html  css  js  c++  java
  • Elasticsearch基础概念理解

    熟悉ES中的几个关键概念:

    节点(Node):一个elasticsearch运行的实例,其实就是一个java进程。一般情况下,一台机器运行在一台机器上。

    集群(Cluster): 好几个有相同集群名称的节点(Node)。

    索引(Index):有点象数据库。

    类型(Type):可以看做是数据库中的标

    分片(Shard):就是一个lucene index。每个index都会划分成几个shard。每个shard可能是主shard或者是一个副本(replica)。

    具体lucene我也不熟悉,但是反复读了3篇关于这些概念呢的解释,大概对ES的这些概念有了一点理解。

    在ES中创建索引时(就相当于创建一个数据库),ES会默认为这个数据库创建5个分片,这5个分片都是主分片,每个分片又默认创建一个副本(replica)。当向这个数据库插入记录时,ES会根据内定规则,判断这个记录应该记录到哪个分片上。当然,这5个分片的最终数据是一样的,也就是说,插入一条记录时,最终这条记录会从插入的那个shard同步至其他的几个shard。

    再来说说replica。当只有一个es的节点时,默认replica是不存在的,ES只有发现有两台不同IP的ES实例时,才会创建副本(replica),其实这个副本也算一个shard。内容跟原来的shard完全一样,但是这个副本不会进行插入等操作。

    每启动一个ES实例(即java进程)。ES会自动对分片进行重划分。比如在同一台机器上运行了两个ES实例,ES默认会将分片进行重平衡,比如启动了两个ES实例,则5个分片被不均衡的重分到两个实例上。最终其中一个实例上,有3个主分片。另外一个实例上,有2个主分片。另外还有一套副本,也被均分在这两个实例上,也就是说,两个实例共10个shard。如果你扩展到10个实例,那么,每个实例将只有一个shard。

    以上只是个人理解。有理解不正确的地方,还请指出,谢谢!

    参考资料:

    http://stackoverflow.com/questions/15694724/shards-and-replicas-in-elasticsearch

    http://stackoverflow.com/questions/12409438/when-do-you-start-additional-elasticsearch-nodes/12414123

    http://elasticsearch-users.115913.n3.nabble.com/Shards-and-replicas-td2819984.html

    对这类话题感兴趣?欢迎发送邮件至donlianli@126.com;或者关注我的微信公众号“猿界汪汪队”
    关于我:擅长Java,Javascript,Extjs,oracle sql。
  • 相关阅读:
    [mock open]PyUnit执行单元测试时使用字符串模拟文件对象
    bottle 0.5中的key-value数据库
    bottle模板中的替换
    返回不同值的小技巧
    带有参数的装饰器
    常用命令速查
    SQLAlchemy多线程下事务隔离机制详解
    Bancor 协议浅析
    Flask中 endpoint 解析
    pip 相关问题
  • 原文地址:https://www.cnblogs.com/donlianli/p/3188781.html
Copyright © 2011-2022 走看看