本文系本人根据官方文档的翻译,能力有限、水平一般,如果对想学习Elasticsearch的朋友有帮助,将是本人的莫大荣幸。

原文出处:https://www.elastic.co/guide/en/elasticsearch/reference/current/_basic_concepts.html

ElasticSearch有几个核心概念,了解它们将有助于我们的整个学习过程。

近乎实时(NRT)
Elasticsearch是一个近乎实时的搜索平台。这意味着从你为一个文档建立索引到该文档可被检索只有很小的时间差(通常是1秒)。

集群(Cluster)
群集是一个或多个节点(服务器)的集合,它们一起保存整个数据,并在所有节点上提供联合索引和搜索功能。一个集群由唯一的名称加以识别,默认为“elasticsearch”。此名称非常重要,因为一个节点(服务器)只能按(集群)的唯一名称加入集群。

请确保不要在不同的环境中使用相同的集群名称,否则节点可能会加入错误的集群。举例来讲,你可以使用 logging-dev, logging-stage, 以及logging-prod 分别作为开发,测试和生产环境的集群名称。

一个集群可以仅包含一个节点。而且你也可以设置多个不同的集群,每个集群都有自己唯一的名称。

节点(Node)
节点是作为集群的一台服务器,存储数据并参与集群的索引和搜索功能。和集群相似,节点是由名称标识的,在节点启动时被默认分配为随机的UUID(Universally Unique Identifier)。如果不想要默认名称,你可以给任意节点定义名称。该名称在管理你网络中的服务器对应哪个节点时起到很重要的作用。

一个节点可以被配置为加入带有特定名称的集群。默认情况下,每个节点都会加入名为elasticsearch的集群。也就是说,如果你启动了多个节点,并且假设它们之间是网络连通的,那么它们将自动组一个名为elasticsearch的集群。

在单一集群中,你可以拥有任意数量的节点。而且,如果当前没有其他ElasticSearch节点运行与你的网络,启动一个新节点将组建一个新的名为elasticsearch的单节点集群。

索引(Index)

索引是具有相似特性的文档集合。例如,可以为客户数据建立一个索引,产品目录用另一个索引,以及订单数据再建立一个索引。索引由名称(必须全部为小写)标识,该名称用于在对其中的文档执行索引、搜索、更新和删除操作时引用索引。

在一个集群中,你可以定义任意数量的索引。

类型(Type)
在索引中,你可以定义一或者多个类型。类型是索引的逻辑类别/分区,其语义完全取决于你。一般来说,类型定义为具有公共字段集的文档。例如,假设你运营一个博客平台,并将所有数据存储在一个索引中。在这个索引中,您可以定义用户数据的类型,博客数据的类型,以及注释数据的类型。

文档(Document)
文档是可被索引的最小单元。举例,你可以为一个客户创建一个文档,为一个产品创建另一个文档,为一个订单再创建一个文档。这个文档用JSON(JavaScript对象标记语言)表示,它是一种无处不在的Internet数据交换格式。

在一个索引或者类型中,你可以存储任意数量的文档。注意,一个文档物理上长存于索引中,而事实上也同时必须被指定一个索引中的类型。

碎片和复制品(Shards & Replicas)
索引可以存储大量的数据,这些数据可能超过单个节点的硬件限制。例如,占用磁盘空间1TB的含有十亿个文件的单个索引,可能不适合放单个节点的磁盘上。因为那将拖慢服务本身以至于无法响应外部的搜索请求。

为了解决这一问题,Elasticsearch提供了将索引分成多个块(称之为碎片)的能力。创建索引时,可以简单地定义你所需的碎片数。每个碎片本身是一个全功能的、独立的“索引”,可以被托管在集群中的任意节点。

分片之所以重要是因为两大原因:
1. 它允许你水平拆分/缩放内容卷
2. 它允许你跨分片地并行操作(可能在多个节点上)从而提高性能/吞吐量

分片的分布机制、以及分片上文档聚合后返回给检索请求完全由Elasticsearch管理,对于作为用户的你来说是完全透明的。

在网络/云计算环境中失败时有发生,分片/节点意外导致不可用时,拥有故障转移机制是非常有帮助且被告诉推崇的。为此,Elasticsearch可以将一或者多个所以的分片拷贝转化为副本分片,简称副本(replicas)。

副本的重要性主要有两大原因:
1. 它提高了分片/节点故障时的可用性。需要注意的是,副本分片永远不会和那个被它复制的原始/主分片分配在同一个节点上。(译者注:如果和主分片在同一个节点,当该节点故障副本节点也将不可用,便失去了副本的意义)
2. 它增大了搜索量/吞吐量,因为搜索可以在所有副本上并行执行。

总结:每个索引可以被拆分为多个分片。一个索引可以被复制0次(不复制)或者多次。一旦被复制,每个索引将会拥有主分片(原始的被复制的分片)和副本分片(从主分片复制而来的分片)。主分片及副本分片的数量可以在创建索引的时候指定。索引被创建后,你可以动态改变副本分片的数量,但是主分片的数量则不允许修改。

每个Elasticsearch中的每个索引被默认分配了5个主分片和一个副本(节点),也就是说如果在你的集群中有两个节点,那么你的索引将会有5个主分片和5个副本分片(一个完整副本)共计10个分片。

