关系型数据库(Relational DataBase Management System),简称 RDBMS。说起关系型数据库,我们脑海中会立即浮现出 Oracle、MySQL、SQLServer 等数据库,这些都是我们常用的关系型数据库。

关系型数据库最大的特点就是在其关系这个词,它可以保存数据库中的各种关系。那么这个关系如何理解呢?我们就拿学校的一个例子来讲吧。在学校里,我们有老师(Teacher)、学生(Student)、课程(Course)这几个实体,而这几个实体之间都是有一定关系的。例如:一个老师能教多个学生,一个学生也能被多个老师教,所以老师和学生之间的关系是N:N的关系。于此类似,学生与课程也是N:N的关系。

关系型数据库的发展历程

在1979年,Larry Ellison 使用汇编和C语言主导开发了第一个商用关系型数据库 Oracle。在此之后的接近16年内的时间,Oracle 数据库一路奔跑,成为了世界上最流行的关系型数据库。

在1989年,微软(Microsoft)也发布了一个关系型数据库 SQL Server,但其同样也是一个收费的商业型数据库。

直到1995年,瑞典公司MySQL AB发布了 MySQL 数据库的第一个版本,从此终结了关系型数据库只能用 Oracle、SQL Server 这些收费软件的神话。

在 MySQL 诞生后,因为其开源、免费的特性,所以其得到了众多中小使用者的拥护,其用户量增长迅猛。而在这期间,MySQL的主人也几易其手。在2008年,Sun 公司收购了 MySQL AB 公司,同时也获得了 MySQL 数据库的管理权。在 2010 年的时候,Oracle 公司收购了 Sun 公司,获得了 MySQL 的管理权。而就在 Oracle 收购 Sun 公司的当天,因为担心被 Oracle 收购后MySQL的前景会受到限制,被称为 MySQL 之父的 Michael Widenius fork 了 MySQL 的一个分支,启动了 MariaDB 项目。

果不其然,在被收购不久后,MySQL随即推出了相关的收费版本。虽然原来的免费版本仍然可以使用,但在可预见的未来,Oracle 投入到 MySQL 中的精力可能很有限。毕竟Oracle是一个商业公司,也是要养家糊口的。

现在我们可以了解到现在主流关系型数据库的诞生和发展概况,主要可以分为下面几个阶段:

  • 1979年,Oracle 数据库诞生
  • 1989年,SQL Server 数据库诞生
  • 1995年,MySQL 数据库诞生

那这些关系型数据库都有什么差异呢?

它们各自的适用场景又是哪些呢?

MySQL 与 Oracle 之间的恩怨

说到上面这三个数据库,很多人的印象是 Oracle 很大,但是很难使用。MySQL 使用很方便,似乎是最好的选择。SQL Server 是最没有存在感的一个数据库,基本上处于高不成低不就的状态。

从 db-engines.com 网站关系型数据库市场份额排名来看,现在市场份额最高的还是 Oracle 数据库,MySQL 次之,接下来则是 SQL Server 数据库。

上图的排名似乎远远颠覆了我们的日常认知,因为在我们周边貌似很少人使用Oracle,但为什么其市场份额能这么高呢?

任何事情都不可能空穴来风,Oracle能占有这么大市场份额是因为其在海量数据的处理上更具有优势,并且能提供一整套的数据存储解决方案。所以在一些非常大的企业里,这些企业拥有庞大的资金能力,所以它们会选择用钱购买解决方案,而不是自己雇佣人员使用 MySQL 去维护。总的来说,Oracle比起MySQL具有下面的优点:

  • 众多的数据库特性,能满足企业的多样性需求
  • 海量数据处理的优势
  • 一整套数据解决方案

但是 Oracle 的缺点也很明显,那就是价格昂贵。

因为Oracle有上面这些特性,所以Oracle更加适合那些大型跨国企业。因为这些企业资金充足,能承担得起Oracle的昂贵费用。另一方面,这些企业的数据量也是非常庞大,它们更注重数据的安全性和高效存储,并且关心的出现问题的时候能快速解决,Oracle提供的一系列服务正好符合它们的需求。

而对于一些中小型企业或者个人使用者来说,一方面Oracle软件非常笨重,另一方面Oracle授权费用昂贵,对于它们来说无法承受。而它们的数据库又恰好不是特别大,所以对于这些使用者来说,使用MySQL已经能够解决它们的需求了。那么也就无需去付费使用Oracle的数据库了。

总结

如果单单是从数据库性能来比较的话,那么Oracle数据库无疑是天下第一、吊打MySQL的,毕竟Oracle比MySQL诞生早了10多年。但很多时候还是得结合具体的使用场景来做出合适的选择,毕竟杀鸡不用牛刀嘛,能不用钱解决的,为何要付费解决呢!

所以当你的数据量很大,并且你自身并不缺钱,那么你直接上Oracle吧!如果资金有限,数据量也不大,那么就用MySQL吧!

