(一)Elasticsearch是什么?

Elasticsearch是什么?

你知道的,为了搜索和分析

Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Logstash和Beats有助于收集、聚合和丰富数据,并将其存储在Elasticsearch中,Kibana使您能够交互式地探索、可视化和共享对数据的见解,并管理和监控堆栈。Elasticsearch 是索引、搜索和分析魔法发生的地方。

Elasticsearch为所有类型的数据提供近乎实时的搜索和分析。无论您使用的是结构化或非结构化文本、数字数据还是地理空间数据,Elasticsearch都能以一种支持快速搜索的方式有效地存储和索引它们。您不但可以利用简单的数据检索和聚合信息来发现数据中的趋势和模式。随着数据和查询量的增长,Elasticsearch的分布式特性还可以让您的部署能够与之无缝地增长。

虽然不是每个问题都是搜索问题,但Elasticsearch在各种用例中体现了处理数据的速度和灵活性:
- 网站搜索
- 存储和分析日志、指标和安全事件数据
- 使用机器学习来自动模拟实时数据的行为
- 使用Elasticsearch作为存储引擎实现业务工作流的自动化
- 使用Elasticsearch作为地理信息系统(GIS)管理、集成和分析空间信息
- 使用Elasticsearch作为生物信息学研究工具来存储和处理遗传数据
人们使用搜索的新方式让我们不断感到惊讶。但是,无论您的用例是类似于其中一个,还是使用Elasticsearch来处理新问题,在Elasticsearch中处理数据、文档和索引的方式都是相同的。

数据输入:文档和索引

Elasticsearch是一个分布式文档存储。Elasticsearch不是将信息存储为列数据,而是将复杂的数据结构序列化为JSON文档。当集群中有多个Elasticsearch节点时,存储的文档分布在整个集群中,可以从任何节点立即访问。

当一个文档被存储时,它几乎是实时的——在1秒内被索引和完全搜索。Elasticsearch使用一种称为倒排索引的数据结构,它支持非常快速的全文搜索。倒排索引列出任何文档中出现的每个唯一单词,并标识每个单词出现的所有文档。

可以将索引看作是优化的文档集合,而每个文档都是字段的集合,字段是包含数据的键值对。默认情况下,Elasticsearch索引每个字段中的所有数据,每个索引字段都有一个专门的、优化的数据结构。例如,文本字段存储在倒排索引中,数字和地理字段存储在BKD树中。使用每个字段的数据结构来组装和返回搜索结果的能力使Elasticsearch如此之快。

Elasticsearch还具有无模式的能力,这意味着可以在不显式指定如何处理文档中可能出现的每个不同字段的情况下对文档进行索引。当启用动态映射时,Elasticsearch会自动检测并向索引中添加新字段。这种默认行为使得索引和探索数据变得很容易——只要开始索引文档,Elasticsearch就会检测并将布尔值、浮点值和整数值、日期和字符串映射到适当的Elasticsearch数据类型。

然而,最终,你会比Elasticsearch更了解你的数据以及你想如何使用它。您可以定义规则来控制动态映射,并显式定义映射来完全控制字段的存储和索引方式。
定义自己的映射可以:
- 区分全文字符串字段和精确值字符串字段
- 执行特定语言的文本分析
- 为部分匹配优化字段
- 使用自定义日期格式
- 使用无法自动检测到的数据类型,如geo_point和geo_shape
为不同的目的以不同的方式索引相同的字段通常是有用的。例如,您可能希望将字符串字段作为全文搜索的文本字段和用于排序或聚合数据的关键字字段来建立索引。或者,您可以选择使用多个语言分析器来处理包含用户输入的字符串字段的内容。

在索引期间应用于全文字段的分析链也在搜索时使用。当查询全文字段时,查询文本在在索引中查找术语之前要进行相同的分析。

数据输出:搜索和分析

虽然您可以使用Elasticsearch作为文档存储和检索文档及其元数据,但真正的强大之处在于能够轻松访问构建在Apache Lucene搜索引擎库上的完整搜索功能套件。

Elasticsearch提供了一个简单、一致的REST API,用于管理集群、索引和搜索数据。出于测试目的,您可以轻松地直接从命令行或通过Kibana的Developer Console提交请求。在应用程序中,您可以使用Elasticsearch客户端来选择语言:Java、JavaScript、Go、. net、PHP、Perl、Python或Ruby。

搜索您的数据

Elasticsearch REST api支持结构化查询、全文查询和结合这两种查询的复杂查询。结构化查询类似于您可以在SQL中构造的查询类型。例如,您可以搜索员工索引中的性别和年龄字段,并根据hire_date字段对匹配项进行排序。全文查询查找与查询字符串匹配的所有文档,并按照相关性(它们与搜索词的匹配程度)返回它们。

除了搜索单个术语,您还可以执行短语搜索、相似度搜索和前缀搜索,并获得自动补全建议。是否有想要搜索的地理空间或其他数字数据?Elasticsearch在索引非文本数据的时候,在数据结构层做了很多优化,用以支持高性能地理查询和数字查询。

