评论:Elasticsearch 7凭借SQL飙升,搜索优化

Elasticsearch从位于Lucene文本搜索引擎库之上的文档数据库开始。 它很快被相关应用程序所加入,Elasticsearch系列产品的首字母缩写是ELK:Elasticsearch; Logstash,数据流水线工具,主要用于将数据悬停在登录到Elasticsearch数据库中时; 以及数据可视化构建套件Kibana。

编辑选择奖徽标梅花 信息世界

此后,ELK三人组加入了一个小排的“数据托运人”实用程序:Beats产品。 与Logstash相似,Beats产品将数据从外部源移动到Elasticsearch数据库中。 它们在运送数据的来源方面有所不同。 Filebeat旨在读取和转发日志文件的内容(如Logstash,但没有Logstash的转换和聚合功能)。 Metricbeat读取从Windows,Mac或Linux主机收集的系统指标数据。 Metricbeat还可以从Microsoft SQL Server,MySQL,PostgreSQL和其他来源收集企业应用程序指标。

[您应该使用哪个数据库? 让InfoWorld成为您的指南。 最好的分布式关系数据库 最好的NoSQL数据库 最好的图形数据库 | 通过InfoWorld大数据和分析报告时事通讯深入了解分析和大数据。 ]

Beats组中有很多兄弟产品。 您可以在Elastic网站上找到Beats的完整家族。 同样,随着Elastic Stack 7.x的推出而出现的功能和产品更新也是一个冗长的清单,其中可能涉及几篇文章。 尽管对于Elastic Stack 7.x发行版中各个组件的所有更新都有很多话要说,但是本文将主要集中于对堆栈基础的增强和改进:Elasticsearch本身。

Elasticsearch SQL

迟早要这样,对吧? Elasticsearch工程师必须努力将SQL嫁接到Elasticsearch上。 每天讲SQL的数据库技术人员太多了,不容忽视。 SQL查询引擎将为RDBMS用户铺平通往Elasticsearch领域的熟悉路径。 具有讽刺意味的是,该产品SQL查询引擎的特定功能也呼应了通往Elasticsearch友好路径的想法:输入SQL,查询引擎将向您显示将SQL转换为等效的Elasticsearch查询。

需要明确的是,Elasticsearch并非支持所有特定SQL标准(其中有多个)。 通常,您可以搜索,这意味着您可以发出SELECTDESCRIBE命令。 后者DESCRIBE显示特定索引的模式。

很快,这个新现实中的扭曲就开始显现出来:无模式的Elasticsearch数据库中没有模式。 那么, SELECT如何工作? 而且,Elasticsearch SQL在线文档中如何包含当人们谈到Elasticsearch时从未听说过的单词(如“表格”和“列”)?

必要时,Elasticsearch查询在事件范围的两侧跳动,从而将Universe的关系数据库切片与NoSQL数据库切片分开。 因此,当SQL进入Elasticsearch时,索引变成表,而字段变成列。 这种重命名是必要的,这样,熟悉SQLite中.schema命令的任何人都会感到宾至如归。 而且, DESCRIBE命令的输出(一个显示列,SQL类型和相应的Elasticsearch数据类型的ASCII表)的输出将非常熟悉。 它看起来像一个架构。

(当然,字段不能简单地充当列的角色。Elasticsearch允许对象嵌套在文档中—字段中的字段。幸运的是,索引模式的Elasticsearch SQL输出以与Elasticsearch处理情况相同的方式来处理此问题。在幕后:点符号用于“拼合”嵌套字段。)

正如已经暗示的那样,您不能INSERTUPDATEDELETE 。 您也不能执行JOINUNION或嵌套SELECT 。 但是您可以使用Elasticsearch的聚合和统计运算符,并且可以检索查询分数。 因此,尽管乍看之下ElasticsearchSQL可能看起来很贫乏,但它实际上相当健壮,特别是它实现了使RDBMS工程师更轻松地过渡到Elasticsearch的目标。

最后,尽管可以通过Elasticsearch的REST API提交SQL查询,但现在可以使用ODBC和JDBC驱动程序来在Windows和Java应用程序中启用Elasticsearch SQL查询。

Elasticsearch中的副本选择

Elasticsearch 7.x的一些改进就是所谓的“基础结构升级”。 自适应副本选择是在Elasticsearch 6.x中进行的实验; 它在Elasticsearch 7中已经成熟。其目的是为了应对不幸的事实,即在执行搜索时,对副本节点的循环选择可能落在忙于执行垃圾收集或遭受某些操作的节点上。其他性能下降,例如高磁盘I / O或网络饱和。 甚至可能是所选节点仅在功能较弱的硬件上运行(与其同级副本节点相比)。

从用户应用程序接收查询的节点称为“协调器”节点。 协调器将查询分散到所有相关的数据节点,这些节点执行实际的数据库搜索。 自适应副本选择提供了由协调器节点“看到”的数据节点的性能统计信息。 协调器能够使用这些统计信息来选择给定副本集中的最佳节点,从而使绑定到特定副本集的查询部分收到最快响应的可能性最大化。

(附带说明:分片是索引的一部分,是索引元素的子集。索引分为多个分片,以便可以在群集节点之间分布。为了容错,给定的分片可以复制到多个节点上托管给定碎片副本的节点集是一个副本集,其成员称为副本。)

集群协调是另一个重要且持续变化的领域(实际上,自从第一个Elasticsearch 7.x版本发布以来,已经发生了变化)。 “发现”是集群用来标识其所有成员节点以及确定哪个主节点资格节点是集群主节点的过程。 发现必须快速有效。 不完全的节点成员身份会产生创建“裂脑”的风险,即两个群集应该是一个群集。 (它们分开的时间越长,它们的内容增长得越远。)而快速确定集群的主节点至关重要。 主节点不仅是集群当前配置和状态的真实来源,而且主节点是可以更改集群状态的唯一节点。 主节点负责对所有集群成员执行ping操作,以验证集群运行状况。

过去,Elasticsearch使用Zen发现机制,该机制支持多种形式的发现(单播,基于文件等)。 随着时间的流逝,Elasticsearch工程师了解到正确配置Elasticsearch集群的发现参数至关重要。 他们目睹了许多错误的配置,最终导致了不稳定。 结果,Elasticsearch已迁移到单个发现实施中,从而消除了不稳定的风险。 集群管理员不再需要调整配置参数,并希望最新的调整不会使集群性能下降。 (但是,根据给定实例的环境,可以使用“发现插件”来增强发现过程。可以在Elastic网站上找到发现插件的列表 。)

Elasticsearch中的跨集群搜索

在以前的版本中,如果希望搜索跨多个群集,则可以将参与群集中的特定节点选为“部落”节点。 实际上,一个部落节点是一个以上集群的成员(请考虑双重或多重公民身份)。 因此,发送到部落节点的查询(该查询将成为该查询的协调节点)将扩展到该部落节点所属的所有集群。

当部落节点所属的两个集群中的每个集群都有一个具有相同名称的索引时,该方法就会出现一个缺点:部落节点在满足查询请求时只是选择了两者之一。 现在,跨集群搜索使您可以选择特定节点作为“网关”节点,从而可以接收源自集群外部的查询请求-不再需要双重国籍。 另外,当您要查询远程集群的索引时,请在索引之前加上集群名称,该名称类似于<cluster_name>:<index> 。 因此,消除了部落节点在同名索引之间任意选择的需求。

实际上,Elasticsearch网关节点的行为就像协调节点一样。 在另一个旨在将CPU和网络压力最小化(从而减少往返查询时间)的改进中,响应远程查询的Elasticsearch集群首先执行其自己的查询结果缩减阶段,然后将这些结果返回给调用方。

Elasticsearch查询改进

一些新功能扩展了Elasticsearch已经广泛的查询功能。 例如,新的rank_featurerank_features字段类型,再加上新的“ rank feature”查询,提供了相关性调整,如果没有大量的培训集以及通过培训结果进行梳理的人力,这是很难做到的。 这些新的字段类型似乎是普通的浮点值数据字段,但经过了精心设计,可以将它们添加到文档的分数中,使您可以在特定查询中调整文档的相关性。 例如,您可能想要在rank_feature字段中获取文档受欢迎程度的值,并将其纳入与查询相关性的文档分数中。

此外,这些字段可用于称为“ top-k检索优化”的搜索优化中,这也是Elasticsearch 7中的新功能。简而言之,这些优化使Elasticsearch可以获取查询的最相关文档的请求子集(因此,“ top-k”)无需搜索所有适用的搜索结果。 这些优化的解释很密集,但是鼓励有兴趣的读者阅读有关该主题Elastic博客

受益于“ top-k检索优化”的另一种新查询类型是新的“距离特征”查询。 顾名思义,此查询类型使您可以根据时间间隔中与原点的接近程度对结果进行评分。 可以参与距离查询的字段类型为datedate_nanosgeo_point类型。 因此,文档的空间或时间类型字段与原点之间的距离大小可以增加(或减少)该文档的查询分数。

高级REST客户端

在分类账的开发方面,尽管Java High Level REST Client出现在Elasticsearch 6.0 beta版本中,但最终在Elasticsearch 7.0版本中宣布它已完成。 在这种情况下,完整意味着可以使用高级REST客户端而不是传输客户端(该客户端将被替换)。

Java高级REST客户端位于Java低级REST客户端之上,可用于通过HTTP与Elasticsearch集群进行通信。 但是,低级REST客户端将请求编组和响应编组留给用户。 同时,高级REST客户端将请求和响应表示为对象。 这允许高级REST客户端公开特定的API,而不是要求调用者与通用HTTP方法调用进行交互。 而且高级REST客户端处理对象编组和解组,因此开发人员不必这样做。

Kibana改进

最后,值得暂停一下并讨论Kibana,因为它已经从只是一种数据可视化工具发展成为一种Elasticsearch超级仪表板。 Kibana最初是一个平台,用于创建和显示实时数据可视化-线图,条形图,饼图等-从Elasticsearch数据库实时绘制。 尽管仍然是可视化构建器,但Kibana现在提供用于管理,开发,机器学习,数据探索等的控制台。 例如:

  • 在Kibana的索引管理控制台中,您可以显示统计信息,例如字段映射(索引架构),索引摘要指标(文档数,使用的磁盘存储空间等),索引默认参数(碎片数,嵌套字段限制等)。 。), 和更多。
  • 画布工作板区域使您可以为画布创建内容。 作为补充的可视化工具,Canvas可以创建Kibana样式的数据图形,以适合演示的形式排列它们,并将它们导出为文件格式,以导入到演示或幻灯片软件中。
  • 使用地图控制台,您可以处理和显示地理数据(该控制台会打开一个世界地图)。 数据显示为贴面的图层,并绑定到下面的映射结构,因此您可以执行一些操作,例如根据地理空间中数据集中的文档数设置区域(州,国家等)的颜色坐标在该区域中。
  • 开发工具仪表板提供了一个控制台,用于输入和执行针对数据库的查询。 (这曾经是Chrome浏览器广泛使用的Sense插件 。)dev工具控制台还可以提供各种内部数据库组件的性能。

这些只是一个示例。 见证Kibana所有功能的最简单方法是安装自己的Elasticsearch和Kibana组合并进行一些探索。

当ElasticsearchSwift发展时,其发展不仅仅是工程师们不断涌现出许多新功能。 他们还以改善群集性能并简化原本复杂的群集配置过程的方式来升级基础架构。

这并不是说正确地配置企业级Elasticsearch集群突然变得简单易懂。 有很多考虑因素。 但是,确实很容易安装和运行适用于开发的有效Elasticsearch数据库。 而且,Elasticsearch 7中出现的新功能使从最初的安装到分布式的企业级多节点Elasticsearch集群的旅程更加快捷。

翻译自: https://www.infoworld.com/article/3442739/review-elasticsearch-boosts-search-with-sql-optimizations.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值