乐趣区

关于java:elastic-stack-那些事8

数据建模

  1. 对事实世界进行形象形容的工具和办法
  2. 通过形象的实体以及实体之间的分割的模式去形容业务规定,从而实现对事实世界的映射。
  3. 概念模型

    1. 确定零碎的外围需要和范畴边界,设计实体和实体之间的关系
  4. 逻辑模型

    1. 进一步梳理业务需要,确定每个实体的属性 关系 束缚规定
  5. 物理模型

    1. 联合具体的数据库产品,在满足业务读写性能等需要的前提下确定最终的定义
    2. mysql mongodb elasticsearch
    3. 第三范式

es 中的数据建模

es 是基于 lucene 以倒排索引为根底实现的存储系统,不遵循关系型数据库的范式约定

mapping 相干字段

  1. enable true|false 仅存储,不做搜寻和聚合剖析
  2. index true|false 是否构建倒排索引
  3. index_options docs|freqs|positions|offsets 存储倒排索引哪些信息
  4. norms true|false 是否存储归一化参数,如果字段仅仅用于过滤和聚合剖析 可敞开
  5. doc_values true|false 是否启用 doc_values 用于排序和聚合剖析
  6. field_data false|true 是否为 text 类型启用 fielddata 实现排序和聚合剖析
  7. store false|true 是否存储该字段
  8. coerce true|false 是否开启主动数据类型转换性能,例如字符串转为数字,浮点转为整型
  9. multifields 多字段 灵便应用多字段来解决业务多样性需要
  10. dynamic true|false|strict 管制 mapping 自动更新
  11. date_detection true|false 是否自动识别日期类型

何种类型

  1. 字符串类型 须要分词设定为 text 否设置为 keyword
  2. 枚举类型 基于性能思考将其设定为 keyword 类型,即使该数据为整型
  3. 数值类型 尽量抉择贴近的类型,例如 byte 即可示意所有数值时,选用 byte 而不是 long
  4. 其余类型 比方 布尔类型 日期 地理位置等

是否须要检索

  1. 齐全不须要检索 排序 聚合剖析 enabled 设置为 false
  2. 不须要检索的字段 index 设置为 false
  3. 须要检索的字段 能够通过如下设置设定须要存储的粒度

    1. index_options 联合须要设定
    2. norms 不须要归一化数据时敞开即可

reindex

指重建所有数据的过程 个别产生在如下状况

  1. mapping 设置变更 例如字段类型变动 分词器字典更新等
  2. index 设置变更 例如 分片数更改等
  3. 迁徙数据

es 提供了线程 api 实现该工作

  1. _update_by_query 在现有索引上重建
  2. reindex 在其余索引上重建

reindex task

数据重建的工夫受源索引文档规模影响 规模越大 所需工夫越多 此时须要设定 url 参数 wait_for_completion 为 false 进行异步执行,es 以 task 来形容工作
es 提供了 taskapi 来查看工作执行的进度和相干数据

对 mapping 进行版本治理

  1. 蕴含在代码或者专门以文件进行治理,增加正文 退出 git 等版本治理仓库中 不便回顾
  2. 为每个减少的 metadata 字段 在其中保护一些文档相干的元数据 不便对数据进行治理

避免字段过多

  1. 字段过多,难于保护
  2. mapping 信息存储在 cluster state 中 过多字段导致 mapping 过大,最终导致变慢
  3. 听过设置 index.mapping_total_fields.limit 能够限定索引中最大字段数 默认 1000
  4. 能够通过 key value 的形式解决字段过多的问题 然而并不完满

keyvalue 形式

尽管通过此种形式极大低缩小 field 数目 但也有害处

  1. query 语句的复杂度飙升 且有一些无奈实现的性能,例如聚合剖析
  2. 不利于 kibana 剖析
  3. 个别字段过多的起因时因为没有高质量的数据建模导致的 例如 dynamic 设置为 true
  4. 思考拆分多个索引解决问题
退出移动版