首先我们要知道的一点就是Mysql是使用C和C++开发的,而elasticsearch是用java语言开发的。
他们其实都含有存储数据的功能,所以我们可以理解他们都是一个数据库。
由于早期原因,很多数据库厂商都借鉴了关系形数据库的模式,也就是库到表到字段,所以在早期的es中(5.X)他们对应的关系是这样的:
Elasticsearch: index --> type --> doc --> field MySQL: 数据库 --> 数据表 --> 行 --> 列
但是到了7.X之后就彻底废除了type,具体的原因可以参考
Elasticsearch 为何要在 7.X版本中 去除type 的概念
所以5.x之后添加数据都是用以下的方式进行添加
POST index/_doc
没错,我们可以直接使用postman对其进行操作
这样就大大加深了可操作性,因为我们操作数据库都是使用sql去进行操作的,这使得我们在编写代码的时候都要使用类似于java的JDBC技术去连接数据库,而我们在操作es的时候可以直接通过http请求去调用es的api,这使得他们与代码之间的自由度也就更高。
但是这样也带来了很多的弊端,就是会导致你存储在es中的数据并不安全,任何人在不知道账号和密码的前提下都能操控你的es,甚至可以直接删库!!所以安全成了一个很大的问题:
Elasticsearch 如何安全加固
现在我们来看一下他们的查询速度如何
在数据量一致的情况下我们看到mysql的执行时间为33毫秒
同意是在es中查询23条数据,我们可以看到速度是5毫秒!
速度整整提升了6倍!!
这里就要归根于他们的底层索引结构了,es的底层索引结构是倒序索引,而Mysql中innoDB底层使用的是B+索引,所以这就决定了这两个的底层搜索方式就不同,这也印证了es确实是为了搜索而生的口号:
you know ,for search
但是我们我们要知道mysql是关系型数据库,es是非关系型数据库,所以二者还是有很大的差别,各自有各自的场景,所以大家根据实际的情况去取舍即可
如果你不知道他们的安装,可以参考我的教程:
Linux安装ElasticSearch以及Ik分词器(图文解说详细版)
Linux安装Mysql5.7(图文解说详细版)