Elasticsearch特点:分布式,高性能,高可用,高伸缩的搜索和分析;

1)可作为一个大型分布式集群,处理PB级别的数据,服务大型公司,亦可运行在少数或单台设备上服务小型公司

分布式的特性:

Elasticsearch致力于隐藏式分布式系统的复杂性,如下这些操作都是在底层自动完成的:

  • 将你的文档分区到不同的容器或者分片(shards)中,他们可以存在于一个或多个节点中
  • 将分片均匀的分配到各个节点,对索引和搜索做负载均衡。
  • 冗余每一个分片,防止硬件故障造成的数据丢失
  • 将集群中任意一个节点上的请求路由到相应数据所在的节点
  • 无论是节点增加或减少,分片都可以做到无缝的扩展和迁移

2)Elasticsearch主要将全文检索、数据分析以及分布式技术,合并在了一起;

3)对用户而言,使用便利

4)相比传统数据库作搜索性能和功能有了很大提升(全文检索,同义词处理,相关度排名,复杂数据分析,对海量数据近实时处理等等);

功能:

1)分布式搜索引擎和数据分析引擎;

2)全文检索,结构化检索,数据分析。

3)对海量数据进行近实时的处理

集群内部工作方式

Elasticsearch用于构建高可用和可扩展的系统,扩展的方式可以是购买更高配置的Server(纵向扩展:vertical scale or scaling up)或者购买更多数量的server(横向扩展:horizontal scale or scaling out).

Elasticsearche虽说能从更强大的硬件中获得更好的性能,但是纵向扩展仍存在自身的局限性,真正扩展的往往是横向扩展,通过增加节点来分担负载增加可靠习惯。(对于大多数数据库而言,横向扩展的意味着你的程序讲座非常大的改动才能利用这些添加的设备。ES在这里就显现出优点,因为ES天生就是分布式的:他知道如何管理节点来提高扩展和高可用,这意味着你的程序不需要关心这些。)

全文检索和Lucene

1)全文检索,倒排索引

2)lucene,本来是一个jar包,内部包含了封装好的各种建立倒排索引,以及进行搜索的代码,包括各种算法。在使用Java开发的时候,引入lucene的jar包,然后基于lucene的api进行开发时,lucene会帮助我们在已有的数据中建立索引,帮助我们组织索引结构,此外还可以使用lucene提供的功能和api来针对磁盘上的索引数据,进行搜索。

Elasticsearch的相关名词解释

(1)Near Realtime(NRT):近实时,两层含义:写入数据到数据可以被搜索有一个小延迟,基于ES执行搜索和分析可以达到秒级

(2)Cluster:集群,包含多个节点,每个节点属于哪个集群是通过一个配置(集群名称默认是elasticsearch)来决定的;

(3)Node:节点,集群中的一个节点,介意也有一个名称(默认是随机分配的),节点名称也很重要(在执行运维管理操作的时候),默认节点会加入一个名称为“elasticsearch”的集群,假如启动一堆节点,那么这些节点会自动组成一个elasticsearch集群,当然一个节点也可以组成一个elasticsearch集群。

(4)Document:文档,ES中的最小单位,一个document可以是一条客户数据,一条商品分类信息,一条订单数据等等,通常用JSON形式表示,每个index下的type中都可以存储多个document。

(5)Index:索引,包含一推有下你故事结构的文档数据,如有一个客户索引,商品分类索引,订单索引,索引有一个名称。

(6)type:类型,每个索引里都可以有一个或多个type,type是index中的一个逻辑数据分类,一个type下的document,都有相同的field,如博客系统,有一个索引,可以定义用户数据type,博客数据type,评论数据type。

(7)shard:单个机器无法存储大量的数据,ES可以将一个索引中的数据切分为多个shard,分布在多台服务器上存储,有了shard就可以横向扩展,存储更多数据,让搜索和分析等操作分布到多台服务器上去执行,提升吞吐量和性能,。每个shard都是一个lucene index。