您可以使用Elasticsearch全面的json风格查询语言(query DSL)访问所有这些搜索功能。您还可以构造SQL样式的查询来在Elasticsearch内部本地搜索和聚合数据,JDBC和ODBC驱动程序允许大量第三方应用程序通过SQL与Elasticsearch进行交互。

分析您的数据

Elasticsearch聚合使您能够构建复杂的数据摘要,并深入了解关键指标、模式和趋势。不只是找到众所周知的“大海捞针”,聚合使您能够回答以下问题:
- 干草堆里有几根针?
- 针的平均长度是多少?
- 针的中位数长度是多少?
- 在过去的六个月里,每个月有多少针被加到干草堆里?
您还可以使用聚合来回答更微妙的问题,例如:
- 你们最受欢迎的针厂是哪些?
- 有任何不寻常的或异常的针簇吗?

因为聚合使用与搜索相同的数据结构,所以它们也非常快。这使您能够实时分析和可视化数据。您的报告和仪表板会随着数据的变化而更新,因此您可以根据最新的信息采取行动。

更重要的是,聚合与搜索请求一起操作。您可以在单个请求中对相同的数据同时搜索文档、过滤结果和执行分析。而且由于聚合是在特定搜索的上下文中计算的,因此您不仅要显示所有尺寸为70的针的数量,还要显示符合用户搜索条件的70号针的数量——例如,所有尺寸为70号的不粘绣花针。

等等,更多

想要自动分析您的时间序列数据?您可以使用机器学习功能来创建数据中正常行为的准确基线,并识别异常模式。有了机器学习,你可以检测:
- 与数值、计数或频率的时间偏差有关的异常
- 统计稀有度
- 群体中某一成员的反常行为
最棒的部分是什么?不需要指定算法、模型或其他与数据科学相关的配置就可以做到这一点。

扩展性和高可用:集群、节点和分片

Elasticsearch的构建是为了随时可用,并根据您的需求进行伸缩。它通过自然分布来做到这一点。您可以向集群中添加服务器(节点)以增加容量,Elasticsearch会自动将数据和查询负载分布到所有可用的节点上。不需要彻底修改应用程序,Elasticsearch知道如何平衡多节点集群以提供可伸缩性和高可用性。结点越多越好。

这是怎么做到的呢?在表面之下,Elasticsearch索引实际上只是一个或多个物理分片的逻辑分组,其中每个分片实际上是一个自包含的索引。通过将索引中的文档分布到多个分片,并将这些分片分布到多个节点,Elasticsearch可以确保冗余,这既可以防止硬件故障,也可以在节点添加到集群时增加查询容量。随着集群的增长(或收缩),Elasticsearch会自动迁移分片数据来重新平衡集群。

分片有两种类型:主片和副本。索引中的每个文档都属于一个主分片。复制分片是主分片的副本。副本提供数据的冗余副本,以防止硬件故障,并增加读取请求(如搜索或检索文档)的容量。

索引中的主分片数量在创建索引时是固定的,但复制分片的数量可以在任何时候更改,而不会中断索引或查询操作。

这取决于…

对于为索引配置的分片大小和主分片数量,有许多性能考虑和权衡。分片越多,维护这些索引的开销就越大。分片大小越大,当Elasticsearch需要重新平衡集群时,移动分片所需的时间就越长.

查询大量的小分片可以提高每个分片的处理速度,但是查询越多就意味着开销越大,因此查询数量更少的较大分片可能会更快。简而言之,这要视情况而定。

作为起点:
- 目标是将平均碎片大小保持在几GB到几十GB之间。对于基于时间的数据的用例,通常会看到20GB到40GB的分片。
- 避免无数的碎片问题。一个节点可以持有的碎片数量与可用堆空间成比例。作为一般规则,每GB堆空间的分片数量应该小于20。

确定用例的最佳配置的最佳方法是使用您自己的数据和查询进行测试

发生灾难时

出于性能原因,集群中的节点需要位于同一网络上。在集群中跨不同数据中心的节点平衡分片花费的时间太长了。但是高可用性架构要求您避免将所有鸡蛋放在一个篮子里。在一个位置发生重大中断的情况下,另一个位置的服务器需要能够接管。无缝。答案吗?Cross-cluster复制(CCR)。

CCR[跨集群复制]提供了一种将索引从主集群自动同步到可作为热备份的辅助远程集群的方法。当主集群故障时,备集群可以接管。您还可以使用CCR创建辅助集群,以在地理上接近您的用户的地方提供读请求。

跨集群复制是主备复制。主集群上的索引是活动的leader索引,处理所有写请求。复制到次要集群的索引是只读跟踪对象。

管理与维护

对于任何企业系统,您都需要工具来保护、管理和监视您的Elasticsearch集群。将安全性、监视和管理特性集成到Elasticsearch中,使您能够将Kibana用作管理集群的控制中心。数据汇总和索引生命周期管理等功能可以帮助您随着时间的推移智能地管理数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆天至尊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值