1. 概述

SQL (Structured Query Language),结构化查询语言,用来与多种数据库建立联系,根据ANSI(美国国家标准协会)的规定,SQL为RDBMS(关系型数据库)的标准语言。

关系型数据库:是指采用了关系模型来组织数据的数据库。简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。

非关系型数据库:非关系型数据库严格上说不是一种数据库,是一种数据结构化储存方法的集合。

1.1. Oracle数据库

中文译作甲骨文;其诞生早、结构严谨、高可用、高性能等特点,使其广泛应用于传统数据库。

1.2. IBM DB2 数据库

DB2 超大型,与Oracle的定位和架构非常相似。是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本。

DB2主要应用于大型应用系统,具有较好的可伸缩性,可支持从大型机到单用户环境,应用于所有常见的服务器操作系统平台下。

DB2提供了高层次的数据利用性、完整性、安全性、可恢复性,以及小规模到大规模应用程序的执行能力,具有与平台无关的基本功能和SQL命令。

DB2采用了数据分级技术,能够使大型机数据很方便地下载到LAN数据库服务器,使得客户机/服务器用户和基于LAN的应用程序可以访问大型机数据,并使数据库本地化及远程连接透明化。

DB2以拥有一个非常完备的查询优化器而著称,其外部连接改善了查询性能,并支持多任务并行查询。

DB2具有很好的网络支持能力,每个子系统可以连接十几万个分布式用户,可同时激活上千个活动线程,对大型分布式应用系统尤为适用。

1.3. MYSQL 数据库

MySQL的最初的核心思想,主要是开源、简便易用。

由瑞典 MySQL AB 公司开发,于1995年发行第一个内部发行版本。到1998年,MySQL已经可以支持10中操作系统,其中就包括win平台。但依然问题多多,如不支持事务操作、子查询 、外键、存储过程和视图等功能。

MySQL的爆发实际是在01、02年,尤其是02年发布的4.0 Beta版,正式选定InnoDB作为默认引擎,对事务处理能力及数据缓存能力有了极大的提高。同年4.1版开始支持子查询,至此MySQL终于蜕变成一个成熟的关系型数据库系统。

05年的5.0版本又添加了存储过程、服务端游标、触发器、查询优化以及分布式事务功能,但同年InnoDB被Oracle收编。

08年,MySQL被Sun收购.

09年,Oracle收购Sun和MySQL。

由于MySQL的早期定位,其主要应用场景就是互联网开发。基本上,互联网的爆发成就了MySQL,LAMP架构风靡天下。

由于MySQL更多的的追求轻量、易用,以及早期的事物操作及复杂查询优化的缺失,在传统的数据库应用场景中,份额极少。

MySQL 软件采用双授权政策,分为社区版和商业版,其体积小、速度快、总体拥有成本低,开放源码。

1.4. MS SQL server数据库

SQL Server最初是由Microsoft, Sybase and Ashton-Tate三家公司为OS/2操作系统(IBM公司)开发的。随着OS/2项目的失败,大家也分道扬镳。

Microsoft转向自己的win操作系统,作为windows NT软件方案的一部分。而Sybase则专注于Linux/Unix方向的数据库开发。

MS SQL Server 是Microsoft公司推出一套产品,它具有使用方便、可伸缩性好、与相关软件集成程度高等优点,逐渐成为Windows平台下进行数据库应用开发较为理想的选择之一。

它提供强大的可视化界面、高度集成的管理开发工具,在快速构建商业智能(BI)方面颇有建树;且SQL Server与其它数据库,如Access、FoxPro、Excel等有良好的ODBC接口,可以把上述数据库 转成SQLServer的数据库。

2. 各数据库的比较

2.1 平台开放性

SQL Server:

  • 在Windows下运行; 一般同Microsoft产品.net平台一起搭配使用。
  • SQL server2019通过开源支持,可以灵活选择语言和平台。在支持 Kubernetes 的 Linux 容器上或在 Windows 上运行 SQL Server。

Oracle:在所有主流平台(包括windows)上运行; 完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持。

DB2: 能在所有主流平台上运行(包括windows)。最适于海量数据。

MYSQL:在所有主流平台(包括windows)上运行;

2.2 安全性

Oracle/DB2 的安全认证获得最高认证级别的ISO标准认证,而SQL Server没有获得什么安全认证;

