ES 可扩展、高可靠、使用场景等常见问题

ElasticSearch的常见问题

什么是ElasticSearch

ElasticSearch是一款非常强大的、基于Lucene的开源搜索及分析引擎;它是一个实时的分布式搜索分析引擎,它能让你以前所未有的速度和规模,去探索你的数据。

它被用作全文检索、结构化搜索、分析以及这三个功能的组合:

  1. Wikipedia 使用 Elasticsearch 提供带有高亮片段的全文搜索,还有 search-as-you-type 和 did-you-mean 的建议。
  2. 卫报 使用 Elasticsearch 将网络社交数据结合到访客日志中,为它的编辑们提供公众对于新文章的实时反馈。
  3. Stack Overflow 将地理位置查询融入全文检索中去,并且使用 more-like-this 接口去查找相关的问题和回答。
  4. GitHub 使用 Elasticsearch 对1300亿行代码进行查询。

除了搜索,结合Kibana、Logstash、Beats开源产品,Elastic Stack(简称ELK)还被广泛运用在大数据近实时分析领域,包括:日志分析、指标监控、信息安全等。它可以帮助你探索海量结构化、非结构化数据,按需创建可视化报表,对监控数据设置报警阈值,通过使用机器学习,自动识别异常状况。

ElasticSearch是基于Restful WebApi,使用Java语言开发的搜索引擎库类,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。其客户端在Java、C#、PHP、Python等许多语言中都是可用的。

ElasticSearch的特点

Elasticsearch 是一个分布式的搜索和分析引擎,它以其可扩展性、高可靠性和易于管理的特点而广受欢迎。下面我将详细说明这些特性体现在哪些方面:

可扩展性(Scalability)
  1. 分布式架构
    Elasticsearch 通过将数据分散存储到多个节点的索引分片中来实现水平扩展和负载均衡。一个索引可以被分成多个分片(Shards),而这些分片可以分布在集群的不同节点上。

  2. 节点和集群
    当需要扩展系统时,可以简单地增加更多的节点。Elasticsearch 集群会自动重新分配分片以均衡负载和空间使用。

  3. 数据分区和复制
    每个分片可以有零或多个副本(Replicas),这些副本分布在不同的节点上,可以提供数据冗余和提高查询能力。

  4. 路由和负载均衡
    各个请求会被智能地路由到包含相关数据的分片上,这样可以平衡不同节点之间的处理压力。

高可靠性(High Availability)
  1. 数据复制
    副本分片保证了数据的高可用性。如果某个分片的主节点遇到问题,副本分片可以立即接管,保证服务的连续性。

  2. 故障转移机制
    集群中的节点可以动态加入或退出,Elasticsearch 会自动进行数据的重分布,并在节点失效时进行故障转移。

  3. 持久性和恢复
    Elasticsearch 通过将数据写入磁盘来确保其持久性,并支持自动的快照和恢复机制,用于灾难恢复。

  4. 集群健康监控
    Elasticsearch 提供了丰富的监控API来监控集群状态,并提前预防可能的问题。

管理便捷性(Ease of Management)
  1. RESTful API
    Elasticsearch 可以通过HTTP的RESTful API进行管理和维护,这使得集群管理变得更加简单明了。

  2. 灵活的数据模式
    Elasticsearch 支持无模式(schema-less)的数据输入,这意味着你可以在任何时间动态地添加新字段,而无需修改现有的数据结构。

  3. 配置和调整
    Elasticsearch 提供了一系列配置选项,使得管理员可以灵活地根据需要调整集群的行为和性能。

  4. 集成和插件生态
    Elasticsearch 有着丰富的插件生态系统,可用于监控、警报、安全性增强等,并且可以很容易地与其他系统集成(如Kibana用于数据可视化,Logstash用于数据处理)。

  5. 升级和维护
    升级Elasticsearch集群也设计得相对平滑,支持滚动升级,即一次升级一个或几个节点,而不需要中断整个集群的服务。

总之,Elasticsearch的可扩展性体现在它能够通过增加节点来水平扩展处理能力;高可靠性体现在通过副本机制和故障转移来确保数据不丢失且服务可用;管理便捷性体现在易用的API、弹性的配置和丰富的插件生态。这些特性使得Elasticsearch非常适合作为大规模、多变需求和要求高可用性的搜索和分析场景的解决方案。

