MySQL 还是 ES

Posted Python之禅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 还是 ES相关的知识,希望对你有一定的参考价值。

周末继续闲扯

先问大家一个问题,在涉及到系统架构或者技术选型时,通常会面临很多选择,如果让你来做选型,你会选择什么方案,比如数据库你会选什么? 


我这么问其实是设有陷阱的,但凡脱离了实际业务场景谈架构都是耍流氓。


开源数据库产品近10年来百花齐放,10年前还是关系型数据库的天下, 因为他们有天然优势,一通用,二保证了数据一致性,当然缺点也不少。


随着互联网的高速发展,业务也随之变得复杂,数据量呈指数级增长,所以近年来诞生了很多非关系型数据库,比如k-v类型的redis,文档数据库 mongodb, elasticsearch,等等。


最近我遇到一个问题就是某个业务数据量已经到了千万级别, 还在持续增长,因为数据库用的是 mysql,在可以遇见的一段时间后,这个表将面临数据查询慢的性能瓶颈。


千万级数据量当然不是简单列加个索引就能解决问题的,毕竟重新建索引就是个非常缓慢的过程。


所以不得不做分表分库处理,虽然MySQL已经有很多成熟的分表分库的中间件,但好像针对python的并不多。 分表分库麻烦,是垂直分还是水平分,根据什么字段来分,都是要考虑的问题,要改动的业务逻辑代码也不少


这个时候MySQL在扩展性方面就并没有那些NoSQL灵活了,天然就是为分布式而生的mongodb,elasticsearch 就不会遇到这样的问题,真遇到了瓶颈只要怼机器就行。


所以,最近准备把这块业务迁移到elasticsearch。


虽然说 elasticsearch 是为了解决全文检索问题诞生的,但毫不影响它用来做数据存储,因为他本质上是一个分布式数据库。


用elasticsearch做数据存储,这样数据的扩展性问题也能得到很好解决,关键是使用非常灵活,不像操作MySQL一样,操作表结构麻烦的一逼,有时不得不停掉服务来升级,而 ElasticSearch 完全没这样的烦恼。


是不是一开始我就应该用ElasticSearch来做数据存储呢? 这个就仁者见仁智者见智了。早期业务量没那么大,当然是怎么简单怎么来,当前的架构能支撑未来一到两年的发展就完全足够了。谁知道能不能活过两年呢?


好的架构都是演进过来的,不是闷头设计出来的。

以上是关于MySQL 还是 ES的主要内容,如果未能解决你的问题,请参考以下文章

ES6还是ES2015?

docker搭建ElasticsearchKibanaLogstash 同步mysql数据到ES

ES6 JavaScript - const inside 还是 let outside 循环?

熊猫的英语是用s还是es

为啥es可以登录进去还是无法认证

ES11来了,有些新特性还是值得一用的!