es快速扫描
介绍
Elasticsearch简称es,一款开源的分布式全文检索引擎
可组建一套上百台的服务器集群,处理PB级别数据
可满足近实时的存储和检索
倒排索引
跟正排索引相对,正排索引是根据id进行索引,所以查询效率非常高,但是模糊查询效率低,因为要全表扫描,即便创建索引也不生效
倒排索引是先根据查询内容进行分词处理,根据每个词条创建索引,还会存储该词条出现的所有记录id,这样即使模糊查询也会命中索引,从而找到所有包含搜索项的记录id,再进行处理返回结果
如果选举master
对所有配置可以成为master的节点根据nodeId进行排序,默认排第一位的节点是master,所有分片都进行如此操作,最后票数达到半数以上的节点成为master节点
如何避免脑裂
可以配置最小master节点数参数来解决脑裂问题
写入原理
首先会根据docid进行hash找到合适的分片
然后开始写入,分两个阶段,refresh和flush阶段
refresh阶段:先将数据写到内存buffer中,然后每秒将数据向os cache中写入,生成新的segment,os cache中的数据可以进行查询
flush阶段:写入到os cache中的translog数据,默认每5秒刷盘一次,当translog足够大(512M)或者 每30分钟进行一次flush操作,将translog中所有内容全部刷盘,旧的translog将被删除
针对大数据如何进行聚合操作
使用elasticsearch提供的cardinality度量,它提供一个字段的基数,也就是该字段的distinct或者unique数目
如何保证读写一致性
使用版本号乐观并发控制