1引言

1.1 编写目的

本文的主要目的是通过对当前项目中使用的各种版本的数据库进行比较,分析各自特性和稳定程度,最终推荐合适的版本作为今后的标准数据库。

1.2 背景

当前,部门负责管理维护的现网使用数据库有Oracle、MySQL、PostgreSQL

等;由于使用的数据库大小版本各异,不利于规范管理,需要制定统一的标准。

1.3 参考资料

2使用分析

2.1 使用概况

在线版本

使用率

MySQL5.1

较高

MySQL5.5

较高

MySQL5.6

较高

MySQL5.7

较高

Oracle/PostgreSQL

表1

2.2 常用系统分析

从统计结果看,使用较多是MySQL,标准数据库选型将从MySQL中挑选。MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策(本词条“授权政策”),它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。

3特性分析

3.1 版本概况

MySQL的小版本较多,5.1/5.5有40多个,5.6有24个,5.7有8个;从稳定性来看不推荐最新的版本,5.7暂不考虑,主要分析5.1、5.5、5.6版本。

Release

最后更新

5.1.72

2013-9-11

5.5.45

2015-6-28

5.6.26

2015-7-15

5.7.8

2015-7-21

表2

3.2 主要特性

OS版本

特性

5.1

表格和索引的分区特性 —— MySQL 5.1支持5种形式的水平数据分区:range、hash、key、list和复合composite分区(子分区)。通过表格和索引数据的分区,可做到仅仅是对需要的相关数据分区进行扫描,而不是扫描整个的表格和索引,因此就获得了更快速的查询响应。而且,有了分区特性,许多存储和其他维护操作变得更加容易和快速。

基于单元(row-based)的复制和混合复制特性 —— 这是MySQL 5.1内提供的两个新的复制选项。“基于单元的复制”是复制主服务器和从服务器之间的数据变化(而不是实际的SQL语句),而“混合复制”采用的或是基于语句复制,或是基于单元的复制,这取决于一个个的SQL操作  —— 对于应用来讲,这就形成并保持了最有效的和最安全的复制机制。

事件调度特性 —— 这是一个新的工具,它可让开发者和经营管理自动调度数据库服务器上要执行的、通用的基于SQL的循环(recurring)任务。这一特性比起Linux或Unix中的CRON,或Microsoft Windows的任务调度程序,可对数据库特定的任务提供更大的支持。

新的MySQL Query Analyzer (查询分析器) —— 享受优惠的MySQL Enterprise订购项目将提供Sun的这一新的MySQL Query Analyzer工具,该工具通过监控查询性能来精确定位和修改有问题的SQL 代码,可以大大改善MySQL数据库应用的速度和正常运行时间。

5.5

1. 默认存储引擎更改为InnoDB

InnoDB的数据恢复时间从过去的一个甚至几个小时,缩短到几分钟。InnoDB Plugin 支持数据压缩存储,节约存储,提高内存命中率,并且支持adaptive flush checkpoint, 可以在某些场合避免数据库出现突发性能瓶颈。Multi Rollback Segments: 原来InnoDB只有一个Segment,同时只支持1023的并发。现已扩充到128个Segments,从而解决了高并发的限制。

2. 多核性能提升

Metadata Locking (MDL) Framework替换LOCK_open mutex (lock),使得MySQL5.1及过去版本在多核心处理器上的性能瓶颈得到解决,官方表示将继续增强对MySQL多处理器支持,直至MySQL性能 “不受处理器数量的限制”

3. 复制功能(Replication)加强

MySQL复制特性是互联网公司应用非常广泛的特性,作为MySQL最实用最简单的扩展方式,过去的异步复制方式已经有些不上形势,对某些用户 来说“异步复制”意味着极端情况下的数据风险,MySQL5.5将首次支持半同步(semi-sync replication)在MySQL的高可用方案中将产生更多更加可靠的方案。另外Slave fsync tunning;Relay log corruption recovery和Replication Heartbeat也将实现

4. 增强表分区功能

5. Insert Buffering 如果在buffer pool中没找到数据,那么直接buffer起来,避免额外的IO;Delete & Purge Buffering 跟插入一样,如果buffer pool中没有命中,先buffer起来,避免额外的IO。

6. Support for Native AIO on Linux

以上的特性在MySQL 5.5的社区版当中都将包括,在MySQL企业版当中,除以上更新之外,Oracle还加强了更多实用的企业级功能,包括:

实现在线物理热备

MySQL Enterprise Monitor 2.2 & Oracle Enterprise Monitor

MySQL Workbench

关于未来的重要提醒:Oracle的管理工具,MySQL也将能够使用

5.6

更好的性能和可扩展性

改进InnoDB存储引擎所带来更好的交易吞吐量

改良的优化所带来更好的查询执行时间和诊断能力

在线DDL /架构操作所带来更好的应用程序可用性

通过Memcached的API以NoSQL访问InnoDB所带来的更好的开发速度

改进复制技术所带来的高性能和能自行修复的集群部署

改进的Performance Schema所带来的更好的侦测和监测能力

改进的安全控制,使您部署应用程序时不需担心

其他重要的增强功能

5.7

更好的性能:对于多核CPU、固态硬盘、锁有着更好的优化,每秒100W QPS已不再是MySQL的追求,下个版本能否上200W QPS才是吾等用户更关心的;

更好的InnoDB存储引擎:内容太多,就等Inside君的《MySQL技术内幕:InnoDB存储引擎》第3版吧;

更为健壮的复制功能:复制带来了数据完全不丢失的方案,传统金融客户也可以选择使用MySQL数据库。此外,GTID在线平滑升级也变得可能;

更好的优化器:优化器代码重构的意义将在这个版本及以后的版本中带来巨大的改进,Oracle官方正在解决MySQL之前最大的难题;

