理解elasticsearch的索引数据
2021-10-26 09:47:11 14 举报
es的数据索引的流程,以及如何理解
作者其他创作
大纲/内容
3. fsync
fsync是linux系统提供的函数,可以将文件系统的缓存刷到磁盘上(io操作),这样数据就真正的被持久化了。1. 默认每30min会flush一次磁盘。2. 如果translog(事务)日志满了也会刷磁盘。
1. write
memory buffer(es服务器的内存缓存)
数据只有在refresh之后,才能被检索!这个很好理解了,因为已经被初始化成lucene能认识的数据了。。。所以很多资料和你说为了实时性,可以把refresh设置成立刻更新。
上面说了,每秒钟都有一个segment,如果不管控的话,估计早就爆炸了,那么es后台会启动一个线程(或者多个)去进行segment合并操作。这里有个很重要的点是:被合并的segment可以是filesystemcache或者是disk中的segment。
虽然最终数据都是写磁盘,但是如果所有的新增数据直接写磁盘的话,估计es要被喷爆了,跟mysql一样,数据肯定是先写到缓存的!es整了一个memorybuffer,用来暂存新的索引记录。
disk(真实的es服务器磁盘)
刚刚塞进memory buffer的数据不能被检索,为啥?很简单,因为还没有写到segment中不满足es最基本的数据结构。Lucene的数据检索最小逻辑单元是segment,而mb中的数据就是一个未初始化的元数据,没法进行任何操作(检索)。
2. refresh
filesystem cache(文件系统缓存-segment)
POST { \"name\":\"zhangsan\
backend thread(后台线程合并段)
文件爆炸是一件很恐怖的事,合并是必然的,有因就有果,因果循环!怎么合并,其实不用去深入了解。毕竟这个是es自己要去解决的问题。
我个人认为理解segment本身是理解很多事情的关键。
merge
原始的json数据已经写入到segment中,且组装成es所需要的数据结构,这个时候,新的检索请求是可以将数据查询出来的。如果不设置,每次refresh都会写一个新的segment
0 条评论
下一页