中华人民共和国第六套提肛运动体操,现在开始
1234
2234
3234……
刚才看了下Elasticsearch的原理,感觉分布式系统的思想都大差不差。下面是我对ES的理解:
1. ES基于Lucene,Lucene底层的存储结构通过Segment表达,Segment里面有分词以及出现的次数和所在的文件,通过这样的结构就能实现搜索功能。那么,在ES中的每个分片就是一个Lucene。
2. 在Lucene中,Segment是在内存中,所以,数据的可靠就需要ES去保障。另外,从这一点也可以得知ES是吃内存的,这也是为什么可以做到实时搜索。
- 单机情况下,为了不影响写入效率,通常的解决方案就是日志先行写入磁盘,就像MySQL中的WAL,在ES中叫TransLog。基于日志形式在进行数据更新时,可以通过合并的方式保障同一条数据不重复,很多分布式系统中都有这样的思想,例如HBase中的LSM。
- 在分布式系统中,数据可靠性的保障都是通过副本的形式,就例如redis、Hadoop、Kafka等等。保障副本的一致就离不开paxos、raft这些一致性协议。
3.当然,在分布式系统中的查询,都是先路由到对应的分片,然后再将各分片的数据聚合,例如Hadoop中的shuffle,在ES中同样会有聚合的阶段。
1. ES基于Lucene,Lucene底层的存储结构通过Segment表达,Segment里面有分词以及出现的次数和所在的文件,通过这样的结构就能实现搜索功能。那么,在ES中的每个分片就是一个Lucene。
2. 在Lucene中,Segment是在内存中,所以,数据的可靠就需要ES去保障。另外,从这一点也可以得知ES是吃内存的,这也是为什么可以做到实时搜索。
- 单机情况下,为了不影响写入效率,通常的解决方案就是日志先行写入磁盘,就像MySQL中的WAL,在ES中叫TransLog。基于日志形式在进行数据更新时,可以通过合并的方式保障同一条数据不重复,很多分布式系统中都有这样的思想,例如HBase中的LSM。
- 在分布式系统中,数据可靠性的保障都是通过副本的形式,就例如redis、Hadoop、Kafka等等。保障副本的一致就离不开paxos、raft这些一致性协议。
3.当然,在分布式系统中的查询,都是先路由到对应的分片,然后再将各分片的数据聚合,例如Hadoop中的shuffle,在ES中同样会有聚合的阶段。
展开
评论
5