(16)ElasticSearch 的基本概念

4.1 概念
Elasticsearch 有几个核心概念,先理解这些概念将有助于掌握 Elasticsearch。
4.1.1 近实时(Near Realtime / NRT)
Elasticsearch 是一个近实时的搜索平台,从生成文档索引到文档成为可搜索,有一个
轻微的延迟(通常是一秒钟)。
4.1.2 集群(Cluster)
ES 默认就是集群状态,整个集群是一份完整、互备的数据。
集群是一个或多个节点(服务器)的集合。集群中的节点一起存储数据,对外提供搜索功
能。集群由一个唯一的名称标识,该名称默认是“elasticsearch”。集群名称很重要,节点
都是通过集群名称加入集群。
集群不要重名,取名一般要有明确意义,否则会引起混乱。例如,开发、测试和生产集
群的名称可以使用 logging-dev、logging-test 和 logging-prod。
集群节点数不受限制,可以只有一个节点。
4.1.3 节点(Node)
节点是一个服务器,属于某个集群。节点存储数据,参与集群的索引和搜索功能。与集
群一样,节点也是通过名称来标识的。默认情况下,启动时会分配给节点一个 UUID(全局
惟一标识符)作为名称。如有需要,可以给节点取名,通常取名时应考虑能方便识别和管理。
默认情况下,节点加入名为 elasticsearch 的集群,通过设置节点的集群名,可加入指定集
群。
4.1.4 索引(Index)
索引是具有某种特征的文档集合,相当于一本书的目录。例如,可以为客户数据建立索
引,为订单数据建立另一个索引。索引由名称标识(必须全部为小写),可以使用该名称,对
索引中的文档进行建立索引、搜索、更新和删除等操作。一个集群中,索引数量不受限制。
类似于 rdbms 的 database(5.x), 对于用户来说是一个逻辑数据库,虽然物理上会被
分多个 shard 存放,也可能存放在多个 node 中。 6.x 7.x index 相当于 table
4.1.5 类型(Type)
类似于 rdbms 的 table,但是与其说像 table,其实更像面向对象中的 class , 同一 Json
的格式的数据集合。(6.x 只允许建一个,7.0 被废弃,造成 index 实际相当于 table
4.1.6 文档(Document)
文档是可以建立索引的基本信息单元,相当于书的具体章节。
例如,可以为单个客户创建一个文档,为单个订单创建另一个文档。文档用 JSON
(JavaScript 对象表示法)表示。在索引中,理论上可以存储任意数量的文档。
类似于 rdbms 的 row、面向对象里的 object
级)
4.1.7 字段|属性(Field)
相当于字段、属性
4.1.8 分片与副本(Shards & Replicas)
索引可能存储大量数据,数据量可能超过单个节点的硬件限制。
例如,一个索引包含 10 亿个文档,将占用 1TB 的磁盘空间,单个节点的磁盘放不下。
Elasticsearch 提供了索引分片功能,创建索引时,可以定义所需的分片数量。每个分片本
身都是一个功能齐全,独立的“索引”,可以托管在集群中的任何节点上。
分片之所以重要,主要有 2 个原因:
允许水平切分内容,以便内容可以存储到普通的服务器中
允许跨分片操作(如查询时,查询多个分片),提高性能/吞吐量
分片如何部署、如何跨片搜索完全由 Elasticsearch 管理,对外是透明的。
网络环境随时可能出现故障,如果某个分片/节点由于某种原因离线或消失,那么使用故障
转移机制是非常有用的,强烈建议使用这种机制。为此,Elasticsearch 允许为分片创建副
本。
副本之所以重要,主要有 2 个原因:
在分片/节点失败时提供高可用性。因此,原分片与副本不应放在同一个节点上。
扩展吞吐量,因为可以在所有副本上并行执行搜索。
总而言之,索引可以分片,索引分片可以创建副本。复制后,每个索引将具有主分片与副本
分片。
创建索引时,可以为每个索引定义分片和副本的数量。之后,还可以随时动态更改副本
数量。您可以使用_shrink 和_split api 更改现有索引的分片数量,但动态修改副本数量相当
麻烦,最好还是预先计划好分片数量。
默认情况下,Elasticsearch 中的每个索引分配一个主分片和一个副本(7.X 之前,默认
是 5 片,副本是 0。7.X 默认改为 1 片,副本为 1)。如果集群中有两个节点,就可以将索
引主分片部署在一个节点,副本分片放在另一个节点,提高可用性。
.2 概念之间关系图

这张图可以展示出 ES 各组件之间的关系,整张表是一个 Cluster,横行是 Nodes,竖
列是 Indices,深绿色方块是 Primary Shards,浅绿色方块是 Replica Shards。
至于单个 Host 上的 Node 数目问题,在硬件资源有限的情况下,一般的做法是一个 Host
只运行一个 ES 进程,也就是一个 Node。例外情况是,由于 ES 内存配置上的特殊要求(JVM
Heap 不能超过 32G),如果你的 Host 特别 NB(16 Core CPU + 128G RAM + SSD 这
种),完全可以在单个 Host 上运行多个 ES 进程以避免硬件资源的浪费。
3 ES 概念和 MySQL 关系对比

假设有如下实体
public class Movie {
String id;
String name;
Double doubanScore;
List<Actor> actorList;
}
public class Actor{
String id;
String name;
}
这两个对象如果放在关系型数据库保存,会被拆成2张表,但是 ElasticSearch是用一个json
来表示一个 document。类似豆瓣某个电影详情页 https://movie.douban.com/
保存到 ES 中应该是

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据开发工程师-宋权

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值