es的写入过程

es的写入过程

建立((C)reate)缓存

当咱们发送索引一个新文档的请求到协调节点后,将发生以下一组操做:函数

Elasticsearch集群中的每一个节点都包含了改节点上分片的元数据信息。协调节点(默认)使用文档ID参与计算,以便为路由提供合适的分片。Elasticsearch使用MurMurHash3函数对文档ID进行哈希,其结果再对分片数量取模,获得的结果便是索引文档的分片。索引

shard = hash(document_id) % (num_of_primary_shards)内存

当分片所在的节点接收到来自协调节点的请求后,会将该请求写入translog(咱们将在本系列接下来的文章中讲到),并将文档加入内存缓冲。若是请求在主分片上成功处理,该请求会并行发送到该分片的副本上。当translog被同步(fsync)到所有的主分片及其副本上后,客户端才会收到确认通知。ci

内存缓冲会被周期性刷新(默认是1秒),内容将被写到文件系统缓存的一个新段上。虽然这个段并无被同步(fsync),但它是开放的,内容能够被搜索到。路由

每30分钟,或者当translog很大的时候,translog会被清空,文件系统缓存会被同步。这个过程在Elasticsearch中称为冲洗(flush)。在冲洗过程当中,内存中的缓冲将被清除,内容被写入一个新段。段的fsync将建立一个新的提交点,并将内容刷新到磁盘。旧的translog将被删除并开始一个新的translog。文档

引用

相关文章
相关标签/搜索