ElasticSearch写入数据的底层存储
2020-10-21 本文已影响0人
雁阵惊寒_zhn
写入数据的底层存储
- 数据写入时,首先写入到缓冲区buffer中(ES的JVM内存中),此时数据对外是搜索不到的。
- 缓冲区中的数据默认每间隔1秒,就会写入到底层Lunces OS Cache中,这时的数据是可查询出来的。
- 数据写入缓冲区的同时,写入到translog日志文件中,translog日志文件用于固化内存中的数据,每隔5秒translog中的数据就会被持久化到磁盘中(通过Lunces OS Cache)。当节点因为故障重启时,系统会通过读取translog恢复数据,最多只会丢失一个时间间隔5秒的数据。
- translog会随着缓存区不断同步而增大,达到一定程度就会主动触发提交(commit操作)。默认每隔30分钟也会对translog日志文件进行提交(commit操作),将OS Cache中数据写入到磁盘中,生成Segment file文件。在commit之前,所有的数据都处于缓冲区或者OS Cache中,translog起到备份的作用。
- 清空现有translog文件,启动一个新的translog文件。
- 如果删除操作,并不是马上物理清除被删除的文档,而是标记为delete状态;更新操作,标记原有的文档为delete状态,再插入一条新的文档。
- 系统中会产生很多的Segment file文件。所以定期要执行合并(merge)操作,将多个Segment file文件合并为一个。在合并的过程中,会将标记删除的文件进行物理删除操作。ES记录每个Segment file文件的提交点(commit point),用于管理所有的Segment file文件。
- 主分片执行写入操作后,同步给其他从分片。