索引概念

index索引是个虚拟空间,类型数据库中的table
一个索引由至少1个分片组成
一个索引由可以由住分片与副本分片组成;
image.png

索引别名用途

索引重建之后快速切换,应用无感知;
image.png

索引命名

命名重要性

维护管理便利

命名规范建议

业务类型:索引名+数字版本
日志类型:索引名+日期时间

应用意义

数据隔离
查询便利
模糊匹配
精确指定索引
image.png

创建索引

动态创建:

  • 概念定义:

索引无需提前创建,第一条数据插入即可创建完成;

  • 应用场景:

非严格数据模型限制规范的场景,日志,监控

  • 索引膜拜:

通常采用索引膜拜固定下来

  • 可限制自动机制:

限制索引名称,限制索引自动创建
image.png

静态创建:

  • 概念定义:

依据客观背景提前创建好索引,提前做好索引数据分布与相应设置;

  • 应用场景:

业务系统数据需要严格规范;
索引分布在极端情况下需要消化集群资源,避免集中创建索引史,集群相应慢;

滚动创建/自动创建

  • rollover特性:

1.利用别名alias
2.利用rollover特性
3.自动化滚动创建,达到一定阀值创建

  • 应用场景:

1.日志领域,需要自动化依据触发条件滚动创建
2.大数据领域,单索引能力局限需要创建很多
3.索引和别名是多对多关系
image.png

  1. #第一种创建别名
  2. PUT /test-004/_alias/test-alias02
  3. #第二种创建别名
  4. PUT /test-003
  5. {
  6. "aliases": {
  7. "test-alias": {}
  8. }
  9. }
  10. ##查询别名数据:
  11. GET test-alias
  12. ##查询所有别名
  13. GET /_cat/aliases

滚动索引创建命名规范

  • 滚动索引创建命名规范
  1. 索引命名规范,必须符合自动增长模式
  2. 建议后缀是标准数字
  3. 索引名称中不要有特殊符号

image.png

  • 手动创建滚动索引,别名自动关联到最新索引上 ```shell

    手动模式

    PUT /test-rollover-index-000001 { “aliases”: { “test-rollover-index”: {} } }

    查询索引情况

    GET test-rollover-index

手动触发滚动创建索引

POST test-rollover-index/_rollover

  1. - 滚动索引创建触发条件
  2. 1. 索引最大文档数
  3. 1. 索引创建时间
  4. 1. 索引最大大小
  5. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/322762/1656930778621-30836728-803c-43c6-ba62-81ce3da51392.png#clientId=u0f08a3dc-21a0-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=464&id=ud33d1822&margin=%5Bobject%20Object%5D&name=image.png&originHeight=928&originWidth=1264&originalType=binary&ratio=1&rotation=0&showTitle=false&size=907440&status=done&style=none&taskId=uf6aa9759-2b68-4d05-a69c-4fc54257010&title=&width=632)
  6. ```shell
  7. ## 手动触发滚动创建索引--设置文档数插入2条后,创建新的索引
  8. POST test-rollover-index/_rollover
  9. {
  10. "conditions": {
  11. "max_docs": 2
  12. }
  13. }

索引设置-静态设置

索引分片

默认1,创建索引时需要指定,之后索引活动期不可变,后期只能重建

索引字段类型

字段类型不可变,一旦指定几乎不可变,若要修改,则需要刷新所有历史数据,等同与索引重建
设置索引分片及副本分片和字段类型;
image.png
image.png

索引设置-动态设置

索引副本

索引副本数可以动态修改,默认1

其他索引设置

索引有很多高级设置,可以动态修改

image.png

索引文档数据模型

image.png

平铺型:

  • 概念介绍

Json结构平铺

  • 优点:

简单,效率

  • 缺点:

简单

  • 应用场景:

与数据表1-1对应,常规查询搜索
image.png

对象型:

  • 概念介绍:

Json对象嵌套

  • 优点:

表达能力

  • 缺点:

复杂,效率,维护

  • 应用场景:

复杂业务场景,复杂对象映射表达
image.png

数组类型:

  • 概念介绍:

Json数组对象

  • 优点:

表达能力

  • 缺点:

效率,维护

  • 应用场景

常规数据记录
image.png

关联类型:

  • 关联类型

父子关系:join字段类型
键值对关系:nested字段类型

  • 优点:

表达能力

  • 缺点:

效率,复杂,维护

  • 应用场景:

问答场景,上下文关系,键值对关系
image.png

索引设计经验建议:

索引与分片与副本关系:

  • 分片数量:

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

  • 副本数量:

索引副本数量少于节点数量
副本数量可多可少

分片容量:

数据容量:
分片数据容量上限不超过50GB,建议30GB-30GB
数据条数:
单分片不超过2的32次方-1(21亿条)

数据模型设计原则

  • 简单模型原则

能用平铺模型搞定,尽量平铺
对象深度建议不要超过2级

  • 最细粒度原则

对像嵌套遵循最细粒度原则,上曾数据冗余处理

  • 多索引原则

单一索引尽量满足单一业务场景
不同业务场景索引即使数据模型相似也要分开

  • 大宽表索引原则

特殊场景合并多个表时,尽量全部合并在一起
ES不支持join,大宽表可解决查询问题

某物流派单项目:

  • 模型介绍:

多个DB表
一个索引
大宽表结构

  • 背景场景:

查询场景,对象型

  • 优点缺点:

通用查询能力,查询效率
image.png