目录
如果你只是会用 Elasticsearch 而不了解它的运行机制,不是一个合格开发工程师。
作为一名开发工程师,在掌握一项中间件的使用的同时,应该同时掌握该中间件的基本原理,不要求源码层面,但应该知道那些重要的机制,这样在项目的性能优化方面,你才不会无所适从。
这里涉及的底层原理主要涉及到:
- 单个文档的查询
- 按条件的查询
- 文档写
- 文档删除与更新
- 集群原理-组建集群,集群选主,集群读写
- 倒排索引原理
涉及到的概念:
- refresh,是指文档从buffer中写入file cache的过程
- file cache,只有当文档写入了file cache,文档就处于可搜索的状态
- memory buffer,es写入文档时,先写入内存缓冲
- segment,es的数据存于段中,分为cache segment和disk segment,其中segment包含doc,segment是不可再写的,但是可以合并
- commit point,提交点,当清空buffer后,cache中的segment刷入了disk中,此时就有commit point
- translog,一种类似事务机制,写cache同时就记录在内存的translog,5s刷新一次到disk translog,当segment刷到disk时,disk的translog也就可以删除了
- fsync,落盘的操作
- .del,文档删除或更新时,文档不是直接物理删除,而是先记录在.del文件中,只是搜索时通过该文件过滤不返回.del文件的内部doc,在段合并的时候才会通过.del真正删除doc数据
- index,索引,索引下时文档的集合
- mapping,可以看做数据库数据表的定义结构,规定了哪些字段什么类型
- setting,设置,定义了分片与副本数,refresh时间等
- template,主要包含mapping和setting设置
- ilm,索引生命周期管理,通过ilm实现数据的不同状态的自动化管理,只要定义了ilm,索引就会进行相应滚动