Elasticsearch 概念介绍
文章目录
概念
document(文档)
包含数据的 JSON 对象。可以理解为数据库(database)里的行(row)。
不需要提前定义 index(document) 里字段结构,也不要求所有 document 结构相同。
index(indices,索引)
JSON 格式的 document 集合。可以理解为数据库里的表(table)。
field(字段)
document 里的 Key-value 结构。可以理解为数据库的列(column)。
字段有很多类型(field type),其中 text 存在倒排索引里,数字(numeric)和经纬度(geo)存在 BKD Tree。
不能修改已经存在的 field 类型。
特别说明下 text 字段和 keyword 字段的区别。
text : 支持分词,全文检索,模糊、精确查找,不支持聚合、排序。场景:邮件内容。
keyword : 不分词,直接索引,模糊、精确查找,支持聚合、排序操作。场景:邮箱号码。
mapping(映射)
可以理解为数据库里的 schemas 。定义 document 、field 属性,如何存储、分词、索引等。
shard(分片)
一个 shard 是一个 lucene 索引(Lucene 索引是由 segment 构成)。index 数据存储在一个或多个 shard 里,即 index 由 shard 构成。
较大的 shard,官方建议最佳分片大小是 10G ~ 50G。shard 有 primary shard 和 replica shard 两种类型。
ElasticSearch 性能调优提到 shard 控制在 10G 左右性能有明显提升。
primary shard(主分片)
index 里每个 document 都属于一个 primary shard。个数在创建时确定,后续不能改(跟路由有关)。
replica shard(副本分片)
可以随时修改个数。为了保证容灾,每个 replica 必须在不同的 node 上,一般 1~3 个。
除了用来备份数据,还可以用来提高系统读的吞吐率。也就是读写分离。
node(节点)
Elasticsearch 实例。所有节点都知道其他节点的存在,并且能分发客户端请求到合适的 node。
node 有不同的角色,一个 node 可以同时有多种角色。
data node(数据节点)
存数据,负责执行 CRUD、搜索和聚合。根据数据使用情况,还可以进一步细分为 hot、warm、cold、frozen角色。
master node(有投票权节点)
有资格被选为主节点的 node,还不是真正的主节点。
elected-master node(主节点)
被选举出来的真正主节点,负责维护集群信息(cluster state)和分配 shard。
ingest node(摄取节点)
用来做预处理。
所有节点默认是 coordinating node,并且不可关闭。该节点作为负载路由器,将传入的请求路由到集群中的不同节点。
coordinating node 节点处理客户端的请求一般分为两个阶段,第一节点,收到客户端的请求并路由到合适的分片(包含请求数据的主分片),第二阶段对结果做聚合。
cluster(集群)
由连接的 nodes 构成。同一个集群通常在同一个网络内。集群可以组成更大的集群网CCR。
inverted index(倒排索引)
Lucene 用来做全文检索的数据结构。一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表。
segment(段)
Lucene 里的数据文件,类似于倒排索引,是内部存储单元,用来存索引数据。不可修改。
更新 document 时,产生新 segment,并把老的标记为删除,segment merge 时才真正删掉。
translog(transaction log 事务日志)
提供所有还没有被刷到磁盘的操作的一个持久化纪录。
index.translog.durability,默认 request,表示主分片和每个副本都完成 translog 刷盘和提交;
async,定时刷盘和提交,间隔 index.translog.sync_interval,默认 5s,不能少于 100ms。
参考链接: