ElasticSearch 索引创建与规范

索引概念

ES中的索引(index)定义了文档的逻辑存储和字段类型,索引是一种虚拟空间,类似于数据库中的表。一个索引可以包含不同的数据结构的数据,且由一到多个分片组成。主要相关概念如下:
索引(index): 存储文档归类的逻辑空间,由多个分片组成,相当于数据库中的表。
分片(shard): 相当于Lucene中的索引文件,适当增加分片数可以提升索引性能。
段(segment): 一个shard有多个段,一个段是Lucene中存储数据最小单位,一个段对应Lucene中的一个倒排索引。
文档(document): 一条ES记录,相当于数据库中的行。
副本(replicas): 也叫备份。设置副本后,在索引的时候,会写入主分片,并同步到副本分片。有了副本分片可以提升检索效率,和保障数据高可用。

创建方式

动态创建

定义:索引不用提前创建,插入的第一条(批)数据后,完成创建
场景:非业务逻辑场景,对数据结构定义要求不高的场景
备注:使用动态创建,es会根据第一条数据来对字段进行动态结构映射,如果对字段数据结构要求较高的,需要提前定义好类型。动态创建,索引的分片数默认为1(7.x),副本数为1
举例:

静态创建

定义:提前创建好索引,可以指定索引的分片数,副本数,字段数据结构等信息。
场景:业务系统数据需要严格定义好结构,海量时序性索引可以提前创建索引,避免集中写入创建,影响集群性能
备注:静态创建没有动态创建灵活,但是可以做很多限制和参数调整,适用性高。通常会根据常用的时序性索引创建template,辅助创建索引。
举例:

注:索引一旦创建,无论以什么方式创建,都无法更改已经生成的数据结构mapping。

元数据

_index: 代表当前的索引名(唯一标识索引的数据)

_type:代表数据的type类型,7.x后默认_doc

_id: 索引字段的唯一id,可以自定义,但是不能重复

_version:文档的版本号,如果进行更新等操作,会增加版本数

_seqno:严格递增的顺序号。保证后写入的Doc的seqno比之前的大。

_primary_term: 代表主分片上数据重新分配的次数。比如重启节点,重新分配都会触发这个参数累加。

_routing: 路由规则,写入和查询要保证路由是一致。

设计规范

分片数量

索引分片数量不超过节点数量
1个索引40个分片等同于40个1分片索引

副本数量

索引副本数量少于节点数量
副本数量取决于集群节点数,最少一个(保证高可用)

分片容量

数据容量

单个分片数据量 不要超过50GB,推荐在20-40GB中

数据条数

单分片限制最大条数不超过2^32 - 1

你可能感兴趣的:(ElasticSearch 索引创建与规范)