数据库扫盲
- 什么是数据库?
数据库(database)就是一个存放数据的仓库(也是一个文件),这个仓库里的数据是按照关系有组织的存放的,我们可以通过多种操作方式(增删改查等)来管理仓库中的数据。
举个例子就更明白了: 大家去图书馆借书都用过电脑搜索要找的书具体位置在哪个书库哪个书架吧。图书馆系统就是先建立好了数据库,保存了所有的图书信息(书名、作者、出版社、存放位置、是否被借等),我们搜一本书就是执行了数据库的 “查” 操作。图书馆买了一本新书,然后要把这本新书信息手动输入到数据库系统中,以便大家能搜到,这就是“增”操作。当一本书被借走时,图书管理员在电脑上对数据库进行“改”操作,因为此时这本书的状态要改为“被借”。当一本书太老了该下架退休了,图书馆管理员就会把这本书的信息从数据库中删除,也就是执行“删”操作。
其他例子: 学生信息管理,大家登录学号查个人信息和成绩那些都是保存在数据库的。其他网络账号信息,比如QQ、微信、淘宝等信息也都是保存在对应公司的数据库里面,我们登录账号的时候,实际上就是进行一次“查”操作,从数据库中查到的账号和密码信息和你现在登录时输入的比较,相同才能正常登录。
- 为什么要数据库?
看了上面的描述有人可能想到了Excel表格,好像把书本信息保存在表格里也可以完成上面的需求呀。但是表格不是数据库,表格处理数据太慢了。表格适合个人处理少量数据,数据库更适用于海量数据的处理,比如上面例子的几百万本图书信息,要是用表格存储,那么对这些数据的操作将会变得很慢。另外数据库在网络共享,编程操作,数据隐秘和安全性上也有更大优势。
数据库分类
一、关系型数据库管理系统
RDBMS (Relational Database Management System)
关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。在关系型数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关联的表格分类、合并、连接或选取等运算来实现数据库的管理。
1、Oracle
- 1977年首发,美国甲骨文(Oracle)公司所有,美国中央情报局是第一个大客户。题外话,甲骨文2009年收购了Sun公司,也就是买断了Java。
- 应用场景:金融、银行、通信、能源、运输、零售、制造等各个行业的大型公司。据说想进银行搞开发,Oracle数据库要会。
- 特点:最贵,功能最多,安装最不方便,不开源。高可用性、健壮性、安全性、实时性,海量数据、高吞吐量、复杂逻辑、高计算量。
创一代高富帅
2、SQL Server
- 1988年首发,最初是由Microsoft、Sybase 和Ashton-Tate三家公司共同开发的,后来分家了。现在讲到SQL Server主要都是指微软家的,Windows电脑上都有Microsoft SQL Server相关一堆文件。在Linux/Unix下是Sybase SQL Server。
- 应用场景:不是海量数据,不差钱想要一整套软件解决方案的中小企业。
- 特点:中等贵,功能最少,安装中等方便,不开源。集成了微软公司的各类产品及资源,提供了强大的可视化界面、高度集成的管理开发工具。
富二代
3、MySQL
- 1995年首发,属于瑞典MySQLAB公司。但是2008年被Sun公司收购,而2009年甲骨文公司收购了Sun,所以现在MySQL是属于甲骨文公司旗下的产品。
- 应用场景:互联网开发,所以我们可以看到,在web应用开发方面,大家基本上都用过MySQL,企业招聘web开发要求也基本上会写熟练使用MySQL。互联网创业首选。
- 特点:免费,功能中等,安装最方便,开源。高并发存取能力,开源适合自定义优化,使用简单。
屌丝创业青年
4、MariaDB
- 2009年首发,由MySQL创始人Michael Widenius主导开发,Maria(玛利亚)是他女儿的名字。MariaDB是MySQL的一个分支(Github),据说是因为2008年甲骨文公司买下MySQL后有闭源的想法,开源社区因此开了一个分支来规避风险。也叫作MySQL数据库的衍生版。
- 应用场景:和MySQL相似,尤其是担心MySQL闭源的大公司。
- 特点:开源,完全兼容MySQL,但它在扩展功能、存储引擎以及一些新的功能改进方面都强过MySQL,而且从MySQL迁移到MariaDB也是非常简单。
5、SQLite
- 2000年首发,SQLite,是一款轻型的数据库,包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。同样比起Mysql来讲,它的处理速度快多了。
- 应用场景:嵌入式系统,硬件,系统对内存占用和处理速度要求高。
- 特点:轻便,开源,当应用程序使用SQLite时,SQLite并非作为一个独立进程通过某种通信协议(例如socket)与应用程序通信,而是作为应用程序的一部分,应用程序通过调用SQLite的接口直接访问数据文件。感谢类库的底层技术,它让SQLite变得非常快速、高效并且十分强大。
6、Access
- 微软office软件套餐成员之一。
7、其他不常用的关系型数据库
- DB2、PostgreSQL、Informix、Sybase等
二、非关系型数据库管理系统
NoSQL(NoSQL = Not Only SQL )
NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSql数据库在特定的场景下可以发挥出难以想象的高效率和高性能,它是作为对传统关系型数据库的一个有效的补充。
1、键值存储数据库
- 键值对的存储方式在NoSQL数据库中是最简单的一种,其结构就像其名字所示,是一个key-value的集合。这种方式在NoSQL数据库类型中是最可扩展的一种类型,并且可以存储大量的数据。键值对中存储的数据的类型是不受限制的,可以是一个字符串,也可以是一个数字,甚至是由一系列的键值对封装成的对象等。
- 应用场景:内容缓存,适合经常需要扩展的大数据集。
- 特点:快速查询,但是存储的数据缺少结构化。
- 典型代表:Redis数据库。
2、列存储数据库
- 传统的关系型数据库是基于行的,每一行都带有一个行id并且行中的每一个字段都存储在一张表中。在基于行的数据库中进行查找的时候,每次都会对每一行进行遍历,不管某一列数据是否是你需要的都会进行遍历。假如你只需要某列中某些数据,基于行的数据库会对这张表从上到下从左至右遍历一遍,最后再返回你需要的那些数据。基于列的数据库会将每一列分开单独存放,当查找一个数量较小的列的时候其查找速度是很快的。
- 应用场景:分布式的文件系统。
- 特点:查找速度快,可扩展性强,更容易进行分布式扩展。但是功能相对局限。
- 典型代表:HBase数据库。
3、文档型数据库
- 文档型数据库的灵感是来自于LotusNotes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。
- 应用场景:Web应用
- 特点:数据结构要求不严格。但是查询性能不高,而且缺乏统一的查询语法。
- 典型代表:MongoDB数据库。
4、图形数据库
- 这在几种NoSQL中是最复杂的一个,主要使用一种高效的方式来存储各个实体之间的关系。当数据之间是紧密联系的,例如社会关系、科学论文的引文抑或是资本资产定价模型等等,使用图形数据库是最好的选择。图形或者网络数据由两部分组成:
Node-:实体本身,在一个社会关系中可以认为是一个人。
Edge-:实体之间的关系。这个关系可以用一条线来表示,这条线有它自己的属性。这条线可以有方向,箭头可以表明谁是谁的上级。 - 应用场景:社交网络、推荐系统等,专注于构建关系图谱。
- 特点:可以利用图结构相关算法。但是很复杂,需要对整个图做计算才能得到结果,不容易做分布式的集群方案。
- 典型代表:Neo4J数据库。
更深入的关系型数据库和NoSQL对比,可看这篇博文https://www.cnblogs.com/beilin/p/5981870.html
关于如何选择数据库可看这篇博文http://www.cnblogs.com/beilin/p/6007080.html