(8)replicate:任何一个服务器随时可能故障或宕机,primary shard(建立索引是一个设置,不能修改,默认5个),replicate shard(随时修改数量,默认一个),默认每个索引有10个shard,5个primary shard,5个replicate shard,最小的高可用配置,要求2太服务器。

ES与传统数据库相比

Elasticsearch  数据库
Document  行
Type  表
Index  数据库

空集群

启动一个单独的节点,他还没有数据和索引,如下图:

一个节点(node)即一个Elasticsearch实例,而一个集群(cluster)由一个或多个节点组成,他们具有相同的cluster name,他们协同工作,分享数据和负载。当加入新的节点或者删除一个节点时,集群就会感知到并平衡数据。

集群中的一个节点会被选举为主节点(master),它将临时管理集群级别的一些变更;如新建成或删除索引、增加或删除节点等。master不参与文档级别的变更或搜索,这意味着在流量增长的时候,master不会成为集群的瓶颈。任何节点都可以成为master。这里的举例因为只启动了一个节点,所以它会充当master的角色。

用户可以与集群中的任何节点通信,包括master,每一个节点都知道文档存在于那个节点上,它们可以转发请求到相应的节点上,我们访问的节点负责收集各节点返回的数据,最后一起返回给客户端。这一切都由elasticsearch处理。

ES集群可以监控统计很多信息,但是只有一个最重要:集群的健康(cluster health)。集群健康有三种状态:green、yellow和red。启动集群,在浏览器中登录127.0.0.1:5601,然后在Dev Tools中可以使用命令来获取集群的健康状态,GET /_cluster/health/

(1)status是我们关注的字段

三种状态的解释:

颜色 意义
green  所有主要分片(primary shard)和复制分片(replicate shard)都可用
yellow  所有主要分片可用。但不是所有复制分片都可用
red  不是所有的主要分片都可用

添加索引

为了将数据添加到ES中,我们需要索引(index)--一个存储关联数据的地方,实际上,索引只是一个用来指向一个或多个分片(shards)的“逻辑命名空间(logical namespace)”.一个分片(shards)是一个最小级别“工作单元(work unit)”,它只是保存了索引中所有数据的一部分。分片其实就是一个Lucene实例,并且它本身就是一个完整的搜索引擎。我们的文档存储在分片中,并且在分片中被索引,但是我们的应用程序不会直接与它们通信,取而代之的是,直接与索引通信。分片是ES在集群中分发数据的关键。把分片想象成数据的容器,文档存储在分片中,然后分片分配到你集群中的节点上。当集群扩缩容时,ES会自动在节点间迁移分片,以使集群保持平衡。

分片可以是主分片(primary shard)或者是复制分片(replicate shard)。你索引中的每个文档属于一个primary shard,所以primary shard的数量决定了索引最多能存储多少数据。

(理论上primary shard能存储的数据大小是没有限制的。限制取决于实际使用情况。shard的最大容量完全取决于你的使用状况:硬件存储大小、文档的大小和复杂度、如何索引和查询你的文档,以及你期望的响应时间)

replicate shard只是primary shard的一个副本,它可以防止硬件故障导致的数据丢失,同时可以提供读请求,比如搜索或者从别的shard取回文档。

当索引创建完成的时候,primary shard的数量就固定了,但是replicate shard的数量可以随时调整。