每个Elasticsearch分片是一个Lucene索引。 每个Lucene索引有个允许的包含的文档数量上限。截止
LUCENE-5843, 上限为 2,147,483,519 (= Integer.MAX_VALUE - 128) 。你可以使用_cat/shards
api来监视分片大小。

了解了基础概念之后,让我们开始接触有趣的部分吧…

Elasticserach学习笔记-01基础概念的更多相关文章

  1. Docker:学习笔记(1)——基础概念

    Docker:学习笔记(1)——基础概念 Docker是什么 软件开发后,我们需要在测试电脑.客户电脑.服务器安装运行,用户计算机的环境各不相同,所以需要进行各自的环境配置,耗时耗力.为了解决这个问题 ...

  2. OpenFlow Switch学习笔记(一)——基础概念

    OpenFlow Switch v1.4.0规范是在2013年10月14号发布,规范涵盖了OpenFlow Switch各个组件的功能定义.Controller与Switch之间的通信协议Open F ...

  3. 【miscellaneous】 GStreamer应用开发手册学习笔记之基础概念介绍

    第3章. 基础概念介绍 本章将介绍GStreamer的基本概念. 理解这些概念对于你后续的学习非常重要,因为后续深入的讲解我们都假定你已经完全理解了这些概念. 3.1. 元件(Elements) 元件 ...

  4. PHP学习笔记01——基础语法

    <!DOCTYPE html> <html> <?php // 1.使用$加变量名来表示变量,php是弱类型语言,不要求在使用变量前声明,第一次赋值时变量才被创建 $a ...

  5. JAVA学习笔记之基础概念(一)

    一.Java 简介: Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 面向对象程序设计语言和 Java 平台的总称. 由 James Gosling和同 ...

  6. Centos7安装gitlab11 学习笔记之基础概念、部署安装、权限管理、issue管理

    一.基础介绍 1.简介 一个基于GIT的源码托管解决方案 基于rubyonrails开发 集成了nginx postgreSQL redis sidekiq等组件 2.安装要求 2g内存以上,有点占内 ...

  7. C#学习笔记(基础知识回顾)之值类型和引用类型

    一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...

  8. Quartz学习笔记:基础知识

    Quartz学习笔记:基础知识 引入Quartz 关于任务调度 关于任务调度,Java.util.Timer是最简单的一种实现任务调度的方法,简单的使用如下: import java.util.Tim ...

  9. C++ GUI Qt4学习笔记01

    C++ GUI Qt4学习笔记01   qtc++signalmakefile文档平台 这一章介绍了如何把基本的C++只是与Qt所提供的功能组合起来创建一些简单的图形用户界面应用程序. 引入两个重要概 ...

随机推荐

  1. WeMall微信商城源码插件会员卡代码详情

    WeMall微信商城源码插件会员卡代码是用于商业推广的比较有效的方式,分享了部分比较重要的代码,供技术员学习参考 Index_index.html <html> <head> ...

  2. hibernate从数据库中自动生成

    计应134(实验班) 李佳鸿 DB Brower配置 1.依次选择window-Open Perspective-MyEclipse Explorer

  3. iOS UI控件总结(全)

    1.UIButton UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; btn.frame = CGRectMake ...

  4. 容斥原理及SQL in关键字在EF中的应用

    突然意识到文字的重要性,于是开始写了第一个篇博客,博客目的紧紧为记录,以便温故. 同时也希望抛砖能达到引玉的作用,欢迎各位来发表自己的感想与想法,以此达到相互学习促进! 背景: 在做百度地图电子围栏的 ...

  5. 取出关联数组的key值和values值

    取出关联数组的key值,可用 array_keys()取出; <?php $a=array("Volvo"=>"XC90","BMW&qu ...

  6. 解决SQLServer 2008 日志无法收缩,收缩后大小不改变

    问题 数据库日志文件上G,或者几十G了,使用日志收缩,和日志截断收缩都不管用.体积一直减不下来.. 解决方案 查看日志信息 在查询分析器中执行如下代码来查看日志信息:  DBCC LOGINFO('数 ...

  7. MySQL从库忽略某些错误

    z熬配置MySQL主从同步的时候常常会因为主库的中SQL语句的错误造成从库的同步出现错误,一旦从库同步出现错误就会造成同步的卡壳影响后续的同步: 可以在从库的配置文件中加入如下的参数,使从库可以自动忽 ...

  8. Webpack 速成

    前言 如果你已经对Webpack精通了或者至少一直在工作中使用它,请关闭当前浏览器标签,无视这篇文章. 这篇文章本意是写给我自己看的,作为一篇Cookbook供快速查询和上手用.原因是虽然工作中会涉及 ...

  9. 彻底理解容器类(2)------- AbstractCollection深入了解

    h2 { background-color: Skyblue } AbstractCollection认识 AbstractCollection是Collection接口的抽象实现.实现了一部分Col ...

  10. 【iOS】7.4 定位服务->3.1 地图框架MapKit 功能1:地图展示

    > 本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正. --- > 本文相关目录: ================== 所属文集:[[ ...