为什么要学习ElasticSearch?

  1. 在当前软件行业中,搜索是一个软件系统或平台的基本功能, 学习ElasticSearch就可以为相应的软件打造出良好的搜索体验。
  2. 其次,ElasticSearch具备非常强的大数据分析能力。虽然Hadoop也可以做大数据分析,但是ElasticSearch的分析能力非常高,具备Hadoop不具备的能力。比如有时候用Hadoop分析一个结果,可能等待的时间比较长。
  3. ElasticSearch可以很方便的进行使用,可以将其安装在个人的笔记本电脑,也可以在生产环境中,将其进行水平扩展。
  4. 国内比较大的互联网公司都在使用,比如小米、滴滴、携程等公司。另外,在腾讯云、阿里云的云平台上,也都有相应的ElasticSearch云产品可以使用。
  5. 在当今大数据时代,掌握近实时的搜索和分析能力,才能掌握核心竞争力,洞见未来。

ElasticSearch的主要功能及应用场景?

主要功能:

  1. 海量数据的分布式存储以及集群管理,达到了服务与数据的高可用以及水平扩展;
  2. 近实时搜索,性能卓越。对结构化、全文、地理位置等类型数据的处理;
  3. 海量数据的近实时分析(聚合功能)

应用场景:

  1. 网站搜索、垂直搜索、代码搜索;
  2. 日志管理与分析、安全指标监控、应用性能监控、Web抓取舆情分析;

为什么不是直接使用Lucene?

ElasticSearch是基于Lucene的,那么为什么不是直接使用Lucene呢?

Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库。

但是 Lucene 仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理。Lucene 非常 复杂。

Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单,通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。

然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:

  1. 一个分布式的实时文档存储,每个字段 可以被索引与搜索
  2. 一个分布式实时分析搜索引擎
  3. 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据

都有那些和Elasticsearch 媲美的搜索引擎?

  1. Apache Solr

    • 基于 Apache Lucene 构建,与 Elasticsearch 类似,Solr 是一个功能强大的搜索平台,它提供了全文搜索、高亮、分面、复制、负载均衡等功能。它在某些方面比 Elasticsearch 更成熟,例如在企业环境中已经使用了很多年。
  2. Amazon OpenSearch Service (以前叫做Amazon Elasticsearch Service)

    • 这是由 AWS 维护的一个 Elasticsearch 的分支版本,旨在提供与 Elasticsearch 相同的 API 兼容性,以及其他 AWS 服务的集成和一些额外功能。
  3. Apache Lucene

    • Elasticsearch 和 Solr 都是基于 Lucene 的,而 Lucene 是一个高性能、全特性的搜索库,如果你想更深入地控制搜索引擎的内部工作机制,可以直接使用 Lucene。
  4. Algolia

    • 是一个即插即用的搜索平台,提供了丰富的 API 和 SDK,让开发者很容易地集成到他们的网站、应用程序或移动应用中。Algolia 重点关注用户体验和开箱即用的功能。
  5. Sphinx (Sphinx Search)

    • 是一个开源的全文搜索服务器,提供了出色的性能,适用于处理大量数据。它可以与 SQL 数据库和 NoSQL 数据系统集成,并且支持分布式搜索。
  6. MeiliSearch

    • 是一个轻量级的、开源的搜索引擎,专注于用户体验和简化搜索设置。它易于部署和维护,并且提供了一个简洁直观的搜索经验。
  7. Typesense

    • 是一个开源、轻量级的、类似于 Algolia 的搜索引擎,旨在提供快速和精准的搜索体验。它易于安装和使用,并提供了一个简化的 API。
  8. Bleve

    • 是一个用 Go 语言编写的现代文本索引库,它提供了全文搜索功能,适合进行自定义的搜索系统开发。

选择哪个搜索引擎通常取决于具体的使用场景、性能要求、数据量大小、以及是否需要特定的功能。同时,团队的经验和偏好,以及和其他系统的集成情况,也会影响选择。在决策时,最好是先对每个候选的搜索引擎进行评估,确定它们是否能够满足项目的需求。

Apache Solr 和 Elasticsearch的区别?