ES相关概念理解的更多相关文章

  1. Elasticsearch-head使用及ES相关概念

    elasticsearch-head安装和介绍已在上一篇讲了. 在浏览器访问http://localhost:9100,可看到如下界面,表示启动成功: 仔细观察,我们会发现客户端默认连接的是我们ela ...

  2. Android OpenGL ES(七)----理解纹理与纹理过滤

    1.理解纹理 OpenGL中的纹理能够用来表示图像.照片,甚至由一个数学算法生成的分形数据.每一个二维的纹理都由很多小的纹理元素组成.它们是小块的数据,类似于我们前面讨论过的片段和像素.要使用纹理,最 ...

  3. es fielddata理解

    在es中,text类型的字段使用一种叫做fielddata的查询时内存数据结构.当字段被排序,聚合或者通过脚本访问时这种数据结构会被创建.它是通过从磁盘读取每个段的整个反向索引来构建的,然后存存储在j ...

  4. vue介绍以及相关概念理解大全

    1.什么是vue 以官网的解释来说,vue是渐进式javascript框架.Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计 ...

  5. Go 微服务架构Micro相关概念理解

    Micro是一个微服务框架(或者说是工具集):提供了各类组件,解决微服务架构中的不同问题,服务监控.服务发现.熔断机制,负载均衡等等,自己一个个解决这些问题几乎不可能,这时候就需要借助go-micro ...

  6. javascript系列学习----对象相关概念理解

    1.构造函数(相对于面向对象编程语言里面的类) 2.对象实例(它是由构造函数构造出来的对象,使用到关键字 new) 3.this关键字(往往是指我们的对象本身) 下面我们来看一个实例: var Per ...

  7. 梳理 Opengl ES 3.0 (一)宏观着眼

    Opengl ES 可以理解为是在嵌入式设备上工作的一层用于处理图形显示的软件,是Opengl 的缩水版本. 下图是它的工作流程示意图: 注意图中手机左边的EGL Layer Opengl ES是跨平 ...

  8. OpenGL ES: (5) OpenGL的基本概念、OpenGL ES 在屏幕产生图片的过程、OpenGL管线(pipeline)

    一. OpenGL的基本概念 OpenGL 的结构可以从逻辑上划分为下面 3 个部分: 图元(Primitives) 缓冲区(Buffers) 光栅化(Rasterize) 图元(Primitives ...

  9. ES使用中的总结整理

    最近项目中使用了ES搜索,开始时自己搭建了ES环境做测试,后面申请了公司的云平台应用, 对接ES的过程中颇具波折,遇到了很多问题,在这里统一整理记录下: 1,ES的9200 及 9300端口说明 92 ...

随机推荐

  1. jQuery.ajaxSetup()

    jQuery.ajaxSetup()函数用于设置AJAX的全局默认设置. 该函数用于更改jQuery中AJAX请求的默认设置选项.之后执行的所有AJAX请求,如果对应的选项参数没有设置,将使用更改后的 ...

  2. CSS3 (一)

    属性选择器 1. E[attr^="value"]:指定了属性名,并且有属性值,属性值是以value开头的: .wrap a[href^="http://"]{ ...

  3. 使用std::mutex取代QMutex

    为了保证对某个资源的操作是原子性的(对资源读写时,只有当前的操作结束,才允许另外线程对其操作,这里有个理解误区,资源操作原子性不是说,当前某个线程获得了某个资源使用权,然后线程执行时间完毕,要切换线程 ...

  4. HBase运维和优化

    管理工具 HBase ShellHBase Shell是HBase组件提供的基于JRuby IRB的字符界面的交互式客户端程序,通过HBase Shell可以实现对HBase的绝大部分操作 通过hel ...

  5. link与import区别

    本质上,这两种方式都是为了加载css文件,但还是存在细微的差别. 差别1:老祖宗的差别,link属于XHTML标签,而@import完全是css提供的一种方式. link标签除了可以加载css外,还可 ...

  6. Python return语句用法分析

    return 语句 程序运行到所遇到的第一个return即返回(退出def块),不会再运行第二个return. 要返回两个数值,写成一行即可: def a(x,y): if x==y: return ...

  7. windwo访问linux文件夹方法

    windwo访问linux文件夹:是通过linux的samba来实现的: 安装samba需要安装samba-client.samba-common.smaba3个包. 一:安装rpm 现有一个服务器l ...

  8. MD5Util1

    package com.cc.hkjc.util; import java.math.BigInteger;import java.security.MessageDigest;import java ...

  9. codeforces 696A A. Lorenzo Von Matterhorn(水题)

    题目链接: A. Lorenzo Von Matterhorn time limit per test 1 second memory limit per test 256 megabytes inp ...

  10. LA-2678 (尺取法)

    题意: 在一个长度为n的序列中,找到最短的长度序列,使其和大于等于s; 思路: two pointer ,水题; Ac代码: #include <bits/stdc++.h> /* #in ...