欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

使用Elasticsearch的动态索引和索引优化

程序员文章站 2022-04-28 22:09:22
关于映射 实际工作中使用过ES的朋友可能会有和静儿一样的感受。ES存储更新从编码上是很方便。如下,Kubernetes的yaml文件完全可以通过json直接序列化一下,一行代码存入ES。 剩下的工作可以交给ES进行动态生成映射。索引映射的生成方式有两种: 动态映射 字段和映射类型不需要在使用前定义, ......

关于映射

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

使用Elasticsearch的动态索引和索引优化

 

剩下的工作可以交给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

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

大话高可用

 

关于作者

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

使用Elasticsearch的动态索引和索引优化