2.3 性能

Oracle:性能最高,保持windows NT 下的TPC-D和TPC-C的世界记录。

DB2:适用于数据仓库和在线事物处理性能较高。 客户端支持及应用模式 。

SQL Server:多用户时性能不佳。

2.4 客户端支持及应用模式

SQL Server:C/S结构,只支持windows客户,可以用ADO,DAO,OLEDB,ODBC连接。

Oracle 多层次网络计算,支持多种工业标准,可以用ODBC、JDBC、OCI等网络客户连接。

2.5 费用

Oracle、DB2 和 SQL Server是商业收费的;

MySql 是开源免费的;

Oracle和My Sql是甲骨文的产品,SQL Server是微软的产品;

Oracle和IBM DB2都是超大型关系数据库,SQL Server是大型关系数据库,而My Sql是中小型关系数据库;

2.6 面向对象

oracle:主流的大型数据库,用于中大型网站开发,商业收费;

sql server :一般做中小型数据库,用于中小型网站,以及个人使用 ,商业收费;

mysql:一般做中小型数据库,用于中小型网站,以及个人使用,开源免费;可配合php,perl, 一般作网站的数据库。

db2: 对大型分布式应用系统尤为适用

2.7 操作简便

SQL Server :操作简单,但只有图形界面.

Oracle :较复杂, 同时提供GUI和命令行,在windowsNT和unix下操作相同

DB2 :操作简单,同时提供GUI和命令行,在windowsNT和unix下操作相同

2.8 安装

Oracle:安装难度中等,安装包比较大,占内存较多,图形界面得借助第三方工具。且Oracle安装有3G左右,且使用时Oracle占用特别大的内存空间和其他机器性能;

Sql Server:安装难度较大,出错要删除注册码,还不行就得重装系统,安装包也比较大,占内存中等,有完整的图形界面。

Mysql:安装难度易,安装包小,占内存较小,图形界面得借助第三方工具

2.9 架构

执行的区别,主要还是架构的区别。架构导致了相同SQL在执行过程中的解释、优化、效率的差异。

(1)Oracle

Oracle: 数据文件包括:控制文件、数据文件、重做日志文件、参数文件、归档文件、密码文件。这是根据文件功能行进行划分,并且所有文件都是二进制编码后的文件,对数据库算法效率有极大的提高。

由于Oracle文件管理的统一性,就可以对SQL执行过程中的解析和优化,指定统一的标准:RBO(基于规则的优化器)、CBO(基于成本的优化器) 通过优化器的选择,以及无敌的HINT规则,给与了SQL优化极大的自由,对CPU、内存、IO资源进行方方面面的优化。

(2)MySQL

MySQL:最大的一个特色,就是自由选择存储引擎。每个表都是一个文件,都可以选择合适的存储引擎。

常见的引擎有 InnoDB、 MyISAM、 NDBCluster等。但由于这种开放插件式的存储引擎,比如要求数据库与引擎之间的松耦合关系。从而导致文件的一致性大大降低。

在SQL执行优化方面,也就有着一些不可避免的瓶颈。在多表关联、子查询优化、统计函数等方面是软肋,而且只支持极简单的HINT。

(3)SQL Server

SQL Server :数据架构基本是纵向划分,分为:Protocol Layer(协议层), Relational Engine(关系引擎), Storage Engine(存储引擎), SQLOS。

SQL执行过程就是逐层解析的过程,其中Relational Engine中的优化器,是基于成本的(CBO),其工作过程跟Oracle是非常相似的。在成本之上也是支持很丰富的HINT,包括:连接提示、查询提示、表提示。

2.10 文件文件结构不同

(1)oracle的文件体系结构:

  • 数据文件 .dbf(真实数据)
  • 日志文件 .rdo
  • 控制文件 .ctl
  • 参数文件 .ora

(2)sql server的文件体系结构为:

  • .mdf (数据字典)
  • .ndf (数据文件)
  • .ldf (日志文件)

2.10 Oracle 和 MySQL 的主要区别

(1)客户端和命令窗口

Oracle:客户端和命令窗口,都是由用户决定内容-> conn user_name/password;

MySQL:客户端和命令窗口,都是由数据库决定内容-> use datebase;

