设为首页 加入收藏

TOP

使用Elasticsearch的动态索引和索引优化
2019-09-17 18:54:18 】 浏览:36
Tags:使用 Elasticsearch 动态 索引 优化

关于映射

实际工作中使用过ES的朋友可能会有和静儿一样的感受。ES存储更新从编码上是很方便。如下,Kubernetes的yaml文件完全可以通过json直接序列化一下,一行代码存入ES。

 

剩下的工作可以交给ES进行动态生成映射。索引映射的生成方式有两种:

动态映射

字段和映射类型不需要在使用前定义,新字段名可以自动被添加到索引。只需要更新索引,新字段可以被添加到顶层映射、内部对象或者嵌套字段。

显示的映射

动态的映射,字段类型定义靠的ES自己来猜。开发人员自己比ES更了解自己的索引字段。所以有时会需要明确的指定索引类型。指定索引可以在创建索引时指定,也可以使用PUT API来在已经存在的索引里添加。

使用模板创建索引

索引可使用预定义的模板进行创建,这个模板称作Index templates。模板设置包括settings和mappings,通过模式匹配的方式可以使得多个索引重用一个模板。

别名

说起来容易做起来难。调试中,需要反复的权衡和实践。发现索引的类型定义不合理,需要在ES平台上进行索引的字段类型修改。如果使用的是模板方式,修改模板后需要将索引删除后重建生效。如果只是想重命名一个字段而不修改映射,可以使用别名(alias)字段。

 

提高索引性能的一些建议

提高写入效率

1>使用批量请求并调整其大小

使用bulk api可以多线程并发创建,并将操作合并批量进行请求。批量的大小取决于数据、集群配置等。

2>根据日志对故障容忍,合理设置事务日志是同步还是异步

因为Translog顺序写日志比构建索引更高效。为了保证数据的完整性,ES默认每次请求结束都会进行一次sync同步操作。但是如果是海量的日志,可以容忍发生故障时丢失一定的数据,可以设成异步来提高写效率。设置参数是:index.translog.durability=async。

提高读取效率

1>根据实时性需求调整索引刷新频率

如果搜索结果不需要实时性很高,可以按需设置i索引刷新频率。设置参数是index.refresh_interval。在大批导入时间还可以通过设置此值为-1关掉刷新。

2>对索引进行合理分片

ES的分片分为两种,主分片(Primary Shard)和副本(Replicas)。分片越少写入速度越快。如果过度分配,会增大合并分片查询结果的复杂度,从而耗时增加。

3>如果不需要使用KEY之间的关系,使用展开提高效率

ES提供了为字段提供嵌套类型。嵌套类型因为包括着嵌套内字段的关系,效率低于将这些字段展平的效率。所以如果不需要使用KEY之间的关系,可以使用展开提高效率。

 

总结

<程序员修炼之道>不要做形式方法的奴隶

Don't Be a Slave to Formal Methods.

静儿解读:如果某项技术在开发时间和能力中作用不大,不要盲目的采用它,不要为了用而用。

 

相关阅读

《程序员修炼之道》解读

Elasticsearch的基本概念和指标

郁金香搜索引擎的方案(2017版)

实现一个自己的搜索引擎的初始规划(2017版)

程序常用的设计技巧

到底多大才算高并发?

美团分布式服务通信框架及服务治理系统OCTO

学会用数据说话-分布式锁究竟可以多少并发?

大话高可用

 

关于作者

作者是一个有美国硅谷、日本东京工作经验,十二年坚持一线写代码的程序媛。坚持原创文章。欢迎技术交流!

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇[MySQL] 联合索引与using index c.. 下一篇【ODI】| 数据ETL:从零开始使用O..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目