少啰嗦,直接看东西。 1、Elasticsearch 索引的设计1.1 单一索引还是基于时间的索引?单一索引的问题: 1)不能更新Mapping。 基于时间的索引面临的问题: 1)如何确定间隔?
2)如何实施?
1.2 定义索引注意事项举例: { 注意1:不要在一个索引中定义多个type。6.X版本已经不支持,7.X版本彻底不支持。 扩展问题:5.X版本的父子文档实际实现中是一个索引中定义了多个type,到了6.X中实现方式改变为:join方式。 注意2:将Set _source设置为false。假设你只关心度量结果,不是原始文件内容。 将节省磁盘空间并减少IO。 这个点,需要结合实际的业务场景具体问题具体分析。 举例:
注意3:将_all设置为false。假设你确切地知道你对哪个field做查询操作? 能实现性能提升,缩减存储。 举例:
注意4:设置dynamic = strict。假设你的数据是结构化数据。 字段设置严格,避免脏数据注入。 举例:
注意5:使用keyword类型假设你只关心完全匹配 提高性能和缩小磁盘存储空间 举例:
注意6:使用别名如何在不停机的前提从一个索引切换到另一个索引? 举例:
或者你通过head插件创建。 2、Elasticsearch分片分配原则社区和QQ群中经常被问到的问题: 1)应该分几个索引、几个分片? 2)每个分片大小如何设置? 3)副本多少如何设置? 这里,明确给出实操可行的6个步骤。 步骤1:定义索引思考索引中要大致有哪些字段? 最好能列一个Excel表统计一下,包含但不限于: 序号、名称、类型、作用、备注。 以上对计算单条数据大小也有用。 步骤2:评估数据量评估方法举例: 1分钟有100条数据,1天=1006024=144000条。 1月=144000条30天=432W条数据。 1年=432W12=5184W条数据。 假设要保存2年,共=10368W条数据。 假设每条数据20KB,共需要存储:10368W*20/1024/1024/1024=1.977TB。 步骤3:评估索引大小和磁盘空间步骤4:计算分片数细节考虑点: 1、每个分片大小应小于30GB。 步骤5:评估索引数和类型(此处可能会有多次反馈迭代) 3、数据去重的思考?方法1:指定唯一id缺点: 1、唯一值无法压缩,不利于存储。 方法2:用聚合方法实现步骤1:所有文档加一个Hash值; GET *_index/_search { 步骤3:批量删除步骤2中的重复id。 以上步骤,不影响写入,可以实现异步。 缺点: 1. 存储量大(尤其超过3亿条 ); 方法3:用distinct query实现深入方法待进一步探讨。 4、小结以上内容是Elasticsearch南京分享会20180630上的分享核心笔记。 具体PPT地址:https:///slides/115 很受用的分析步骤和实战经验,实战中都可以用得上。
|
|