ES设计及规范
一、版本
推荐6.7或者7.4版本
二、配置
节点:5节点(5个主分片、5个备分片)
大小:每个节点500G(原因:目前存量不超过30G,一年超过50G,该资源可支撑3年以上)
三、索引、映射设计规范
1、文档自动映射关掉:即"dynamic":"false"
true(默认):动态映射,会给陌生字段自定义mapping(即会插入新的字段,且能根据新的字段索引);
false:静态映射,陌生字段能插入,但是不会给陌生字段自定义mapping(即能插入新字段,不能根据新字段索引);
strict:严格模式,不允许陌生字段插入
2、ES索引自动刷新默认是1s,实时刷新比1s刷新性能下降10倍左右
3、ES在使用时尽量使用的别名
当使用别名时候可以支持字段名或者字段类型的修改,具体方案如下:
原索引:old_index
给原索引创建一个别名:
POST _aliases
{
"actions": [ { "add": { "index": "old_index", "alias": "old_index_alias" } } ]
}
创建新的索引:new_index
通过_reindex将old_index的数据同步到new_index上面
再将别名映射到新的索引
4、_id在插入数据时候使用业务主键(比如:动态ID+评论ID+评论类型)
5、数据迁移尽量使用dataworks,比自己写代码快的多
6、ID(比如动态ID)一般建议为keyword类型(查询比long类型快很多,但是不支持比较大小和范围查询),如果想要做范围查询或者比较大小,可再额外增加一个字段,字段类型定义为Long类型的
7、开放索引的只读设置:
PUT _settings { "index": { "blocks": { "read_only_allow_delete": "false" } } }
8、批量写ES可以抗住1w+QPS没问题'
9、字段类型设计原则:
1)字段建议使用keyword类型,查询快,支持排序
2)content字段要用text字段,支持分词,不支持排序
3)时间使用long类型,支持范围查询,建议到精确到分钟,会提高查询效率