一、ElasticSearch 基础概念
1.1、文档(document)
elasticsearch 是面向文档存储的,可以是数据库中的一条商品数据,也可以是订单数据... 这些东西都会被序列化成 json 的格式,存储在 es 中.
比如前面提到的商品表,里面有 id 、title 、price 这些数据,最后都会被序列化成 json 的格式进行存储.
1.2、索引(index)
索引就是相同类型文档的集合。这就相当于是 MySQL 中的表一样,而文档就是表中的每一行数据.
1.3、映射(mapping)
这里的映射就是对文档字段的约束,比如你的字段名字是什么,数据类型是字符串,还是数字啊. 这就类似于 mysql 中的约束一样.
Ps:所以这我们不难看出,这里 es 的概念和 mysql 之间有一些相似关系,下面我们就来对比一下.
二、对比 mysql
2.1、概念对比
一下数据,第一列为 mysql 、第二列为 es.
- 表 => 索引:索引,就是文档的集合,类似于数据库中的表.
- 行 => 文档:文档,就是一条条数据,类似数据库中的每一行数据,但是文档的格式是 json 格式.
- 列 => 字段:字段,就是 json 文档中的字段,类似于数据库中的列.
- 约束 => 映射:映射是索引中文档的约束,例如字段类型约束(数据类型).类似于数据库中的表结构.
- SQL => DSL:DSL 是 es 中提供的 json 风格的请求语句,用来操作 es,实现 CRUD.
2.2、适用场景对比
2.2.1、那是不是说,有了 es 之后,就可以完全替代我们的 mysql 了呢?
并不可以啊,因为他们两擅长的事情是不一样的~~
- mysql:更擅长的是事务的操作,事务里面有原子性、持久性、一致性、隔离性这些,因此可以保证数据的安全性、持久化存储、数据一致.
- es:es 中就没有事务的概念了,他更擅长的数据的搜索分析和运算.
例如,现在要做一个下单付款这样的业务,对事务的要求很高,因此就应该使用 mysql 去存储;如果你先在做到是一个商品搜索,或者是页面搜索,这种搜索比较复杂(比如用户通过关键词搜索所有相关信息),那么就需要使用 es 去做.
2.2.2、他们两之间有什么关系
他们在系统架构中是一种互补的关系,比如我们的用户做一个商品订单的搜索,因为 es 的搜索能力更强,所以这里使用 es 进行搜索,那么也意味着,es 这边也要有数据,那怎么确保两边都有数据呢?一般写数据,是写在 mysql 中的(为了数据的安全性以及持久化等特性,mysql 用来存储全量数据),并且 mysql 也会将数据同步给 es,从而实现数据的双写,将来也就是一个互补的效果了.