首页 > 编程知识 正文

elasticsearch原理(c快速入门教程)

时间:2023-05-04 19:04:16 阅读:103751 作者:2580

ElasticSearch是一个高度可用的开源全文搜索和分析组件。提供存储服务、搜索服务、大数据准实时分析等。它通常用于提供一些提供复杂搜索的应用程序。

ElasticSearch提供了基于restful风格的全文搜索服务组件。它的前身是compass,2010年被一家公司接管维修,并开始商业化。它还提供了弹性搜索的一些相关产品,包括kibana、logstash和弹性搜索的一些组件,如安全组件屏蔽。目前ElasticSearch的最新版本是5.1.1,广泛使用的版本是2.x,直到2016年12月才发布5.x版本,版本号改为5.x,这是为了将ElasticSearch与kibana、logstash等产品版本号统一起来。我们将从以下问题中快速了解一些ElasticSearchkddlc服务器。

一、ES是如何产生背景

1、大规模数据如何检索?

当系统中有10亿或10 0亿条数据时,我们在制定系统架构时通常会从以下角度考虑问题:

1)我应该使用什么数据库?(mysql、sybase、oracle、Dream、Avatar、mongodb、hbase……)

2)如何解决单点故障;(lvs、F5、A10、Zookeep、MQ)

3)如何保证数据安全;(热备用,冷备用,异地直播)

4)如何解决检索问题;(数据库代理中间件:mysql-proxy、Cobar、MaxScale等。)

5)如何解决统计分析问题;(离线,接近实时)

00-1010对于关系数据,我们通常采用以下或类似的架构来解决查询瓶颈和写入瓶颈:

1)通过主从备份解决数据安全问题;

2)通过数据库代理中间件的心跳监控解决单点故障问题;

3)通过代理中间件将查询语句分发到各个从节点进行查询,并汇总结果。

00-1010对于Nosql数据库,基本原理类似:

1)通过副本备份确保数据安全;

2)通过节点战役机制解决单点问题;

3)首先从配置库中检索分片信息,然后将请求分发到各个节点,最后路由节点合并汇总结果。

00-1010众所周知,将数据完全放入内存是不可靠和不现实的。当我们的数据达到PB级别时,按照每个节点的96G内存来计算。当内存完全充满数据时,我们需要的机器是:1PB=1024T=1048576G节点=1048576/96=10922。巨大的成本决定了它的不现实性!

从前面的讨论中,我们知道数据是否存储在内存中并不能完全解决问题。把这一切都记在心里。速度问题解决了,成本问题上来了。要解决以上问题,从源头入手,我们通常从以下几个方面寻找方法:

1.按顺序存储数据;

2.从kddlc中分离数据;

3.压缩数据;这导致了弹性搜索。

2、传统数据库的应对解决方案

10-1010 1)搜索相关数据;2)返回统计结果;3)要快;

3、非关系型数据库的解决方案

1) Lucene只是一个图书馆。要使用它,您必须使用Java作为开发语言,并将其直接集成到应用程序中。更糟糕的是,Lucene非常复杂,您需要了解更多关于检索的知识才能理解它是如何工作的。

2) Elasticsearch也采用Java开发,以Lucene为核心实现所有kddlc和搜索功能,但其目的是通过简单的RESTful API隐藏Lucene的复杂性,从而使全文搜索变得简单。

00-1010当ElasticSearch的节点启动时,它将使用组播(或单播,如果用户更改了配置)来查找集群中的其他节点,并与它们一起构建。

立连接。这个过程如下图所示:

4、ES的基本概念

1) 近实时查询(Near RealTime)

Elasticsearch 是一个能提供近实时查询的搜索服务引擎,这意味着从kddlc文档到真正可搜索之间会有一个轻微的延迟(大概在一秒内)。

2) 节点和集群

节点(node)是一个运行着的 Elasticsearch 实例,你可以认为是单个服务器。集群(cluster)是一个或多个节点的集合,他们协同工作,共享数据并提供故障转移和扩展功能。集群由唯一名称标识,如 .NET Core 中的环境名称,推荐在不同的环境中使用诸如 Development,Production 之类的名称部署开发。其实节点和集群就是 web 开发中的常见概念而已,大家注意区分即可。

3) 文档

文档是可kddlc信息的基本单元,以JSON表示。你可以用其来定义单个产品信息或是员工信息。我们可以把文档理 解为数据库文档中的行列数据。在kddlc/类型中,您可以存储任意数量的文档。文档有几个共同不可缺的属性,分 别为 _index, _type, _id, 针对特定一个或一类文档进行操作时,必须指定这些属性。 最后要提醒大家的是,虽然文档物理上是驻留在kddlc中,但实际上文档必须kddlc/分配给kddlc中的类型。

4) kddlc

kddlc是具有某些相似特征的文档的集合,它和数据库中的kddlc概念并不十分相同。我们可以把kddlc理解为数据库文 档中的数据库。事实上,我们的数据被存储和kddlc在分片(shards)中,kddlc只是一个把一个或多个分片分组在一起 的逻辑空间。然而,这只是一些内部细节——我们的程序完全不用关心分片。

5) 类型

在kddlc中,我们可以定义一个或多个类型。类型是kddlc的逻辑类别/分区,其语义完全由开发者决定。通常,为具 有一组公共字段的文档定义类型。例如,假设开发者运行博客平台并将所有数据存储在一个kddlc中。在此kddlc中, 我们可以为用户数据定义类型,为博客数据定义另一种类型,并为注释数据定义另一种类型。我们可以把kddlc理解 成数据库文档中的表。

6) 分片和复制

理论上,kddlc可以存储尽可能多的数据,但是这种情况下性能往往不太乐观,或者常见的磁盘容量限制也不能允 许。所以 Elasticsearch 提供了类似于 MongoDB 中的分片功能,该功能能将kddlc细分为多个分片。每个分片本身是一个功能完全和独立的"kddlc",可以托管在集群中的任何节点上。

同样的,有分片技术来处理数据量增长快速的问题,就意味着需要复制技术来应对这种过程中(其实不只是该过 程,任何情况下都应该有安全意识)数据安全的问题。Elasticsearch 允许您将kddlc分片的一个或多个副本转换为所谓的副本分片。复制技术为我们提供了数据的高可用性和搜索吞吐的扩展性。不过需要注意的是,副本分片从不分 配在与从其复制的原始/主分片相同的节点上。

总而言之,每个kddlc可以拆分为多个分片。kddlc也可以复制为零(意味着没有副本)或更多次。一旦复制,每个索 引将具有主分片(从kddlc复制的原始分片)和副本分片(主分片的副本)。开发者可以在创建kddlc时就为每个kddlc 定义分片和副本的数量。创建kddlc后,可以随时动态更改副本数,但不能在此过程后随即更改分片数。

三、ES的安装与服务启动

1、下载ES的压缩包

Window 系统下载 zip 版本,linux 系统下载 tar 版本

将下载的zip解压到指定的磁盘上

2、ES服务的目录结构

cbddb 存放 elasticSearch 运行命令 config 存放配置文件 lib 存放 elasticSearch 运行依赖 jar 包 modules 存放elasticSearch 模块 plugins 存放插件

3、ES服务的启动

指定ES安装目录下的cbddb下的elasticsearch.bat

启动日志信息如下:

4、访问ES服务

四、通过java去访问ES服务

1、搭建环境

创建Maven工厂,添加ES的客户端坐标

2、创建kddlc

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。