前言
根据一段时间,断断续续的学习之后,对Elasticsearch的已经有了一定的初步了解。因此,我们就对在前文的了解上,对Es有了更加全面的看法。
我们为什么要用ES
随着对ES的接触的加深,我们便会发现。其实,ES与Mysql等持久化数据库等等,如果从存储本质上来看的话。应该是没有本质上的区别的。我们进行的操作,也只有增删查改四个基本操作。ES也不会对我们的数据,默认的进行十分漂亮的操作,帮助我们完成十分漂亮的操作。
(PS:目前为止,ES帮助最大的操作,其实仅仅只是加上高亮字段,但是这样的操作,我们用代码来实现并不是十分复杂的操作)
目前为止,ES最大的优势主要有两点:
-
速度: 在我现在的模拟环境之中,数据虽然只有十万条,但是也足以说明问题。
用图来说话:
上面那张图,在MYSQL环境之下。MYSQL的查询速度,一般在于0.4s 到 0.5 秒之间。
那么在ES环境之下呢?会快多少呢
虽然在目前情况之下,还不知道会造成ES,查询波动的条件是什么,但是在于当前同样的环境之下,ES的查询一般在40-60ms之间,最慢也不过在于 100ms左右。
也就是说在当前数据量下,ES的速度最慢也比MYSQL快将近四倍,最快能快上将近十倍!!!这也难怪各大厂会要求使用上ES,而且最重要的是在大数据的环境下。MYSQL的查询速度会受数据量的大小而受波动(这里应该打上一点问号,我能确定但是没办法肯定。但是,在只有百条数据的数据表内进行查询,我只用了0.02s),便是这个理由,我们才需要用上ES
(应该说实在10w左右数据量,我目前还拿不到如此之多的数据,还没有掌握自动化爬虫的技能)
2.查询排序
在搜索得到结果的过程之中,ES 或根据 查询的“得分”来对结果进行插叙,这点也是十分重要的。这里的排序,我还没有完全摸透,所以也无法多说什么。
只是觉得虽然吧…MYSQL也并非做不到一定的排序结果,但是这个机制,的确能让我们在查询上剩下不少功夫。
3.我们什么时候应该使用ES
根据我上面的一顿分析,或者说一顿彩虹屁之后,大家不觉得十分的兴奋嘛??是不是感觉ES就像一盏明灯一样。
但是,我们不凡想想,那既然如此。我们不可以用MYSQL等持久化数据库为什么不会完全被ES代替呢。
他们既然都能做到数据存储,都能做到数据增删查改。那既然如此的方便。为何,我们不直接使用ES。完全抛弃MYSQL,这样我们就不需要做数据迁移等等,一大堆心烦意乱的操作了。他们甚至在存储的空间之上,甚至都不会有太大的区别。
是啊,既然如此,我们为何不完全代替MYSQL呢?
当然,答案也很简单,成本问题。ES吃内存啊,一般我们在一般的服务器上部署,最经常遇到的问题就是,内存爆炸,直接把ES给炸挂了。
而且,在实际环境之下。在没有十分庞大的数据环境下,0.4与0.04的差别虽然有十倍差别,但是有什么差别呢??一瞬间和小小的一瞬间,还不是差不多
而且,在大部分项目一期上线,除非是一线大厂。大部分的项目都只是试下水,而且一试水大部分就是沉了… 最多实在撑不住,算了,我们加一个缓存算了这样的情况…
因此,除了在面试的时候,面试官总爱放一些彩虹屁之外。ES是很少机会上场的,毕竟百度,天猫,京东这样的项目又不是天天有。
你给一个刚刚起步,只有四五家分店的奶茶店,能手机点个餐啊什么的,MYSQL足够了…我部署一个ES,别人也报销不起啊