From 89158977f1d2265a19e20118fc0a9cc127929644 Mon Sep 17 00:00:00 2001 From: yanglbme Date: Tue, 4 Dec 2018 17:01:34 +0800 Subject: [PATCH] docs(es): add es-introduction.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit es介绍与核心概念说明 --- README.md | 4 +- docs/high-concurrency/es-introduction.md | 59 +++++++++++++++++++++++ img/es-cluster-0.png | Bin 0 -> 8561 bytes 3 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 docs/high-concurrency/es-introduction.md create mode 100644 img/es-cluster-0.png diff --git a/README.md b/README.md index 076fb47..fcb6df5 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,8 @@ 本系列知识出自中华石杉,我对这部分知识做了一个系统的整理,方便学习查阅。 +一点小建议:学习本系列知识之前,如果你完全没接触过 `MQ`、`ES`、`Redis`、`Dubbo`、`Hystrix` 等,那么我建议你可以先在网上搜一下每一块知识的快速入门,玩一下入门 Demo,然后再开始每一块知识的学习。这样效果更好噢~ + ## 高并发架构 ### [消息队列](/docs/high-concurrency/mq-interview.md) @@ -17,7 +19,7 @@ - [如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决?](/docs/high-concurrency/mq-time-delay-and-expired-failure.md) - [如果让你写一个消息队列,该如何进行架构设计啊?说一下你的思路。](/docs/high-concurrency/mq-design.md) -### 搜索引擎 +### [搜索引擎](/docs/high-concurrency/es-introduction.md) - [es 的分布式架构原理能说一下么(es 是如何实现分布式的啊)?](/docs/high-concurrency/es-architecture.md) - [es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗?](/docs/high-concurrency/es-write-query-search.md) - [es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?](/docs/high-concurrency/es-optimizing-query-performance.md) diff --git a/docs/high-concurrency/es-introduction.md b/docs/high-concurrency/es-introduction.md new file mode 100644 index 0000000..62ce620 --- /dev/null +++ b/docs/high-concurrency/es-introduction.md @@ -0,0 +1,59 @@ +## lucene 和 es 的前世今生 +lucene 是最先进、功能最强大的搜索库。如果直接基于 lucene 开发,非常复杂,即便写一些简单的功能,也要写大量的 Java 代码,需要深入理解原理。 + +elasticsearch 基于lucene,隐藏了 lucene 的复杂性,提供了简单易用的 restful api / Java api接口(另外还有其他语言的 api接口)。 + +- 分布式的文档存储引擎 +- 分布式的搜索引擎和分析引擎 +- 分布式,支持 PB 级数据 + +## es 的核心概念 +### Near Realtime +近实时,有两层意思: + +- 从写入数据到数据可以被搜索到有一个小延迟(大概是 1s) +- 基于 es 执行搜索和分析可以达到秒级 + +### Cluster 集群 +集群包含多个节点,每个节点属于哪个集群都是通过一个配置来决定的,对于中小型应用来说,刚开始一个集群就一个节点很正常。 + +### Node 节点 +Node 是集群中的一个节点,节点也有一个名称,默认是随机分配的。默认节点会去加入一个名称为 `elasticsearch` 的集群。如果直接启动一堆节点,那么它们会自动组成一个 elasticsearch 集群,当然一个节点也可以组成 elasticsearch 集群。 + +### Document & field +文档是 es 中最小的数据单元,一个 document 可以是一条客户数据、一条商品分类数据、一条订单数据,通常用 json 数据结构来表示。每个 index 下的 type,都可以存储多条 document。一个 document 里面有多个 field,每个 field 就是一个数据字段。 + +```json +{ + "product_id": "1", + "product_name": "iPhone X", + "product_desc": "苹果手机", + "category_id": "2", + "category_name": "电子产品" +} +``` + +### Index +索引包含了一堆有相似结构的文档数据,比如商品索引。一个索引包含很多 document,一个索引就代表了一类相似或者相同的 ducument。 + +### Type +类型,每个索引里可以有一个或者多个 type,type 是 index 的一个逻辑分类,比如商品 index 下有多个 type:日化商品 type、电器商品 type、生鲜商品 type。每个 type 下的 document 的 field 可能不太一样。 + +### shard +单台机器无法存储大量数据,es 可以将一个索引中的数据切分为多个 shard,分布在多台服务器上存储。有了 shard 就可以横向扩展,存储更多数据,让搜索和分析等操作分布到多台服务器上去执行,提升吞吐量和性能。每个 shard 都是一个lucene index。 + +### replica +任何一个服务器随时可能故障或宕机,此时 shard 可能就会丢失,因此可以为每个 shard 创建多个 replica 副本。replica 可以在 shard 故障时提供备用服务,保证数据不丢失,多个 replica 还可以提升搜索操作的吞吐量和性能。primary shard(建立索引时一次设置,不能修改,默认 5 个),replica shard(随时修改数量,默认 1 个),默认每个索引 10 个 shard,5 个 primary shard,5个 replica shard,最小的高可用配置,是 2 台服务器。 + +这么说吧,shard 分为 primary shard 和 replica shard。而 primary shard 一般简称为 shard,而 replica shard 一般简称为 replica。 + +![es-cluster-0](/img/es-cluster-0.png) + +## es 核心概念 vs. db 核心概念 +| es | db | +|---|---| +| index | 数据库 | +| type | 数据表 | +| docuemnt | 一行数据 | + +以上是一个简单的类比。 \ No newline at end of file diff --git a/img/es-cluster-0.png b/img/es-cluster-0.png new file mode 100644 index 0000000000000000000000000000000000000000..88cdbae10408308db1d19575ea3cab80964e524b GIT binary patch literal 8561 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 KrJReV_x=NZzA51V literal 0 HcmV?d00001 -- GitLab