1. 什么事数据库
1.1 数据库的概论
1.1.1 数据库引子
-
自己理解
存储数据的地方,我们可以进行增删改查操作数据,地方是哪里?内存或者磁盘。
-
百度定义
数据库 ,简而言之可以为电子化的文件柜——存储电子文件的处所,用户可以对文件中得数据运行新增、截取、更新、删除等操作。所谓“数据库”是以一定方式存储在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。
-
为什么要有数据库?
我们开发一套程序,这里面有登录、注册,查看页面,购买等等功能,但是每一程序或者是web网站,必不可少的一个环节就是需要记录操作数据,所以我们将记录呵操作数据这个环节先称之为一个大功能,这个功能,每一个程序或者网站我们都需要先完善这个大功能,重复造轮子。我们要写好这个功能我们需要考虑那些方面:
- 数据要求持久化就要存储在磁盘中,我们之前的那种普通文件,IO多,效率低,所以之前的普通文件不行,我们要解决IO和效率问题。
- 我们的项目中的数据不可能存放在本机上,多人共同开发,所以我们的项目数据要放在服务器上,可以通过网络通信的形式让所有的开发共享数据。
- 数据部署在服务器上一定是单独的服务器。一般公司会将项目与数据库分开部署两台服务器,保证数据的安全性。
- 保证连接数据库的各个用户需要登录认证,权限。
- 数据库要支持并发,并且在操作同一条数据时要加锁处理等等。
-
DBMS
官方定义:
数据库管理系统(英语:Database Management System,简称DBMS)是为管理数据库而设计的电脑管理系统,一般具有存储、截取、安全保障、备份等基础功能。数据库管理系统可以依据他所支持的数据库模型来作分类,例如关系式、XML;或依据所支持的计算机类型来做分类,例如服务器集群、移动电话;或依据所查询语言来分类,例如SQL、XQuery;或依据性能冲量重点来作分类,例如最大规模、最高运行速度;亦或其他的分类方式、不论使用哪种分类方式,一些DBMS能够跨类别,例如,同事支持多种查询语言。
database management system 数据库管理系统(软件),这样就出现了专门管理数据库的管理系统,以后我们就不用自己去与数据库交互的实际功能了,我们直接学习这个软件,这个软件提供了一套增删改查的具体命令:SQL语句。我们学会了这些SQL语句,通过DBMS的客户端发送到DMBS的服务端,服务端一般是部署在数据库部署的那台服务器上的,然后通过DBMS服务端分析SQL语句,向数据库进行增删改查数据,最终的操作结果通过网络相应给DBMS的客户端。
所以:DBMS这个软件是基于C/S架构的软件,这个软件分很多种,我们以后就是学习DBMS这个软件就可以了。
数据库:存放数据的地方。我们以后不会直接与数据库接触,我们是通过DMBS软件操作数据库的。
工作中对数据库的称呼:
有同事跟你说看一下数据库:有可能就是真正的数据库(文件夹),也有可能看一下数据库的那个服务器,还有可能是DBMS软件等等。
有人称这个数据库管理系统为数据库,有人称这个存放数据的机器叫做数据库,有人称里面的一个存放数据的库叫做数据库,(存放数据的库,其实就是将数据分开管理,例如:你有两个项目来使用这个数据管理系统,那么我们两个项目的数据肯定是不能掺和在一块的,那么就需要分开管理,分开管理的是可以给每一个项目单独创建一个库,每个库存放自己项目对应的数据,有人称这个库为数据库),但是不管怎么称呼,你结合他当时说话的场景,就能够理解他是什么意思,反正大意也都差不多,这个知道就好。
2. 数据库的分类
目前数据库分为关系型数据库和费关系型数据库。
2.1 关系型数据库
解释:关系型数据库模型是把复杂的数据结构归结为简单的二次元关系(即二维表格形式,不是Excel,但是和Excel的形式很像)
关系型数据库就会分为不同中的DBMS:
-
Oracle数据库
Oracle前身叫做SDL、由Larry Ellison和两个编程人员在1977年创办,他们开发了主机的拳头产品,在市场上大量销售、Oracle公司是最在开发关系型数据库的厂商之一,其产品支持最广泛的操作系统平台。目前Oracle关系数据库产品的市场占有率数一数二。
Oracle公司是目前全国最大的数据库软件公司,也是今年业务增长极为迅速的软件提供与服务商
主要应用范围:传统大企业、大公司、政府、金融、证券等。
版本升级:Oracle8i,oracle9i,Oracle10g,Oracle11g,Oracle12c。、
-
MySQL数据库
MySQL被广泛应用在Internet上的中小型网站中。由于体积小、速度快、总体拥有成本低,开放源代码。
-
MariaDB数据库
MariaDB数据库管理系统数MySQL数据库的一个分支,主要由开源社区维护,采用GPL授权许可。开发这个MariaDB的原因之一是:甲骨文公司收购了MySQL后,有MySQL闭源的风险,因此MySQL开源社区采用分支的方式来避开这个风险。
MariaDB基于事务的Maria存储引擎,替换了MySQL的MyISAM的存储引擎,它使用了Percona的XtraDB(InnoDB的变体)这个版本还包括了PrimeBaseXT(PBXT)和Federated X存储引擎。
-
SQL Server数据库
Microsoft SQL Server 是微软公司开发的大型关系型数据库系统。SQL Server的功能比较全面,效率高,可以作为中型企业或者单位的数据库平台。SQL Server可以与Windows操作系统紧密及集成,不论是应用程序开发速度还是系统事务处理运行速度,都得到较大的提升,对于在Windows平台上开发的各种企业级信息管理系统来说,不论是C/S(客户机/服务器)架构还是B/S (浏览器/服务器)架构。SQL Server都是一个很好的选择。SQL Server的缺点是只能在Windows系统下运行。
-
Access数据库
Access是入门级小型桌面数据库,性能安全性都很一般,可供个人管理或小型企业使用
Access不是数据库语言,只是一个数据库程序,目前最新版为Office 2007,其特点主要如下:
- 完善地管理各种数据库对象,具有强大的数据组织,用户管理、安全检查等功能
- 强大的数据处理功能,在一个工作组级别的网络环境中,使用Access开发的多用户管理系统具有传统的XSASE(DBASE、FoxBASE的统称)数据库系统所无法实现的客户服务器(Client/Server)结构和相应的数据库安全机制,Access具备了许多先进的大型数据管理系统所具备的特征
- 可以方便地生成各种数据对象,利用存储的数据建立窗体和报表。
- 作为Office套件的一部分,可以与Office集成,实现无缝连接
- 能够利用Web检索和发布数据,实现与Internet的连接,Access主要适用于中小型企业应用系统,或作为客户机/服务器系统中的客户端数据库。
其他不常用的关系型数据库
DB2、PostgreSQL、Informix、Sybase等。这些关系型数据库逐步的淡化了普通运维的实现,特别是互联网公司几乎见不到
2.2 非关系型数据库
指的是非关系型数据库,而不是“No SQL”的意思,因此,NoSQL的产生并不是要彻底否定关系型数据库,而是作为传统关系型数据库的一个有效补充。NoSQL数据库在特定的场景下可以发挥出难以想象的高效率和高性能。
随着互联网Web2.0网站的兴起,传统的关系型数据库在应付web2.0网站,特别是对于规模日益扩大的海量数据,超大规模和高并发的微博、微信、SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题。
例如:传统的关系型数据库IO瓶颈、性能瓶颈都难以有效突破,于是出现了大批针对特定场景,以高性能和使用便利为目的功能特异化的数据库产品。NoSQL(非关系型)类的数据就是在这样的情境下诞生并得到了非常迅速的发展
高性能、高并发、对数据一致性要求不高
开源的NoSQL体系、如Facebook的Cassandra,Apache的HBase,也得到了广泛认同,Redis,Mongb也逐渐越来越受到各类大中小型公司的欢迎和追捧
NoSQL非关系型数据库小结:
- NoSQL不是否定关系数据库,而是作为关系数据库的一个重要补充
- NoSQL为了高性能、高并发而生,忽略影响高性能,高并发的功能
- NoSQL典型产品memcached(纯内存),Redis(持久化缓存),MongoDB(文档的数据库)
非关系型数据库又分为一下四种:
(1)键值(Key-Value)存储数据库
键值数据库就类似传统语言中使用哈希表,可以通过key来添加、查询或删除数据,因为使用key主键访问,所以会获得很高的性能及扩展性
键值(Key-Value)数据库主要是使用一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署、高并发
k1—>数据
k2—>数据
典型产品:Memcached、Redis、MemcacheDB、BerkeleyDB
(2)列存储(Column-oriedted)数据库 ======>了解即可,一般公司用不到
这部分数据库通常用来分布式存储的海量数据,键仍然存在,但是他们的特点是指向了多个列。
典型产品:Cassandra,HBase
(3)面向文档(Document-Oriented)数据库
面向文档数据库会将以文档的形式存储。每个文档都是自包含的数据单元,是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关系对象。数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用XML、JSON或者JSONB等多种形式存储
典型产品:MorgoDB、CouchDB
常见的非关系型数据库:
-
memcached(key-value)
Memcaced是一个开源的、高性能的、具有分布式内存对象的缓存系统。通过它可以减轻数据库负载,加速动态的web应用,最初版本由LiveJoumal的Brad Fitzpatrick在2003年开发完成。目前全球有非常多的用户都在使用他来架构主机的大负载网站或提升主机的高访问网站的响应速度。注意:Memcache是这个项目的名称,而Memcached是服务端的主程序文件名。
缓存一般用来保存一些进程被存取的对象或数据,通过缓存在在存取对象或数据要比在磁盘上存取块很多,前者是内存,后者是磁盘、Memcached是一种纯内存缓存系统,他经常存取的对象或数据缓存在memcached的内存中,这些被缓存的数据被程序通过API的方式被读取,memcached里面的数据就像一张巨大的hash表,数据以key-value对的方式存在。Memcached通过缓存经常被存取的对象或数据,从而减轻频繁读取数据库的压力,提高网站的响应速度,构建出快速更快的可扩展的web应用。
官网:http://memcached.org/
由于memcached为纯内存缓存软件,一旦重启所有数据都会丢失,因此,新浪网基于Memcached开发了一个开源项目Memcachedb。通过为Memcached增加Berkeley DB的持久化存储机制和异步主复制机制,使Memcached具备了事务恢复能力、持久化数据能力和分布式复制能力,memcached非常适合需要超高性能读写速度、持久化保存的应用场景,但是最近几年逐渐被其他的持久化产品代替如Redis
memcached小结:
- key-value型数据库
- 纯内存数据库
- 持久化Memcachedb(sina)
-
Redis
和Memcached类似,Redis也是一个key-value型存储系统。但Redis支持的存储value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)等。这些数据类型都支持Push/pop、add/remove及取交集、并集和差集及更丰富的操作,而且这些操作都是原子性的。为了保证效率,Redis的数据都是缓存在内存中。区别是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在基础上实现了master-slave(主从)同步。
Redis是一个高性能的key-value数据库。Redis的出现、很大程度上补偿了memcached这类key-value存储的不足,在部分场合可以对关系型数据库起到很好的补充作用。他提供了Python、Ruby、erlang、PHP客户端,使用方便。
官方:http://www.redis.io/documentation
Redis特点:
- 支持内存缓存,这个功能相当于memcached
- 支持持久化存储,这个功能相当于memcachedb,ttserver
- 数据库类型更丰富。比其他key-value库功能更强
- 支持主从集群、分布式
- 支持队列等特殊功能
应用:缓存从存取memcached更改存取Redis
-
MongoDB(Document-oriented)
MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库当中功能最丰富,最想关系型数据库的。他支持的数据库库结构非常松散,类似json的bjson格式,因此可以存储比较复杂的数据类型。MongoDB最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
特点:
高性能,易部署,易使用,存储数据方便
主要功能特性:
-
面向集合存储,易存储对象类型的数据
-
“面向集合”(Collenction-Orented)意思是数据库被分组存储在数据集中,被称为一个集合(collenction)每个集合在数据库中都有一个唯一的标识名,并且可以包含无线数目的文档,集合的概念类似关系型数据库(RDBMS)里的表(table)不同的是他不需要定义任何模式(schema)
-
模式自由
模式自由意味着存储在MongoDB数据库中的文件,我们不需要知道他的任何结构定义。
-
支持动态查询
-
支持完全索引,包含内部对象
-
支持查询
-
支持复制和故障恢复
-
使用高效的二进制数据存储,包括大型对象
-
自动处理碎片、以支持云计算层次的扩展性
-
-
Cassandra
Apache Cassandra 是一套开源的分布式key-value存储系统。他最初由Facebook开发,用于存储特别大的数据。Facebook目前在使用此系统。
这要特点:
-
分布式
-
基于column的结构化
-
高伸展性
-
Cassandra的主要特点就是他不是一个数据库,而是一堆数据库节点共同构成一个分布式网络服务,对Cassandra的一个写操作,会被复制到其他节点上去,对Cassandra的读操作。也会被路由到某个节点上面读取。
Cassandra是一个混合型的非关系型数据库,类似于Google的BigTable。其主要功能比Dynomie(分布式的key-value存储系统)更丰富,Cassandra最初由Facebook开发,后转变成了开源项目。
-