前言
Elasticsearch(简称ES)是一个基于 Apache Lucene(TM) 的开源搜索引擎 , 同时也是一个分布式文档数据库.
特性
- 分布式实时文件存储,字段及字段数据均可被索引
- 可以在极短的时间内存储、搜索和分析大量的数据
- 可以扩展到上百台服务器,处理PB级结构化或非结构化数据
Elasticsearch与数据库的类比
关系型数据库(比如Mysql) | 非关系型数据库(Elasticsearch) |
---|---|
数据库 (Database) | 索引 (Index) |
表 (Table) | 类型 (Type) |
数据行 (Row) | 文档 (Document) |
数据列 (Column) | 字段 (Field) |
约束 (Schema) | 映射 (Mapping) |
索引 (index)
ES中的索引类似于传统数据库中的数据库,ES中数据存储于索引中,索引是具有类似特性的文档的集合。
例如 : 一个商品索引(Folder),里面可能就存放了所有的商品数据 (document)
关系型数据库中的数据库(DataBase),等价于ES中的索引(Index)
类型 (Type)
类型类似于传统库中的表,类型是索引内部的逻辑分区,类型就是为那些拥有相同的域的文档做的预定义。
例如 : 商品分很多种类,每个种类的document的field可能不太一样(日化商品type,电器商品type,生鲜商品type )
一个数据库下面有N张表(Table),等价于1个索引Index下面有N多类型(Type)
文档 (Document)
文档是Lucene索引和搜索的原子单位(es中最小数据单元),它是包含了一个或多个域的容器,基于JSON格式进行表示。
存入索引库原始的数据。比如每一条商品信息,就是一个文档
字段 (Field)
文档中的属性
1个Type由多个文档(Document)和多Field组成。
映射 (Mapping)
Mapping定义索引下的Type的字段处理规则,即索引如何建立、索引类型、是否保存原始索引JSON文档、是否压缩原始JSON文档、是否需要分词处理、如何进行分词处理等
对应关系型数据库里的(约束)schema定义了表、每个表的字段,还有表和字段之间的关系
shard(分片),replica(副本)
分片实现了集群的分布式存储,副本实现分布式处理及冗余功能。
- shard有两种类型 : primary(主) 和 replica(副)
- Replica shard 为 primary shard的副本,默认为一个,用于冗余数据及提高搜索性能
分片:将索引内部的数据分布式存储于多个节点中(索引数据分割储存),称为分片
副本:副本(Replica shard)是从主分片(primary shard)那里复制过来,为分片或节点失败时提供高可用性,副本允许用户扩展你的搜索量或吞吐量,因为搜索可以在所有副本上并行执行
每个人理解方式不同,大致了解即可!
Thanks!!