都可以创建多数据库多用户,个人倾向于Oracle一个数据库中多个用户的形式,MySQL多个数据库多个用户形式(最好每个数据库对应一个用户)

(1)对事务的提交

MySQL默认是自动提交,而Oracle默认不自动提交,需要用户手动提交,需要在写commit;指令或者点击commit按钮。

(2)分页查询

MySQL是直接在SQL语句中写"select… from …where…limit x, y",有limit就可以实现分页;而Oracle则是需要用到伪列ROWNUM和嵌套查询。

(3) 事务隔离级别

MySQL是read commited的隔离级别,而Oracle是repeatable read的隔离级别,同时二者都支持serializable串行化事务隔离级别,可以实现最高级别的读一致性。

每个session提交后其他session才能看到提交的更改。

Oracle通过在undo表空间中构造多版本数据块来实现读一致性,每个session查询时,如果对应的数据块发生变化,Oracle会在undo表空间中为这个session构造它查询时的旧的数据块。

MySQL没有类似Oracle的构造多版本数据块的机制,只支持read commited的隔离级别。

一个session读取数据时,其他session不能更改数据,但可以在表最后插入数据。session更新数据时,要加上排它锁,其他session无法访问数据。

(4)对事务的支持

MySQL在innodb存储引擎的行级锁的情况下才可支持事务,而Oracle则完全支持事务。

(5)保存数据的持久性

MySQL是在数据库更新或者重启,则会丢失数据,Oracle把提交的sql操作线写入了在线联机日志文件中,保持到了磁盘上,可以随时恢复。

(6)并发性

MySQL以表级锁为主,对资源锁定的粒度很大,如果一个session对一个表加锁时间过长,会让其他session无法更新此表中的数据。

虽然InnoDB引擎的表可以用行级锁,但这个行级锁的机制依赖于表的索引,如果表没有索引,或者sql语句没有使用索引,那么仍然使用表级锁。

Oracle使用行级锁,对资源锁定的粒度要小很多,只是锁定sql需要的资源,并且加锁是在数据库中的数据行上,不依赖与索引。所以Oracle对并发性的支持要好很多。

(7)逻辑备份

MySQL逻辑备份时要锁定数据,才能保证备份的数据是一致的,影响业务正常的dml使用,Oracle逻辑备份时不锁定数据,且备份的数据是一致。

(8)复制

MySQL:复制服务器配置简单,但主库出问题时,丛库有可能丢失一定的数据。且需要手工切换丛库到主库。

Oracle:既有推或拉式的传统数据复制,也有dataguard的双机或多机容灾机制,主库出现问题是,可以自动切换备库到主库,但配置管理较复杂。

(9)性能诊断

MySQL的诊断调优方法较少,主要有慢查询日志。

Oracle有各种成熟的性能诊断调优工具,能实现很多自动分析、诊断功能。比如awr、addm、sqltrace、tkproof等。

(10)权限与安全

MySQL的用户与主机有关,感觉没有什么意义,另外更容易被仿冒主机及ip有可乘之机。

Oracle的权限与安全概念比较传统,中规中矩。

(11)分区表和分区索引

MySQL的分区表还不太成熟稳定。

Oracle的分区表和分区索引功能很成熟,可以提高用户访问db的体验。

(12)管理工具

MySQL管理工具较少,在linux下的管理工具的安装有时要安装额外的包(phpmyadmin, etc),有一定复杂性。

Oracle有多种成熟的命令行、图形界面、web管理工具,还有很多第三方的管理工具,管理极其方便高效。

(13)最重要的区别

MySQL是轻量型数据库,并且免费,没有服务恢复数据。

Oracle是重量型数据库,收费,Oracle公司对Oracle数据库有任何服务。

3. 各数据库的特点

3.1 My Sql数据库