Apache Solr 和 Elasticsearch 都是基于 Apache Lucene 构建的开源搜索引擎,它们都提供全文搜索功能、分布式搜索、索引功能以及能够横向扩展。尽管有许多相似之处,但也存在一些关键的区别:

  1. 起源和社区

    • Solr:Solr 由 CNET 网络公司创建,并于 2006 年贡献给了 Apache 软件基金会。它拥有一个成熟的社区,并且是在 Lucene 项目之后不久就推出的。
    • Elasticsearch:Elasticsearch 于 2010 年由 Shay Banon 创建并开发,较 Solr 晚出现。Elasticsearch 背后有一个公司 Elastic NV,将其作为其产品栈的核心部分。
  2. 架构

    • Solr:Solr 使用经典的主/从架构,尽管它也可以配置为使用更现代的SolrCloud模式,后者支持自动负载均衡和容错。
    • Elasticsearch:Elasticsearch 从一开始就设计为分布式系统,其核心功能包括集群分片、复制和负载均衡,具有很好的伸缩性和容错性。
  3. 可扩展性和容错性

    • Solr:SolrCloud 提供了可扩展性和容错性,但通常认为其设置和管理比 Elasticsearch 更复杂。
    • Elasticsearch:自带易于配置和使用的分片机制,因此在处理大型集群和数据量时可能更受青睐。
  4. 实时搜索

    • Solr:传统上,Solr 在处理实时搜索查询方面不如 Elasticsearch 强大,但随着近年的更新,这方面的差距已经缩小。
    • Elasticsearch:以其实时搜索功能和快速的索引速度而闻名。
  5. 数据处理

    • Solr:Solr 支持复杂的数据处理,包括丰富的文本分析、拼写检查和自动完成功能。
    • Elasticsearch:提供了构建复杂搜索功能的强大查询DSL(领域特定语言),并且与 Logstash 和 Kibana 集成良好,这些是 ELK(Elasticsearch, Logstash, Kibana)堆栈的一部分,用于日志分析和数据可视化。
  6. API 和生态系统

    • Solr:具有多种形式的API,包括 XML、JSON 和 HTTP,且有较为丰富的接口文档。
    • Elasticsearch:主要使用基于 REST 的 JSON 接口,拥有广泛的客户端库支持多种编程语言。
  7. 管理和监控工具

    • Solr:提供了一个管理界面,即 Solr Admin UI,用来管理和监控 Solr 实例。
    • Elasticsearch:使用 Kibana 作为其主要的监控工具,提供了更为丰富且用户友好的图形界面。

两者在性能和特性上都有不断的改进和更新,所以在实际选择使用哪个搜索引擎时,通常取决于特定项目的需求、现有基础设施以及团队的熟悉度。在某些情况下,两种技术也可以在同一个项目中共存,以满足不同的搜索和索引需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/649704.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Topaz Video AI:无损放大,让你的视频更清晰!

在当今的数字时代,视频内容的重要性越来越受到人们的关注。无论是在社交媒体上分享生活片段,还是在商业领域中制作宣传视频,人们都希望能够展现出更高质量的视频内容。 然而,由于各种原因,我们经常会面临一个问题&…

C++版QT:分割窗口

目录 mainwindow.h mainwindow.cpp main.cpp Qt的分割窗口功能允许用户将一个窗口分割成多个区域,每个区域可以独立地显示不同的内容。这种功能在许多应用程序中非常有用,例如编辑器、浏览器和IDE等。 理解Qt的分割窗口,需要从以下几个方面…

音频格式之AAC:(2)AAC封装格式ADIF,ADTS,LATM,extradata及AAC ES存储格式

系列文章目录 音频格式的介绍文章系列: 音频编解码格式介绍(1) ADPCM:adpcm编解码原理及其代码实现 音频编解码格式介绍(2) MP3 :音频格式之MP3:(1)MP3封装格式简介 音频编解码格式介绍(2) MP3 :音频格式之MP3&#x…

IDEA jdk版本切换问题

打开 IntelliJ IDEA 的 Project Structure(快捷键通常是 Ctrl Alt Shift S)。 转到 Project Settings > Modules。 选择相应的模块,然后在 Sources 标签页下,查看 Language level 是否设置为 自己需要的jdk版本语言。 接…

Unity2D新手教程[安装和创建项目]

