学习大数据心得:Elasticsearch索引之间无感知切换

学习大数据心得:Elasticsearch索引之间无感知切换,第1张

学习大数据心得:Elasticsearch索引之间无感知切换

在大数据开发过程中,经常会用到Elasticsearch,在Elasticsearch,给index(索引)起一个aliases(别名)是一个很重要的知识点,这个知识点虽然很基础,却能够解决两个索引之间无缝切换,在一些场景下发挥着很大的作用。

例如,当遇到线上索引a出了问题,比如:某个索引某字段分词定义不准确,需要变更字段类型,毕竟刚开始设计没有考虑那么完善,因为业务变更需要调整字段类型,我们需要把索引a切换到另一个索引b,这时候索引的别名的就派上用场了。

索引别名,简单来说就是它指向一个或多个索引。

 

那么如何实现两个索引无缝切换呢?

举个例子:

假如索引a和索引b这两个索引共同拥有别名c,而客户端查询的索引名是c,当索引b数据重建完成后,我们只需要解除旧索引a与别名c关系,然后添加新索引b与别名c的关系,就能完成无缝切换,这过程 *** 作对对用户来说是是无感知的,体验非常好。

如果索引b数据有问题,我们随时都可以重新解除索引b的关系并恢复索引a。

可以这么理解, Elasticsearch中的index(索引) aliases(别名)就像是软连接,它可以映射一个或多个索引,提供了非常灵活的特性。

下面我们来实例 *** 作下:

假设我们有两个索引分别是item_v1和item_v2,现在想通过索引别名来实现这两个索引无缝切换,他们对外的索引别名叫item_index。

首先我们先创建第一个item_v1并给你添加aliases

#创建索引
PUT /item_v1
#给索引添加别名
PUT /item_v1/_alias/item_index

索引创建完成后,我们可以用命令来查询一下它们的关系:

#查某个别名映射的所有index
GET /*/_alias/item_index
#查询某个索引拥有的别名
GET /item_v1/_alias/*

返回结果如下:

{
    "item_v1" : {
        "aliases" : {
            "item_index" : { }
        }
    }
}

现在我们来构建另一个索引 item_v2:

#创建索引item_v2
PUT /item_v2

新索引item_v2构建成功后,我们可以通过命令来实现它和旧索引item_v1直接的切换。

POST /_aliases
{
    "actions": [
        { "remove": { "index": "item_v1", "alias": "item_index" }},
        { "add":    { "index": "item_v2", "alias": "item_index" }}
    ]
}

上面的 *** 作是顺序的执行的,先移除旧索引item_v1的别名,然后给item_v2 添加新的别名,这样就可以让这个两个索引无缝的切换了。

对于用户来说,体验是无感知的。

需要注意的是,使用索引别名后,type类型的值就不需要再在填写,因为它认为你这别名是一个新的索引,所以我们只写index name即可,Elasticsearch服务端知道它的类型。

总结

索引别名是Elasticsearch一个非常基础的知识点但在实际开发是一个非常有用的技术点。掌握它可以帮助我们设计更易于维护的数据索引,关于es别名,合理利用,不仅可以提升工作效率,还方便后期索引维护,确实是一个很重要的知识点。

由于笔者知识及水平有限,文中错漏之处在所难免,如有不足之处,欢迎交流。

-END-

微信公众号:爱开发

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5706678.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存