MySQL 只能作小项目?

松哥上学那会,不少人对 MySQL 有一些偏见,偏见主要集中在如下几方面:数据库

  1. MySQL 不支持事务(事实上 MyISAM 有表锁,可是效率比较低)缓存

  2. MySQL 存储的数据量比较小,适合小项目,大项目仍是得上 Oracle、DB2 等架构

这么多年过去了,松哥本身在开发中一直是以 MySQL 为主,我以为我有必要说两句公道话了。并发

公道话

第一个问题

关于第一个不支持事务的问题,这有必定的历史缘由。MySQL 从设计之初,存储引擎就是可插拔的,容许公司或者我的按照本身的需求定义本身的存储引擎(固然,普通的公司或者我的实际上是没有这个实力的)。MySQL 自研的使用较广的存储引擎是 MyISAM ,MyISAM 支持表锁,不支持行锁,因此在处理高并发写操做时效率要低一些,另外 MyISAM 也不支持外键(虽然如今实际项目中外键已经用的比较少了)。app

可是这个问题并不是无解。这就不得不说 MySQL 中另一个大名鼎鼎的存储引擎 InnoDB 了。分布式

InnoDB 存储引擎是由一家位于芬兰赫尔辛基的名为 Innobase Oy 的公司开发的,InnoDB 存储引擎的历史甚至比 MySQL 还要悠久。ide

InnoDB 刚刚开发的时侯,就是做为一个完整的数据库来开发的,所以功能很完备。开发出来以后,创始人是想将这个数据库卖掉的,可是没有找到买家。微服务

后来 MySQL2.0 推出后,这种可插拔的存储引擎吸引了 Innobase Oy 公司创始人 Heikki Tuuri 的注意,在和 MySQL 沟通以后,决定将 InnoDB 做为一个存储引擎引入到 MySQL 中,MySQL 虽然支持 InnoDB ,可是实际上仍是主推自家的 MyISAM。高并发

可是 InnoDB 实在太优秀了,最终在 2006 年的时侯,成功吸引到大魔王 Oracle 的注意,大手一挥,就把 InnoDB 收购了。工具

MySQL 主推自家的 MyISAM ,日子过得也很惨淡,最终在 2008 年被 sun 公司以 10 亿美圆拿下,这个操做巩固了 sun 在开源领域的领袖的地位,但是一直以来 sun 公司的变现能力都比较弱,最终 sun 本身在 2009 年被 Oracle 收入囊中。那会松哥还在读高中,某一天吃午餐的时侯,餐厅的电视机上播放央视的午间新闻,看到了这条消息,如今还有一些印象。

Oracle 收购 sun 以后,InnoDB 和 MySQL 就都成了 Oracle 的产品了,这下整合就变得很是容易了,在后来发布的版本中,InnoDB 慢慢就成为了 MySQL 的默认存储引擎。在最新的 MySQL8 中,元数据表也使用了 InnoDB 做为存储引擎。

InnoDB 存储引擎主要有以下特色:

  1. 支持事务

  2. 支持 4 个级别的事务隔离

  3. 支持多版本读

  4. 支持行级锁

  5. 读写阻塞与事务隔离级别相关

  6. 支持缓存,既能缓存索引,也能缓存数据

  7. 整个表和主键以 Cluster 方式存储,组成一颗平衡树

  8. ...

固然也不是说 InnoDB 必定就是好的,在实际开发中,仍是要根据具体的场景来选择究竟是使用 InnoDB 仍是 MyISAM 。

因此第一个问题不攻自破。

第二个问题

第二个问题确实是一个硬伤。

你要是拿 MySQL 和 Oracle 比,确定是要差一点点感受。毕竟一个免费一个收费,并且收费的还很贵。可是这个问题并不是无解。

相信不少小伙伴都听过国内不少大厂都使用了 MySQL 来存储数据。大厂用 MySQL ,是由于他们有能力研发出本身的存储引擎,小厂通常没有这个实力,无法去研发出本身的存储引擎,可是 Oracle 又用不起,那么怎么办呢?

这几年兴起的分布式数据库中间件恰好能够很好的解决这个问题。Java 领域,相似的工具不少,例如 Sharding-JDBC 、MyCat 等,经过这些工具,能够很好的实现数据库分库分表,以及数据表的动态扩展、读写分离、分布式事务解决等。有了这些工具,极大的提升了 MySQL 的应用场景。

另外一方面,近些年流行微服务,这不是单纯的炒概念,微服务架构将一个大的项目拆分红不少个小的微服务,各个微服务处理本身很小的一部分事情,这更符合人类分工协做的特色。在微服务架构中,咱们对大表的需求、对多表联合查询的需求都会有所下降,MySQL 也更具用武之地。

所以,第二个问题也是能够解决的。

据松哥了解,互联网公司使用 MySQL 仍是比较多的,传统软件公司,可能会更青睐 Oracle 等数据库。

不过话说回来,云计算,也是将来一个方向。

结语

为何要写这篇文章呢?由于松哥打算出几篇文章给你们介绍一下分布式数据库中间件 MyCat 和 Sharding-JDBC 的用法,有了这些分布式数据库中间件,就可让你的 MySQL 真正具有能够媲美大型数据库的能力。本文算是一个引子吧。

后面松哥就先更新 MyCat 。

转自 :https://mp.weixin.qq.com/s/bcyjBgEqg6Or5zdi4jHaiA

相关文章
相关标签/搜索