ElasticSearch数据结构
2021-04-15 17:13:04 0 举报
AI智能生成
ElasticSearch数据结构
作者其他创作
大纲/内容
ElasticSearch会对文字进行分词
分出来词的集合叫做 Term Dictionary
Term Dictionary 会排序(查找的时候可以使用二分查找)
词对应的文档ID叫做 Posting List
使用 FST 进行压缩,节省硬盘空间。使用Roaring Bitmaps 求出文档ID的交并集
由于Term Dictionary 的词量太大,不能全部装入到内存中,抽象了一层词前缀叫做 Term Index
Term Index 以FST 数据结构来保存词的前缀,节省内存且查找速度快
Elasticsearch写入
1.写到内存缓冲区,该内存缓冲区每秒会刷新到文件系统缓冲区(此时会生成一个segement 文件),有segement文件才能被索引
2.写到translog内存缓冲区,每隔5s会刷新到磁盘中。主要用作于备份(如果中途节点挂了,可以通过translog恢复数据),最多有5s数据丢失
3.隔30分钟或者translog文件过大,会执行一次commit操作,真正意义上完成一次持久化
Elasticsearch查询
查询的方式简单分为两种
通过ID搜索出对应的Doc
- 检索内存的Translog文件- 检索硬盘的Translog文件- 检索硬盘的Segement文件
通过query匹配相关的Doc
从内存和硬盘的Segement文件中查找
查询可以分为三个阶段
QUERY_AND_FETCH
(查询完就返回整个Doc内容)
QUERY_THEN_FETCH
(先查询出对应的Doc id ,然后再根据Doc id 匹配去对应的文档)
DFS_QUERY_THEN_FETCH
(先算分,再查询)
用得最多的就是QUERY_THEN_FETCH
向各个主分片和副本分片分发请求
得到各个节点返回的doc id,组成doc id集合
再次请求各个分片拿到对应的完整Doc
ElasticSearch架构
了解Index Type Document Field Mapping DSL 相关的术语
Index
ElasticSearch的Index相当于数据库的Table
type
新版本已废除
Document
相当于数据库的一行记录
Field
相当于Column
Mapping
相当于Schema
架构
一个主节点,多个从节点
主分片可以写入、读取。副本分片可以读取
一个Index,多个分片可以提高系统的吞吐量
副本分片主要为了实现高可用
Elasticsearch更新和删除
有一个merge任务会把segement文件合并成一个(因为写入的时候每秒都会生成一个segement文件)
更新和删除的时候实际上是把doc记录的状态标识为delete
merge segement文件的时候会把被标识为delete状态的doc进行物理删除
0 条评论
下一页