ES的隐藏性
ES是一个分布式的系统,里面我们在使用的时候隐藏了复杂的分布式的机制
1)分片机制
插入数据的时候不是根据负载均衡来插入的,是根据一定的路由规则,比如我们就取哈希值取模
我们在创建一个index库的时候,我们可以指定primary shard的数量,也可以指定replica的数量,如果不指定,那么默认primary shard=5 replica=1 所以 replica shard=5,过了一段时间发现数据量很大,我们primary shard不够用了,那么这个时候想修改shard 的个数,能不能改成20个?答案:不能!!原来本应该插入到8的位置,结果插入到了9的位置,这样计算查询规则就错了。所以主分片个数是不能修改的,但是副分片的个数是可以进行修改的。具体怎么完成的那是ES内部的事情,我们先不用考虑。我们写了段java的代码插入数据到主分片里面去了。具体怎么插入的,插入到哪个主分片里面是不需要我们来管的。所以就是把这些功能给隐藏起来了。
如果真的遇见了这样的事,再建一个库,那个库的分片是20,用代码查询出来再导入到这个库中,只能用这个方法
总结:我们操作的时候很轻松的就把数据存入到我们的ES里面了。存入的时候我们并不关心,数据存到哪个分片里面去。
2)集群的发现机制
我们做过一个实验,一开始我们只启动了一个ES的节点,这个时候这个ES的状态是yellow,后来我们又启动了一个ES节点,发现颜色变成了green,这说明,我们后面启动的这个节点,也自动加入了这个集群。那么这个机制就是集群的发现机制。对于我们也是隐藏起来了。我们没必要知道
3)shard 会进行负载均衡
Hbase中如果你新加入了一个Hbase节点,不会自动的进行负载均衡,需要执行一个命令
但是ES不一样。只要你加入了一个节点,会自动帮你进行负载均衡