数据库历险记(一) | MySQL这么好,为什么还有人用Oracle?的更多相关文章

  1. 数据库历险记(三) | 缓存框架的连环炮 数据库历险记(二) | Redis 和 Mecached 到底哪个好? 数据库历险记(一) | MySQL这么好,为什么还有人用Oracle? 面对海量请求,缓存设计还应该考虑哪些问题?

    数据库历险记(三) | 缓存框架的连环炮   文章首发于微信公众号「陈树义」,专注于 Java 技术分享的社区.点击链接扫描二维码,与500位小伙伴一起共同进步.微信公众号二维码 http://p3n ...

  2. 您的项目引用了最新实体框架;但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mysql的技巧

    转载至: http://www.cnblogs.com/Imaigne/p/4153397.html 您的项目引用了最新实体框架:但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mys ...

  3. 4月数据库流行度排行榜 MySQL能否追上Oracle

    4月的数据库流行度排行榜可谓看点十足.闲言少叙,先上图: 前十名中,名次上升的都是NoSQL数据库,NoSQL凭借其对大数据处理的优势,发展越来越快.NoSQL是对众多非传统关系型数据库的总称,按存储 ...

  4. 腾讯云数据库团队:MySQL AHI 实现解析

    MySQL 定位用户记录的过程可以描述为:打开索引 -> 根据索引键值逐层查找 B+ 树 branch 结点 -> 定位到叶子结点,将 cursor 定位到满足条件的 rec 上:如果树高 ...

  5. 腾讯云数据库团队:MySQL数据库的高可用性分析

    作者介绍:易固武,腾讯高级工程师,参与腾讯账号安全建设,腾讯数据仓库(TDW)优化改造,腾讯云数据库等项目,对大规模分布式存储和计算系统有浓厚的兴趣和经历 MySQL数据库是目前开源应用最大的关系型数 ...

  6. Learning-MySQL【1】:数据库初识及 MySQL 的安装

    一.什么是数据 数据(Data):描述事务的符号记录,描述事物的符号既可以是数字,也可以是文字.图片,图像.声音.语言等,数据由多种表现形式,它们都可以经过数字化后存入计算机 在计算机中描述一个事物, ...

  7. {MySQL数据库初识}一 数据库概述 二 MySQL介绍 三 MySQL的下载安装、简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 初识sql语句

    MySQL数据库初识 MySQL数据库 本节目录 一 数据库概述 二 MySQL介绍 三 MySQL的下载安装.简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 ...

  8. 数据库优化之mysql【转】

    1. 优化流程图 mysql优化(主要增加数据库的select查询,让查询速度更快) 2. 优化mysql的方面 主要从以下四个方面去优化mysql ①存储层:如何选择一个数据库引擎,选择合适的字段列 ...

  9. ASP.NET实现二维码 ASP.Net上传文件 SQL基础语法 C# 动态创建数据库三(MySQL) Net Core 实现谷歌翻译ApI 免费版 C#发布和调试WebService ajax调用WebService实现数据库操作 C# 实体类转json数据过滤掉字段为null的字段

    ASP.NET实现二维码 using System;using System.Collections.Generic;using System.Drawing;using System.Linq;us ...

随机推荐

  1. 【Android 应用开发】OpenGL ES 2.0 -- 制作 3D 彩色旋转三角形 - 顶点着色器 片元着色器 使用详解

    最近开始关注OpenGL ES 2.0 这是真正意义上的理解的第一个3D程序 , 从零开始学习 . 案例下载地址 : http://download.csdn.net/detail/han120201 ...

  2. 【Qt编程】基于Qt的词典开发系列<十二>调用讲述人

    我们知道,win7系统自带有讲述人,即可以机器读出当前内容,具体可以将电脑锁定,然后点击左下角的按钮即可.之前在用Matlab写扫雷游戏的时候,也曾经调用过讲述人来进行游戏的语音提示.具体的Matla ...

  3. redis持久化AOF与RDB

    RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原 ...

  4. linux下64位汇编的系统调用(2)

    知道了syscall调用号之后还不算完,还要搞清楚2件事: 1 每种调用号需要传递哪些参数: 2 调用如何传递参数以及结果如何返回: 第一个问题的答案是: 在linux系统中某个程序执行时进行的系统调 ...

  5. leetCode之旅(14)-Number of 1 Bits

    题目描述: Write a function that takes an unsigned integer and returns the number of '1' bits it has (als ...

  6. C# / VB.NET合并PDF指定页

    在前面的文章中,我们已经知道如何合并.拆分多个PDF文件,在这篇文章中的合并.拆分PDF文档主要是以方便文档管理的目的来操作文档,在文档查阅.管理及存储上很方便实用.但是我们如果想要合并多个文档中的部 ...

  7. Java中使用有返回值的线程

    在创建多线程程序的时候,我们常实现Runnable接口,Runnable没有返回值,要想获得返回值,Java5提供了一个新的接口Callable,可以获取线程中的返回值,但是获取线程的返回值的时候,需 ...

  8. PyCharm导入pymysql包运行报错问题解决:No module named 'PyMySQL'

    import pymysql # 导入包 # 报错问题显示: ImportError: No module named 'PyMySQL' 出现该问题提示:找不到该包名. 解决办法如下: ①先下载Py ...

  9. Course2-Python函数和模块

    一. 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率. 上一课里提到了Python的很多内置函数.在此主要讲自定义函数. 1. 定 ...

  10. Spring的事务 之 9.1 数据库事务概述 ——跟我学spring3

    9.1  数据库事务概述 事务首先是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做,这就是事务. 事务必需满足ACID(原子性.一致性.隔离性和持久性 ...