1.教程简介 本教程是YouTube大佬教程视频的随笔, 目前正在更新中... 教程地址[YouTube](https://www.youtube.com/watch?vXtQMytORBmM)2.安装 本教程使用的Unity版本 2021.3.34f1, 安装好该LTS(长期支持)版本之后, 在左侧Install选项卡Tab中选择对应版本右边的齿…

强化学习 - Proximal Policy Optimization (PPO)

什么是机器学习 Proximal Policy Optimization(PPO)是一种用于解决强化学习问题的策略梯度方法。PPO的目标是通过优化代理的策略函数来最大化期望累积奖励。它通过引入一个剪切项(clipping term)来限制新策略相对于旧策略的更新幅…

20240125-边界外路径

题目要求 有一个m*n的网格,网格中有一个小球。小球初始位置位[startRow,startColumn]。您可以将小球移动到网格中相邻的四个单元格之一(可能会越过网格边界移出网格)。最多可以对小球进行maxMove移动。 给定 m、n、maxMove、sta…

uniapp导入uView组件库

目录 准备工作 1. 新建一个项目 2. 导入uview组件库 3. 关于SCSS 配置步骤 1. 引入uView主JS库 2. 在引入uView的全局SCSS 3. 引入uView基础样式 4. 配置easycom组件模式 添加效果实验运行即可成功 准备工作 1. 新建一个项目 2. 导入uview组件库 在进行配置之前&#x…

TensorFlow2实战-系列教程2:神经网络分类任务

🧡💛💚TensorFlow2实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Jupyter Notebook中进行 本篇文章配套的代码资源已经上传 1、Mnist数据集 下载mnist数据集: %matplotlib inline from pathlib imp…

练习12.5_按键_Python编程:从入门到实践(第3版)

编写一个创建空屏幕的Pygame文件。在事件循环中,每当检测到pygame.KEYDOWN事件时 都打印属性event.key。运行这个程序并按下不同的键,看看控制台窗口的输出,以便了解 Pygame会如何响应。 Rocket_Game.py import pygame import sys from s…

使用代码取大量2*2像素图片各通道均值,存于Excel文件中。

任务是取下图RGB各个通道的均值及标签(R, G,B,Label),其中标签由图片存放的文件夹标识。由于2*2像素图片较多,所以将结果放置于Excel表格中,之后使用SVM对他们进行分类。 from PIL import Image import os …

【Linux】查看硬件信息和操作系统信息、安装的应用信息

【Linux】查看硬件信息和操作系统信息、安装的应用信息 一、硬件信息 1.1 CPU信息 cat /proc/cpuinfo #查看 processor : 0 // 逻辑处理器的唯一标识符 physical id : 0 // 硬件上真实存在的CPU siblings : 1 // 一个物理CPU有几个逻辑CPU cpu…

定向减免!函数计算让轻量 ETL 数据加工更简单,更省钱

作者:澈尔、墨飏 业内较为常见的高频短时 ETL 数据加工场景,即频率高时延短,一般均可归类为调用密集型场景。此场景有着高并发、海量调用的特性,往往会产生高额的计算费用,而业内推荐方案一般为攒批处理,业…

鸿蒙:@State装饰器

State装饰的变量,或称为状态变量,一旦变量拥有了状态属性,就和自定义组件的渲染绑定起来。当状态改变时,UI会发生对应的渲染改变。 在状态变量相关装饰器中,State是最基础的,使变量拥有状态属性的装饰器&am…

ChatGPT+Midjourney+闲鱼赚钱方法实战探索

最近天天在朋友群内看到朋友接单(出售提示词,图片),轻轻松松半小时就赚200-300,特意探索了一下相关玩法,总结出一套ChatGPTMidjourney闲鱼赚钱方法,主打的是易上手,有可操作性! 具体…

项目性能优化之用compression-webpack-plugin插件开启gzip压缩

背景:vue项目打包发布后,部分js、css文件体积较大导致页面卡顿,于是使用webpack插件compression-webpack-plugin开启gzip压缩 前端配置vue.config.js 先通过npm下载compression-webpack-plugin包,npm i compression-webpack-plug…

C#使用RabbitMQ-2_详解工作队列模式

简介 🍀RabbitMQ中的工作队列模式是指将任务分配给多个消费者并行处理。在工作队列模式中,生产者将任务发送到RabbitMQ交换器,然后交换器将任务路由到一个或多个队列。消费者从队列中获取任务并进行处理。处理完成后,消费者可以向…

【图像分割】【深度学习】Windows10下UNet代码Pytorch实现与源码讲解

【图像分割】【深度学习】Windows10下UNet代码Pytorch实现与源码讲解 提示:最近开始在【医学图像分割】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。 文章目录 【图像分割】【深度学习】Windows10下UNet代码Pytorch实现与源码讲解前言UNet模型运行环境搭…

SQL语句创建一个简单的银行数据库

目录 一、银行业务E-R图 二、数据库模型图 转换关系模型后: 三、创建数据库 3.1 创建银行业务数据库 四、创建表 4.1 创建客户信息表 4.2 创建银行卡信息表 4.3 创建交易信息表 4.4 创建存款类型表 结果如下: ​编辑 五、插入适量数据 5.1…

java servlet果蔬产业监管系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web果蔬产业监管系统是一套完善的java web信息管理系统 serlvetdaobean mvc 模式开发 ,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主 要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5…