优点:

  • (1)体积小、速度快、总体拥有成本低,开源。
  • (2)支持多种操作系统。
  • (3)是开源数据库,提供的接口支持多种语言连接操作 。
  • (4)MySQL的核心程序采用完全的多线程编程。线程是轻量级的进程,它可以灵活地为用户提供服务,而不是过多的系统资源。用多线程和C语言实现的mysql能很容易充分利用CPU。
  • (5)MySql有一个非常灵活而且安全的权限和口令系统。当客户与MySql服务器连接时,他们之间所有的口令传送被加密,而且MySql支持主机认证。
  • (6)支持大型的数据库, 可以方便地支持上千万条记录的数据库。即32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为8TB。作为一个开放源代码的数据库,可以针对不同的应用进行相应的修改。
  • (7)拥有一个非常快速而且稳定的基于线程的内存分配系统,可以持续使用面不必担心其稳定性。
  • (8)MySQL同时提供高度多样性,能够提供很多不同的使用者介面,包括命令行客户端操作,网页浏览器,以及各式各样的程序语言介面,例如C+,Perl,Java,PHP,以及Python。你可以使用事先包装好的客户端,或者干脆自己写一个合适的应用程序。
  • (9)MySQL可用于Unix,Windows,以及OS/2等平台,因此它可以用在个人电脑或者是服务器上

缺点:

  • (1)不支持热备份;
  • (2)MySQL最大的缺点是其安全系统,主要是复杂而非标准,另外只有到调用mysqladmin来重读用户权限时才发生改变。
  • (3)没有一种存储过程(Stored Procedure)语言,比如MyISAM引擎联支持交换功能。这是对习惯于企业级数据库的程序员的最大限制。
  • (4)MySQL的价格随平台和安装方式变化。Linux的My SQL如果由用户自己或系统管理员而不是第三方安装则是免费的,第三方案则必须付许可费。Unix或linux 自行安装免费 、Unix或Linux 第三方安装收费。

3.2 MS Sql server数据库:

优点:

  • 1.真正的客户机/服务器体系结构
  • 2.图形化的用户界面,使系统管理和数据库管理更加直观、简单
  • 3.丰富的编程接口工具,为用户进行程序设计提供了更大的选择余地
  • 4.与Windows NT完全集成,利用了NT的许多功能,如发送和接受消息,管理登录安全性等,SQL Server也可以很好地与Microsoft BackOffice产品集成。
  • 5.有很好的伸缩性,可以跨平台使用。
  • 6.提供决策支持的数据仓库功能,这个功能只在Oracle和其他昂贵的DBMS中才有。
  • 7.支持 OLE DB 和多种查询;
  • 8.支持分布式的分区视图
  • 9.扩展性强:当系统要提高数据库处理速度时,只要简单地增加数据库服务器就可以得到扩展。
  • 10.可维护性:当某节点发生故障时,系统会自动检测故障并转移故障节点的应用,保证数据库的持续工作。
  • 11.安全性:因为数据会同步的多台服务器上,可以实现数据集的冗余,通过多份数据来保证安全性。另外它成功地将数据库放到了内网之中,更好地保护了数据库的安全性。
  • 12.易用性:对应用来说完全透明,集群暴露出来的就是一个IP。
  • 13.为数据管理与分析带来了灵活性,允许单位在快速变化的环境中从容响应,从而获得竞争优势。从数据管理和分析角度看,将原始数据转化为商业智能和充分利用Web带来的机会非常重要。

缺点:

  • (1)开放性 :SQL Server 限制在windows上运行,开放性不好。
  • (2)伸缩性并行性 :SQL server 并行实施和共存模型并成熟难处理日益增多用户数和数据卷伸缩性有限。
  • (3)安全性:没有获得任何安全证书。
  • (4)性能 :SQL Server 多用户时性能佳 。
  • (5)客户端支持及应用模式: 客户端支持及应用模式。只支持C/S模式,SQL Server C/S结构只支持windows客户用ADO、DAO、OLEDB、ODBC连接。
  • (6)使用风险:SQL server 完全重写代码,经历了长期测试断延迟,许多功能需要时间来证明并十分兼容。

3.3 Oracle数据库:

亿级的 跨平台,安全性高。

Oracle 体系结构

(1)指数据库的组成,工作过程与原理,以及数据在数据库中的组织与管理机制

(2)oracle 服务器结构:由Oracle 数据库和Oracle 实例组成

(3)oracle 数据库的结构:包括逻辑结构和物理结构

(4)oracle 数据库的操作系统文件,即实力物理存储区

  • 路径:D:\developPrograms\Oracle\oradata\orcl
  • * 数据文件 以 dbf 结尾 信息的物理地址
  • * 控制文件 以 ctl 结尾
  • * 日志文件 以 log 结尾

(5)oracle 系统表

  • * 详细描述了表数量,表名,表的属主,表的列信息等,通常只能查看

