Oracle和MySQL的对比
一、概述
1.1 Oracle
1.1.1 优点
- 开放性:Oracle 能所有主流平台上运行(包括 windows)完全支持所有工业标准采用完全开放策略使客户选择适合解决方案对开发商全力支持;
- 可伸缩性,并行性:Oracle 并行服务器通过使组结点共享同簇工作来扩展windownt能力提供高用性和高伸缩性簇解决方案windowsNT能满足需要用户把数据库移UNIXOracle并行服务器对各种UNIX平台集群机制都有着相当高集成度;
- 安全性:获得最高认证级别的ISO标准认证。
- 性能:Oracle 性能高 保持开放平台下TPC-D和TPC-C世界记录;
- 客户端支持及应用模式:Oracle 多层次网络计算支持多种工业标准用ODBC、JDBC、OCI等网络客户连接 ;
- 使用风险:Oracle 长时间开发经验完全向下兼容得广泛应用地风险低 。
- 对硬件的要求很高;
- 价格比较昂贵;
- 管理维护麻烦一些;
- 操作比较复杂,需要技术含量较高。
- 体积小、速度快、总体拥有成本低,开源;
- 支持多种操作系统;
- 是开源数据库,提供的接口支持多种语言连接操作
- MySql的核心程序采用完全的多线程编程。线程是轻量级的进程,它可以灵活地为用户提供服务,而不过多的系统资源;
- MySql有一个非常灵活而且安全的权限和口令系统。当客户与MySql服务器连接时,他们之间所有的口令传送被加密,而且MySql支持主机认证;
- 支持大型的数据库, 可以方便地支持上千万条记录的数据库。作为一个开放源代码的数据库,可以针对不同的应用进行相应的修改。
- 拥有一个非常快速而且稳定的基于线程的内存分配系统,可以持续使用面不必担心其稳定性;
- MySQL同时提供高度多样性,能够提供很多不同的使用者介面,包括命令行客户端操作,网页浏览器,以及各式各样的程序语言介面,例如C+,Perl,Java,PHP,以及Python。
- 不支持热备份;
- MySQL最大的缺点是其安全系统,主要是复杂而非标准,另外只有到调用mysqladmin来重读用户权限时才发生改变;
- 没有一种存储过程(Stored Procedure)语言,这是对习惯于企业级数据库的程序员的最大限制;
1.1.2 缺点
1.2 MySql
1.2.1 优点:
1.2.2 缺点:
二、Mysql应用场景
2.1 Web网站系统
Web站点,是MySQL最大的客户群,也是MySQL发展史上最为重要的支撑力量。
MySQL数据库的安装配置都非常简单,使用过程中的维护也不像很多大型商业数据库管理系统那么复杂,而且性能出色。
2.2 日志记录系统
MySQL数据库的插入和查询性能都非常的高效,,对需要大量的插入和查询日志记录的系统来说,MySQL是非常不错的选择。比如处理用户的登录日志,操作日志等,都是非常适合的应用场景。
2.3 数据仓库系统
随着现在数据仓库数据量的飞速增长,我们需要的存储空间越来越大。数据量的不断增长,使数据的统计分析变得越来越低效,也越来越困难。
有几个主要的解决思路:
1、一是采用昂贵的高性能主机以提高计算性能,用高端存储设备提高I/O性能,效果理想,但是成本非常高;
2、二是通过将数据复制到多台使用大容量硬盘的廉价pcserver上,以提高整体计算性能和I/O能力,效果尚可,存储空间有一定限制,成本低廉;
3、通过将数据水平拆分,使用多台廉价的pcserver和本地磁盘来存放数据,每台机器上面都只有所有数据的一部分,解决了数据量的问题,所有pcserver一起并行计算,也解决了计算能力问题,通过中间代理程序调配各台机器的运算任务,既可以解决计算性能问题又可以解决I/O性能问题,成本也很低廉。
在上面的3个方案中,第2和第3个的实现,MySQL都有较大的优势。通过MySQL的简单复制功能,可以很好的将数据从一台主机复制到另外一台,不仅仅在局域网内可以复制,在广域网同样可以。
2.4 嵌入式系统
嵌入式环境对软件系统最大的限制是硬件资源非常有限,在嵌入式环境下运行的软件系统,必须是轻量级低消耗的软件。
MySQL在资源的使用方面的伸缩性非常大,可以在资源非常充裕的环境下运行,也可以在资源非常少的环境下正常运行。它对于嵌入式环境来说,是一种非常合适的数据库系统,而且MySQL有专门针对于嵌入式环境的版本。
2.5 对比其他数据
- mysql:常规关系型数据库;
- redis:注重高性能,适用于即时性要求高的业务,比如说秒杀、库存;
- mongodb:注重大数量,适用于插入大量低价值业务数据的场景,比如说日志系统。
三、Oracle VS MySQL
3.1 数据安全
对于Oracle和MySQL数据库用户来说,MySQL使用一系统的授权表来管理和跟踪用户权限。当对用户进行验证、授权、访问控制时,MySQL使用这些授权表。
3.1.1 数据库验证
与Oracle及其他多数数据库通过用户名和密码进行验证的机制不同,MySQL使用附加的location参数对用户时行验证。这个location参数经查是主机名称、IP地址或者为一个通配字符串。通过这个附加的参数,MySQL可以限制用户访问域中的某些主机。更进一步可以做到通过不同的主机登陆时有不同的密码和用户权限。也就是说用户名相同,但登陆主机的名称不同时,可能是不同的用户。
3.1.2 权限
MySQL的权限系统是通过继承形成的分层结构。权限授于高层时,其他低层隐式继承被授于的权限,当然低层也可改写这些权限。
按授权范围不同,MySQL有以下种授权方式:
1、全局;
2、基于每个主机;
3、基于表;
4、基于表列。
每一级在数据库中都有一个授权表。当进行权限检查时,MySQL从高到低检查每一张表,低范围授权优先于高范围授权。
与Oracle不同,MySQL没有角色的概念。也就是说,如果对一组用户授于同样的权限,需要对每一个用户分别授权。
3.2 模式迁移
模式包含表、视图、索引、用户、约束、存储过程、触发器和其他数据库相关的概念。多数关系型数据库都有相似的概念。
本节包含以下内容:
1、模式对象的相似性;
2、模式对象的名称;
3、表设计时的关注点;
4、多数据库整合;
5、MySQL模式整合的关注点。
3.2.1 模式对象的相似性
就模式对象,Oracle和MySQL存储诸多的相似,但也有一些不同。
表3-1 模式对象
Oracle |
MySQL |
AFTER trigger |
trigger |
BEFORE trigger |
trigger |
Check constraint |
Check constraint |
Column default |
Column default |
Database |
Database |
Foreign key |
Foreign key |
Index |
Index |
Package |
N/A |
PL/SQL function |
Routine |
PL/SQL procedure |
Routine |
Primary key |
Primary key |
Role |
N/A |
Schema |
Schema |
Sequence |
AUTO_INCREMENT for a column |
Snapshot |
N/A |
Synonym |
N/A |
Table |
Table |
Tablespace |
N/A |
Temporary table |
Temporary table |
Trigger for each row |
Trigger for each row |
Unique key |
Unique key |
User |
User |
View |
View |
3.2.2 模式对象的名称
Oracle是大小写不敏感的,并且模式对象是以在写时行存储。在Oracle的世界中,列、索引、存储过程、触发器以及列别名都是大小写不敏感,并且在所有的平台都是如此。MySQL是大小写敏感的,如数据库相对的存储路径、表对应的文件都是如此。
当把关键字用引号引起来时,Oracle和MySQL都允许把这些关键字用于模式对象。但MySQL对于一些关键字,不加引号也行。
3.2.3 表设计的关注点
本节主要讨论当把MySQL转为Oracle时需要注意的地方。主要包含以下两点:
1、字符数据的类型;
2、列默认值。
3.2.3.1 字符数据类型
MySQL和Oracle在字符型数据保存和读取上存在一些不同。MySQL的字符类型,如CHAR和VARCHAR的长度小于65535字节。Oracle支持4种字体类型:CHAR、NCHAR、NVARCHAR2和VARCHAR2。CHAR和NCHAR的最大长度为2000字节,NVARCHAR2和VARCHAR2最大长度为4000字节。
MySQL的CHAR在按一定长度存储时,是用空格填充的右对齐方式,在读取时去掉空格。
3.2.3.2 列默认值
MySQL会处理列默认值,不允许他为空,这点和Oracle不同。在Oracle中如果向表插入数据,需要对有所有不允许为NULL列的值。
3.2.4 多数据库迁移
如果多个MySQL数据库位于同一个数据库服务上,支持迁移。
3.2.5 数据存储概念
MySQL的数据库对应于服务器上数据目录内的了目录,这一数据存储方式与多数据数据库不同,也包括Oracle。数据库中的表对应一个或者多个数据库目录下的文件,并取表存储时的存储引擎。
一个Oracle数据库包含一个或者多个表空间。表空间对应数据在磁盘上的物理存储。表空间是从一个或者多个数据文件开始构建的。数据文件是文件系统中的文件或者原始存储的一块空间。