ES写入原理

ES写入时
1.首先写入数据的请求由客户端选择一个node节点,这个节点成为协调节点。
2.协调节点进行路由(给document分配一个id根据id进行哈希算法找到一个主分片)将请求发送到该主分片所在的node
3.node处理请求写入document并将数据同步到副本分片上,数据写入后向协调节点发送写入成功的响应
4.协调节点收到写入成功的响应之后返回结果给客户端

写入数据的底层原理
写入数据时会先后记录数据的位置有以下节点
1.buffer 2.os cache 中的segment file 3.translog 4.磁盘上的segment file

buffer作为内存缓冲区
translog作为宕机恢复的日志,位置在oscache和磁盘中,每隔五秒刷新到磁盘中,因此宕机最多丢失五秒的数据。每30分钟或者日志文件足够大时发起一次flush操作将os cache中的segment file刷到磁盘中去,并且清空日志文件
segment file存储ES的数据,位置在oscache和磁盘中,先存到oschche中等待translog发起commit操作,segment flie将被刷到磁盘中去,每秒生成一个segment file文件

过程如图:
ES写入原理_第1张图片
第一步:首先数据会被同时写入buffer和translog,
第二步当buffer达到足够大小或存储了一秒钟的数据后,es会将buffer中的数据refresh到oschche中。
第三步:translog足够大或每隔30分钟发起commit操作将os cache中的segment file flush到磁盘中去,并且清空日志文件

你可能感兴趣的:(java,elasticsearch)