原生JSON类型的支持:文档数据库们已经哭晕在厕所了吧;

更好的地理信息服务支持:InnoDB原生支持地理位置类型,支持GeoJSON,GeoHash特性;

新增sys库:这是Inside君最爱的功能(虽然5.6也可以支持),但是知道的人好像不怎么多,以后这会是DBA访问最频繁的库。

表3

4 小结

4.1 调研结果

  1. MySQL优点:
    支持5000万条记录的数据仓库
    适应于所有的平台
    是开源软件,版本更新较快
    性能很出色。纯粹就性能而言,MySQL是相当出色的,因为它包含一个缺省桌面格式MyISAM。MyISAM数据库与磁盘非常地兼容而不占用过多的CPU和内存。MySQL可以运行于Windows系统而不会发生冲突,在UNIX或类似UNIX系统上运行则更好。你还可以通过使用64位处理器来获取额外的一些性能。因为MySQL在内部里很多时候都使用64位的整数处理。
    价格便宜
  2. 缺点:缺乏一些存储程序的功能,比如MyISAM引擎联支持交换功能

4.2 结论

1.挑选原则:

生产系统必须使用稳定版本;业界通常做法是不使用最新版本,优先上一个版本。

综合调研结果来看,MySQL 5.7较新不稳定,无特殊需求不考虑;5.1/5.5/5.6这3个版本从稳定、优化来看,建议使用5.6版本,该版本兼顾稳定性、性能。

MySQL版本调研的更多相关文章

  1. 关于阿里云centos 2.6下手机表情输入后无法保存到mysql数据库的问题调研及mysql版本从5.1升级到5.7的全过程纪要

    近日在开发手机app的评论功能时,输入表情文字,保存后提示数据库保存失败.错误日志片段如下 caused by: java.sql.SQLException: Incorrect string val ...

  2. 关于如何查看mysql版本及其端口号

    关于如何查看MySQL版本: 方法一: 进入mysql cmd, status; 1 status; 将显示当前mysql的version的各种信息. 方法二: 还是在mysql的cmd下,输入: s ...

  3. Centos 升级MySQL版本或者Yum安装Mysql5.6

    Centos 升级MySQL版本或者Yum安装Mysql5.6 1.从MySQL Yum仓库下载最新的rpm文件:http://dev.mysql.com/downloads/repo/yum/Cen ...

  4. xampp版本和具体的php,mysql版本的对应

    在国外网上查找到具体的xampp版本与php,mysql版本的对应关系,特此记录.以便需要的人使用.原文链接如下: http://code.stephenmorley.org/articles/xam ...

  5. CentOS6.x升级MySQL版本5.1到5.6

    CentOS6.x升级MySQL版本5.1到5.6 分类: Web MySQL 2014-08-04 11:22 2813人阅读 评论(1) 收藏 举报 mysql云服务器升级centos6 有一些虚 ...

  6. 升级 phpStudy 中 MySQL 版本至 5.7.17

      由于本地用的集成环境是 phpStudy 2016,没有找到升级 MySQL 版本的选项,所以自己升级一下. 从官网上下载高版本的 MySQL :https://dev.mysql.com/dow ...

  7. 51ak带你看MYSQL5.7源码3:修改代码实现你的第一个Mysql版本

    从事DBA工作多年 MYSQL源码也是头一次接触 尝试记录下自己看MYSQL5.7源码的历程 目录: 51ak带你看MYSQL5.7源码1:main入口函数 51ak带你看MYSQL5.7源码2:编译 ...

  8. MYSQL.版本查看-LINUX

    MYSQL.版本查看-LINUX 方式1: 不需登录mysql,登录Linux服务后,执行如下指令: # mysql -V 注意: 那个是大写的V,如果使用小写的v,在root没有设置密码的情况下,就 ...

  9. MySql 版本

    MySql 版本: netformwork 2.0 netformwork 4.0

随机推荐

  1. 黄聪:wordpress在IIS8中设置默认编码(windows2012服务器)

    web.config中配置 <?xml version="1.0" encoding="UTF-8"?> <configuration> ...

  2. (WPF, MVVM) Slider Binding.

    对于Button的Command的绑定可以通过实现ICommand接口来进行,但是Slider并没有Command属性. 另外如果要实现MVVM模式的话,需要将一些Method和Slider的Even ...

  3. MyEclipse9中的不伤眼修改、FreeMarker插件、JQuery提示插件、全屏(FullScreen)插件的安装

    ============下载相关附件===================== http://files.cnblogs.com/fhtwins/eclipse-fullscreen_1.0.7.zi ...

  4. BIP_开发案例05_BI Pubisher标准做法以BIP.XML为数据源以BIP.RTF为模板的简单例子(案例)

    2014-05-31 Created By BaoXinjian

  5. NeHe OpenGL教程 第二十六课:反射

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  6. python(4) 小程序-异步加载

    注:处理异步加载需要模拟浏览器登陆,然后用import json,用loads解析 例如:

  7. imageView--转-如何代码动态的获取和设置ImageView的宽度和高度?

    11- 12- 13-android获取图片原始长宽; ========= 11--国内某金融企业的一道面试题:如何在代码中获得一个ImageVIew的高度和宽度? 相信很大一部分人,会直接想到用im ...

  8. sizeof 和 strlen 区别

    Sizeof与Strlen的区别与联系 一.sizeof    sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型. ...

  9. mac下使用github

    提起github相信大家都不会陌生,在这里就不再赘述了.作为开源代码库以及版本控制系统,使用好了确实会非常受益,再说的势利点,你找工作时给面试官说你经常维护自己的技术博客和github,相信你给他的印 ...

  10. JAVA中String与StringBuffer的区别

    String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结. 在java中有3个类来负责字符的操作. 1.C ...