elasticsearch basic concept - downgoon/hello-world GitHub Wiki
Elasticsearch 架构与概念
任何一个分布式系统,认识它的基本思路都是:
- 了解它的数据模型:从逻辑上,它刻画了一个什么样的编程数据模型。
- 了解它的分布式原理:分布式机制,无非是Partition,Replica和Allocation/Assignment。
- 动态发现与选主: 分布式需要回答的一个基本问题是 集群(Cluster)与成员(Member),成员里面有Master和Slave的角色。很多分布式系统都借助ZooKeeper来完成这项工作。但成熟的分布式系统都有个趋势是自建类似ZK的功能,好处是部署会变得简单。
Elasticsearch 的数据模型
在关系型中,database -> Table -> Row / Column / Schema 对应ES中, Index -> Type -> Document / Field / Mapping
- 索引(Index): 相当于关系数据库中的database概念,一个集群中可以包含多个索引。这个是个逻辑概念。
- 类型(Type): 相当于数据库中的table概念,mapping是针对 Type 的。同一个索引里可以包含多个 Type。
- Mapping: 相当于数据库中的schema,用来约束字段的类型,不过 Elasticsearch 的 mapping 可以自动根据数据创建。
- **文档(Document) **: 相当于数据库中的row。
- 字段(Field): 相当于数据库中的column。
Elasticsearch的分布式
谈到分布式,都会有三个概念:Partition,Replica 和 Allocation/Assignment。
-
何为Partition: 在关系型中,如果一个表太大,会横向和纵向拆表,分布到不同的机器。在ES中,如果索引太大,也会分拆若干份。这里的Partition是逻辑概念,是数学概念。
-
何为Replica: 一个数据存一份,万一那个数据出问题了,就丢失了。所以,一般都基于Partition做Replica处理。
-
何为Allocation/Assignment: 逻辑上有Partition和Replica,物理上都要落实到机器上去。当然我们知道在分布式系统里面,一般都是以网络进程为单位的,所以更准确的说,不是机器,而是“节点(Node)”。所谓Allocation,即使将Partition和Replica分派到各个节点(Node)上去的方法与过程。
ES结构
两个端口
ES 有两个端口:HTTP REST 的9200 和 TCP RPC 的9300 端口。
结构图
ES 把最终以来的文件系统抽象为了Gateway,使得索引文件既可以存在本地文件系统,又可以存在HDFS,还可以存在Amazon S3里面。