优点:

  • 1.Oracle的稳定性要比Sql server好。
  • 2.Oracle在导数据工具sqlload.exe功能比Sql server的Bcp功能强大,Oracle可以按照条件把文本文件数据导入.
  • 3.Oracle的安全机制比Sql server好。
  • 4.Sql server的易用性和友好性方面要比Oracle好。
  • 5.在处理大数据方面Oracle会更稳定一些。
  • 6.Sql Server在数据导出方面功能更强一些。
  • 7.处理速度方面比Oracle快一些,和两者的协议有关.
  • 8.Oracle 支持大并发,大访问量,是 OLTP(On-Line Transaction Processing 联机事务处理系统)最好的工具;

缺点:

  • 对硬件要求很高
  • 价格比较昂贵
  • 管理维护麻烦
  • 操作比较复杂,需要技术含量较高。

4. 典型应用场景

关于“大型数据库”,并没有严格的界定,有说以数据量为准,有说以恢复时间为准。如果综合数据库应用场景来说,大型数据库应用有以下特点:海量数据、高吞吐量;复杂逻辑、高计算量,以及高可用性。

从这点上来说,Oracle,DB2就是比较典型的大型数据库,Sybase SQL Server也算是吧。

4.1 Oracle

Oracle的应用,主要在传统行业的数据化业务中。oracle传统,跨平台,稳定,适合OLTP,最接近数据库设计范式,一致性处理是最好的,也是最复杂的。要想用好并发挥其性能,对管理员的能力要求较高。另维护成本较高。

比如:银行、金融这样的对可用性、健壮性、安全性、实时性要求极高的业务;零售、物流这样对海量数据存储分析要求很高的业务。

此外,高新制造业如芯片厂也基本都离不开Oracle;

电商也有很多使用者,如京东(正在投奔Oracle)、阿里巴巴(计划去Oracle化)。

而且由于Oracle对复杂计算、统计分析的强大支持,在互联网数据分析、数据挖掘方面的应用也越来越多。

一个典型场景是这样的:

某电信公司(非国内)下属某分公司的数据中心,有4台Oracle Sun的大型服务器用来安装Solaris操作系统和Oracle并提供计算服务,3台Sun Storage磁盘阵列来提供Oracle数据存储,12台IBM小型机,一台Oracle Exadata服务器,一台500T的磁带机用来存储历

史数据,San连接内网,使用Tuxedo中间件来保证扩展性和无损迁移。建立支持高并发的Oracle数据库,通过OLTP系统用来对海量数据实时处理、操作,建立高运算量的Oracle数据仓库,用OLAP系统用来分析营收数据及提供自动报表。总预算约750万美金。

4.2 MySQL

MySQL基本是生于互联网,长于互联网。其应用实例也大都集中于互联网方向,MySQL的高并发存取能力并不比大型数据库差,同时价格便宜,安装使用简便快捷,深受广大互联网公司的喜爱。

并且由于MySQL的开源特性,针对一些对数据库有特别要求的应用,可以通过修改代码来实现定向优化,例如SNS、LBS等互联网业务。

一个典型的应用场景是:

某互联网公司,成立之初,仅有PC数台,通过LAMP架构迅速搭起网站框架。随着业务扩张、市场扩大,迅速发展成为6台Dell小型机的中型网站。现在花了三年,终于成为垂直领域的最大网站,计划中的数据中心,拥有Dell机架式服务器40台,总预算20万美金。

4.3 MS SQL Server

windows生态系统的产品,好处坏处都很分明。

好处就是:高度集成化,微软也提供了整套的软件方案,基本上一套win系统装下来就齐活了。因此,不那么缺钱,但很缺IT人才的中小企业,会偏爱 MS SQL Server 。例如,自建ERP系统、商业智能、垂直领域零售商、餐饮、事业单位等等。

1996年,Bill Gates亲自出手,从Borland挖来了大牛Anders,搞定了C#语言。微软02年搞定了http://ASP.NET。成熟的.NET、Silverlight技术,为 MS SQL Server赢得了部分互联网市场,其中就有曾经的全球最大社交网站MySpace,其发展历程很有代表性,可

作为一个比较特别的例子。其巅峰时有超过1.5亿的注册用户及每月400亿的访问量。应该算是MS SQL Server支撑的最大的数据应用。