• 使用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.

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


    ————————————————
    版权声明:本文为CSDN博主「编程一生」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/xiexiaojing/article/details/88840424

  • 相关阅读:
    Spring的历史和哲学
    CORS简介
    LDAP概念了解
    Restful levels&HATEOAS
    python/mysql connector
    Session&Cookie 简介及使用
    XML简介
    Json简介
    《魅族官网》
    期末设计部分代码截图
  • 原文地址:https://www.cnblogs.com/it-deepinmind/p/14529170.html
Copyright © 2020-2023  润新知