背景
Elasticsearch是当今最强大的搜索引擎之一。它能够快速准确地索引和搜索大量数据,使其成为任何希望提高搜索能力的公司不可或缺的工具。
概述
在当今世界,数据正以前所未有的速度扩展,因此需要有效地组织、搜索和分析数据。Elasticsearch是一种广泛使用的解决方案,用于管理大量数据。它是一个开源的分布式搜索和分析引擎,允许快速有效地大规模存储和检索数据。
那么,让我们来了解一下 Elasticsearch 设计的细节!我们将首先讨论 Elasticsearch 的基础知识,包括它的节点、集群和索引。我们还将讨论 Elasticsearch 如何管理数据分散和扩展以满足现代应用程序的需求。
了解Elasticsearch
为了更好地理解 Elasticsearch 的架构,了解它是什么以及它的用途非常重要。Elasticsearch是一个分布式搜索和分析引擎,可以处理大量数据。它是用Java编写的,基于Apache Lucene搜索库。
Elasticsearch 的主要目标是使快速有效地搜索和分析大量数据变得简单。它可用于跨多个节点或设备存储和搜索数据,并使其具有很强的可扩展性。这使得它非常适合用于需要实时数据组织、搜索和分析以跟上数据快速增长的现代应用程序。
Elasticsearch 的核心组件
在探索 Elasticsearch 的架构之前,了解它的基本部分是很重要的。节点、集群和索引是 Elasticsearch 的三个主要部分。
Nodes
Elasticsearch建立在分布式设计之上,这意味着数据保存在多个节点上。 在 Elasticsearch 中,“节点”是什么意思?数据保存在类似于存储容器的“节点”中。 将其视为一个计算机程序,可以保存数据难题的一个组件。最好的功能是您可以根据需要运行任意数量的节点来存储尽可能多的 TB 数据。 虽然我们只有一部分数据存储在每个节点上,但您可以将大量数据分散到众多虚拟或实际设备上。尽管每台机器只有几百GB的磁盘空间,但这非常有用,因为它允许我们存储数TB的数据。
重要的是要记住,节点实际上是Elasticsearch的一个实例,而不是一个物理机器。因此,在开发系统上启动五个节点时,无需处理虚拟机或容器。但是,最好在生产环境中保持不同,以便每个节点在单独的服务器、虚拟机或容器上运行。
Clusters
- 集群是存储所有数据的相关节点的集合。虽然可以有很多集群,但一个集群通常就足够了。
- 默认情况下,集群彼此完全独立。虽然可以执行跨集群搜索,但这种情况并不常见。更典型的做法是运行多个用于不同目的的群集。
- 例如,您可以有一个集群来支持电子商务应用程序的搜索,另一个集群用于应用程序性能管理 (APM)。通常,我们将事物拆分为多个集群,以逻辑上分离它们并能够以不同的方式配置它们。
- 但是,一个集群通常就足够了,因此我们将使用单个集群。但是等一下,您可能会想,我们如何创建一个集群?
- 当我们启动一个节点时,会自动形成一个集群。节点将加入现有群集(如果配置为这样做),或者它将创建自己的群集,仅包含该节点。Elasticsearch 节点将始终是集群的一部分,即使没有其他节点也是如此。
- 在可用性和可伸缩性方面,只有一个节点存在一些问题,但出于开发目的,拥有一个由单个节点组成的集群是完全可以的。我们很快就会回答这些问题,但现在,让我们专注于理解基础知识。
- 现在您已经知道了什么是集群和节点,让我们仔细看看数据的组织和存储方式。
- 存储在群集中的每个数据单元称为一个文档。文档是包含所需数据的 JSON 对象。当您为文档编制索引时,Elasticsearch 会存储您发送的原始 JSON 对象,以及一些元数据以供自己使用。若要存储有关人员的信息,对象可能如下所示:
- 我看到该对象有两个字段,名称和国家/地区。但是您知道您实际上可以向此对象添加更多字段吗?这样,您就可以完全控制它!
- 看看右边,你会看到一个如何在Elasticsearch中存储对象的示例。
- 当我们向Elasticsearch发送JSON对象时,它会存储在一个名为“_source”的字段中。Elasticsearch还存储了一些元数据和对象,但我们稍后会介绍。
- 现在,让我回答您可能遇到的一个问题:文档是如何组织的?答案很简单:它们在索引中组织。Elasticsearch 中的每个文档都存储在自己的索引中。
Indices
索引是将文档逻辑排列在一起的绝佳方法,并为可伸缩性和可用性提供了配置选项。稍后,我们将更详细地探讨这些选项。
换句话说,索引只是一组逻辑上相关且具有相似功能的文档。考虑您运行购物网站的场景。每个产品可能都有自己的文档,您可以将这些文档编译成一个名为“产品”的单个索引。与此类似,如果你有一个社交网络平台,你可能有每个用户的文档,你可以将它们编译成一个名为“users”的索引并组织起来。
包含无限数量文档的索引的可能性非常大。因此,您可以保留任意数量的文档,而不必担心超出存储容量。搜索数据时,我们选择要在其中搜索文档的索引。这表明索引实际上用于处理搜索查询。
一般来说,在 Elasticsearch 中使用索引是组织数据的好方法。它们为您提供了可伸缩性和可用性选项,并允许您将相关文档组合在一起。