有了ElasticSearch为什么还要用MySQL?-这篇文章告诉你

首先是对于标题的回答:因为ElasticSearch不支持事务!

什么是ElasticSearch?

ElasticSearch是一个分布式,高性能,高可用,可伸缩,RESTful风格的搜索和数据分析引擎,是一款近实时的全文搜索引擎,从添加数据到搜索只有1秒的延迟,查询是实时的,这么强大的功能源于它的数据结构:倒排索引.但是ES是不支持事务的

何为全文搜索?

全文搜索是指计算机索引程序通过扫描文章中的每一个词,对每一个词都建立一个索引,并记录该词在文章中出现的次数(频率)和位置,当用户查询的时候,检索程序就根据事先建立的索引进行查找,并将查找的结构返回给用户.

何为倒排索引?

倒排索引是帮助ES找到目标数据的数据结构,也就是各种查询都是从倒排索引里面查询的,需要注意的是这里的索引并不是MySQL数据库里面的索引

倒排索引里面重要的元素有四个:词条,文档ID,频率和位置

词条:数据存在索引库中是需要分词的,这也是ES查询的快的原因之一,有很多分词器可以使用

文档ID:指的是这个词条所在的那一行的ID

频率:频率指的是这个词条出现的次数

位置:位置指的是这个词条出现在哪个具体的位置

试想,你一篇文章的数据都一个一个分词放在了库里,等你搜索的时候要找到这个词不就是简简单单的事儿吗?

为什么不用MySQL实现全文搜索?

MySQL是传统的关系型数据库,是当下web应用开发中最流行的关系型数据库.是支持事务的!但是MySQL也是有缺点的,如果需要全文进行模糊搜索,MySQL性能是非常低的.例如如下场景:

假如有一张手机信息表,里面有1亿的数据,我想要在从中搜索我想要的手机,比如"华为手机""1万元以下",如果用MySQL实现的话可能会这样写:select * from phone where phone_brand like "%关键词%".这样做理论上是可以查到相关数据的,但是如果我这时候想换个说法,换成"1万元以下"和"华为手机",只要调换个顺序,Like关键词就匹配不到了.而且LIKe是全表扫描的操作,数据量大的情况下这是非常消耗性能的.这时候就需要用到ElasticSearch来解决

ElasticSearch和MySQL在工作中的应用场景:先保存一份数据到MySQL,再保存一份到ElasticSearch,在ES中搜索

为什么ElasticSearch这么厉害不能取代MySQL?

MySQL虽然在数据全文检索方面显得有些力不从心,但是因为它的事务功能特性,可以保证不会出现脏数据.而ES并不支持事务,所以不是很适合存储原始数据.所以在工作中都是两个一起使用,一方面利用MySQL保证原始数据的安全性,另一方面利用ElasticSearch来进行全文搜索.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值