内容简介:别名在Elasticsearch中有两种分类。
0、题记
本文是系列文章第一篇。介绍Elasticsearch的一些非常基础但实战开发确非常有用的技术点。了解这些技术点会帮助你设计更易于维护的数据索引,预先知道 PB级 大数据索引实战中的坑,提升工作效率。
本文从别名分类、索引别名实践、索引别名的好处、索引别名常见问题及坑解读、字段别名实践一把 五个方面
进行详细解读。
1、别名分类
别名在Elasticsearch中有两种分类。
1.1 索引别名
官方释义
: 索引别名可以指向一个或多个索引,并且可以在任何需要索引名称的API中使用。 别名为我们提供了极大的灵活性。它们允许我们执行以下操作:
1)在正在运行的集群上的一个索引和另一个索引之间透明切换;
2)对多个索引进行分组组合(例如,last three months的索引别名:是过去3个月索引 logstash 201903, logstash 201904, logstash_201905的组合);
3)在索引中的文档子集上创建“视图”(结合业务场景,会提升检索效率)。
通俗解释
: 索引别名类似:windows的快捷方式,linux的软链接,mysql的视图。
-
前提 :Elasitcsearch创建索引后,索引名不允许改。很多业务场景下单一索引可能无法满足要求。
-
场景1 :PB级别增量数据,借助rollover api实现,由基于日期的n个索引组成,显然,对外提供服务使用别名会很便捷。
-
场景2 :试想,线上提供服务的某个索引出了问题,比如:某字段分词定义不准确,如何保证对外提供服务不停止(不更改业务代码)的前提下更换索引,显然,别名更合适。
注意
:实际业务场景使用别名会很方便、灵活、快捷、业务松耦合!!
1.2 字段别名
在Elasticsearch Mapping定义的6.4+版本才有的字段类型。
通俗解释
:
试想一下有一种业务场景。比如在实际的业务开发中:需要对Facebook、twitter行采集,采集入库的是两个业务团队。
他们对content,分别使用了两个字段。其中一个是,content。另外一个是cont。 这时候存储到elasticsearch会有两个字段。
这样如果我们在检索、写业务代码的时候,是不是要写两个不同的字段来处理呢? 如果有可能写成一个字段,代码方面就很避开业务耦合,就很方便了。
我认为这是字段别名的由来。
2、索引别名实践
2.1 假设没有别名,如何处理多索引检索?
-
方式一:多索引逗号分隔检索。
-
方式二:通配符索引检索。
2.2 有了别名后,操作变得简单
实战中,我们不需要知道操作的实际索引名称,我们可以透明地更改别名引用的索引而不会影响使用别名的用户。
-
步骤1:别名关联已有索引。
-
步骤2:使用别名检索
3、索引别名的好处
3.1 大数据量的管理
场景: 实战中,可能需要基于时间的数据保留策略(利用rollover机制实现),并从系统中删除旧数据。 使用索引别名:
-
好处1 :来简化从Elasticsearch中删除数据的过程。
-
好处2 :在没有任何停机时间的情况下从Elasticsearch中删除最旧的数据,不会出现任何查询中断,也不会进行任何客户端更改。
基于时间索引的实现机制如下:
推荐阅读:
-
https://gitbook.cn/books/5c52c6923417565017a61ce0/index.html
试想一下 :如果不是基于时间的索引,而使用大索引,删除历史数据会发生什么?
答案:
-
1、删除索引数据只能使用:delete by query,相比删除索引,delete by query删除数据只是逻辑删除;
-
2、真正的删除实际是段合并后的物理删除分段,也就是delete by query后,有一段时间磁盘空间不降反升。此时的检索效率会非常低。
3.2 用户无感知的重建索引
实战中,索引的设计可能不是一步到位。 随着业务的扩展,可能会在开发的中后期,调整索引Mapping结构, 比如:
-
1)ik smart改成ik max_word分词以高效分词,
-
2)long类型改成keyword以提升检索效率,
-
3)修改索引分片数以便于机器横向扩展,
-
4)索引分成更小粒度的索引等以提升性能。
通常的做法,都需要借助:reindex操作完成索引的迁移。 如果要确保线上环境的可靠运行且用户无感知(即无需告知用户,不影响用户的业务),使用别名指向更改前和更改后的索引是 绝佳方案
。
实战举例:
试想一下,如果没有索引别名呢?
答案:
-
1、无法保证查询的连续性;
-
2、无法保证线上业务查询的可靠性(需要告知用户,业务中断一段时间)。
4、索引别名常见问题及坑解读
问题1:ES批量插入可以使用别名插入吗?
会报错:
no write index is defined for alias[xxx]....
注意 :索引别名不是在任何地方都通用。写入或更新数据的时候需要指明物理索引,不要向别名写入数据。
问题2:ES怎么获取所有别名信息 alias?
或者问题:如何通过索引别名查找实际索引名称?
返回信息:
`
问题3:使用别名和基于索引效率一样吗?
是一致的。
前提 :索引和别名指向相同的数据,相同的检索条件。
原理 :索引别名只是物理索引的软链接名称而已。
问题4:如何使用别名提升检索效率?
-
方式一:基于时间创建索引,指定多索引别名。 比如分为:近1年索引别名,近3个月索引别名,近1个月索引别名,近1周索引别名,近3天索引别名。 检索的时候,先
敲定时间范围
,然后在指定范围的别名下检索。核心原理: 物理上基于时间做了分隔,再加上冷热数据分离机制,会极大缩小了检索样本。
-
方式二:使用filter 别名或者 路由别名机制,提升效率。 filter Alias上代码,实际业务中极易被忽视,但会极大提升效率。
路由机制参考官方文档即可。
5、字段别名实践一把
星友的问题:
“Aliasdatatype,这个数据类型,在现实工作中的使用场景是什么?看官方文档,没有很好理解?”
字段别名原理第一部分已详细解释,不再赘述。 这里实践一把,加深理解。
注意: 当用户使用检索时,实际可以使用route length mile字段替代distance做检索,以达到distance一样的效果。
6、小结
-
实战中,一般在开发
中后期
才发现索引别名的妙处。正如文中分析:1、高效索引管理;2、用户无感知维护数据修改更新。 -
建议:相同索引别名的物理索引有
一致的Mapping和数据结构
,以提升检索效率。 -
注意:发挥索引别名在检索方面的优势,在写入和更新还得使用
物理索引
。
你的实际Elasticsearch业务场景,有哪些非常基础但实战开发非常有用的技术点呢? 欢迎留言留下你的思考 ,让我们一起精进!
参考:
https://cambium.consulting/articles/2018/2/22/our-favorite-elasticsearch-features-part-2-index-aliases
推荐阅读:
干货 | Elasticsearch 7.1免费安全功能全景认知
加入星球,更短时间更快习得更多干货!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Git命令别名设置
- mybatis的typeAliases别名
- Elasticsearch索引的基本操作(5)-别名设置
- Elasticsearch 技术分析(三): 索引别名Aliases问题
- c++ 这是否真的破坏了严格的别名规则?
- javascript – 摆脱SVG循环元素上的别名
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
CLR via C#
Jeffrey Richter / 周靖 / 清华大学出版社 / 2015-1-1 / CNY 109.00
《CLR via C#(第4版)》针对CLR和.NET Framework 4.5进行深入、全面的探讨,并结合实例介绍了如何利用它们进行设计、开发和调试。全书5部分共29章。第Ⅰ部分介绍CLR基础,第Ⅱ部分解释如何设计类型,第Ⅲ部分介绍基本类型,第Ⅳ部分以核心机制为主题,第Ⅴ部分重点介绍线程处理。 通过本书的阅读,读者可以掌握CLR和.NET Framework的精髓,轻松、高效地创建高性能......一起来看看 《CLR via C#》 这本书的介绍吧!