learn and grow up

总结es的一些规范

字数统计: 715阅读时长: 2 min
2021/02/06 Share

写在前面

​ 在日常工作中总结了一些关于es的规范,特别写下来、记下来

正文

  1. 预估index的整体磁盘容量,一般大概为:源数据*3.4。1、主要包含:
    1. 副本数量:至少1个副本
    2. 索引开销:通常比源数据大10%(_all参数等未计算)。
    3. 操作系统预留:默认操作系统会保留5%的文件系统供您处理关键流程、系统恢复以及磁盘碎片等
    4. Elasticsearch内部开销:段合并、日志等内部操作,预留20%。
    5. 安全阈值:通常至少预留15%的安全阈值。
    6. 换算下来:i. 磁盘总大小 = 源数据 (1 + 副本数量) 索引开销 /(1 - Linux预留空间)/(1 - Elasticsearch开销)/(1 - 安全阈值)= 源数据 (1 + 副本数量) 1.7= 源数据 * 3.4
    7. 比如一条doc按照50byte算,那么如果每天200万条数据,那么每天换算下来就会约占100M
  2. 为单个索引选择正确的分片数量,根据预估裁判容量+节点数量来判断
    1. 数据量少,在未来可接受一段时间少于30-50G,就设置一个分片
    2. 数据量较大,那么以每个分片30G大小为最佳,不能超过50G,数量以节点个数整数倍递增,最好不超过3倍
    3. 数据量更大的时候,就需要按照规则拆分索引,如服务日志,时间来拆分
  3. 索引副本数默认为1就好,如果需要提升查询性能,配合场景测试,则可以适当增加副本数
  4. TTL由应用程序使用定时任务清除
  5. 大部分文本字段不需要分词搜索,请使用keyword存储
  6. 时间使用long类型,支持范围查询,建议到精确到分钟,会提高查询效率
  7. 如果不用es自动生成_id,而是指定了doc的_id,那么需要考虑到防止数据倾斜
  8. es的聚合因为是先分片聚合再汇总聚合,所以在多个分片aggs的时候会有误差,解决方案如下
    1. 配合第六点:把需要聚合的单位生成有规律的_id或者routing到指定分片
    2. 通过调试,调高到agg合适s的shard_size(默认size*1.5+10)
  9. 遵循一致的规范,如下:
    1. 所有命名仅可为小写字母,不能下划线开头;不能包括 , /, *, ?, “, <, >, |, 空格, 逗号, #;长度不能超过 255 个字符
    2. Index命名格式:[module|system]_index..
    3. type命名格式:[module|system]_type..
    4. 相同含义的字段使用相同的命名
    5. 为了查询效率,可以冗余字段到一个index
    6. 能不用_all就不用,_source使用默认开启,可支持高亮检索,字段store配合_source=false时使用,用来开启单个字段支持高亮检索
CATALOG
  1. 1. 写在前面
  2. 2. 正文