如何理解ES是分布式、可伸缩、高可用
- ES 是基于Lucene实现的分布式搜索引擎,其目的是扩展单机性能问题
- ES 可以横向或者纵向扩展,一般都选择横向扩展,这样性价比更好,当集群需要扩展时只要添加相应机器,ES会自动进行集群感知
- ES 是节点对等分布式架构,当前Master 节点出现宕机,集群中任何一个节点都可以充当Master节点,保证服务可用
面向文档和面向对象有什么区别
ES 是面向文档搜索引擎,文档的重要特性就是易于扩展的维护,面向文档一般是Json格式,而面向对象的特点是耦合性低,各对象之间的耦合性尽可能低,对象内部内聚性尽可能高,所以面向对象在表示引用形的对象时需要关联,表示形式比较复杂,而文档就相对简洁,比如:
# 面向对象
public class Employee(){
private String dep;
private String level;
private PersonInfo info;
}
public class Person(){
private String name;
private String age;
private String gender;
}
# 面向文档
{
dep:"",
"level":"",
"info":{
"name":"",
"age":"",
"gender":""
}
}
ES shard和replica机制
- 一个index 可以包括多个shard
- 每一个shard就是一个lucene实例,可以提供请求和处理数据能力
- 节点发生变化,ES会自动在集群中平衡shard
- 每个document 只能存在于一个primary shard中
- replica shard 是 primary shard 的副本,负责对primary shard 容错,读取负载
- primary shard 在index 创建时就一定确定,不可修改,但是replica shard的数量可以动态调整
- primary shard 和其对应的 replica shard 不可以再同一台机器中,否则就失去了replica 意义。
网友评论