什么是数据库


数据库是存放数据的仓库,按照一定的数据结构(数据结构是数据的组织形式)组织和存储

Chapter 1
.A very large,integrated collection of data.
.Models real-world scenarios
Entities(e.g.,students,courses)
Relationships(e.g.,John is taking CS 5120)
.A Database Management Systems(DBMS) is a
software package designed to store and manage database
我们为什么要学习数据库?
以前存储数据用的是普通的文件,为什么还要弄的数据库?
文件保存数据有几个缺点
.文件的安全性问题
.文件不利于查询和对数据的管理
.文件不利于存放海量数据
.文件在程序中控制不方便
数据库的管理数据有更高效率,更高安全性
Files vs. DBMS /文件对比数据库管理系统
Scenario : 100TB of data of employees,products,salaries
场景:100TB的员工、产品、工资数据
.Application must stage large datasets between main
memory and scondary storage(e.g.,buffering ,page-oriented access,etc.)
.Special code for different queries
.Must protect data from inconsistency due to multiple concurrent users
.Crash recovery
.Security and access control
为什么使用数据库管理系统?
Why Use a DBMS?/
.Data independence and efficient access.
.Data integrity and security.
.Uniform data administration.
.Concurrent access
.Recovery from crashes.
.Reduced application development time.

Why Study Databases?
.Shift from computation to information
Web application ,scientific application,etc.
.Datasets increasing in diversity and volume.
数据集的多样性和容量不断增加
Digital libraries,interative video,Human Genome project
数字图书馆,互动视频,人类基因组计划
Earth Observation System project
地球观测系统项目
... need for DBMS exploding
.DBMS encompasses most of CS
数据库管理系统包含/涉及了大部分的计算机系统
OS,languages,theory,AI,multimedia,etc.
数据库系统的组成
数据库管理系统软件和它建立起来的数据库
数据库系统4个部分组成
1.数据库
即存储在存介质上(磁带、磁盘、光盘)按一定结构组织在一起的相关数据的集合。
2.数据库管理系统DBMS(Database Management Systems)
是管理数据库的程序,对数据库添加新数据,修改和检索原有数据
3.数据库管理员 DBA (Database Administrator 简称DBA)
4.用户和应用程序
数据库的种类
早期的数据库理论数有三种据库模型
.层次式数据库
.网络式数据库
.关系型数据库
当今最常用的两种数据库模型
.关系型数据库
.非关系型数据库
关系型数据库
1.关系型数据库由来
关系型数据库较好地解决数据独立性和抽象级,
用户在 存取数据时,不需要明确数据的存储结构和存取路径
2.关系型数据库
关系型数据库模型是把复杂的数据结构归为简单的二元关系(即二维表格形式)
关系数据库对数据的操作建立在一个或多个关系表格上,通过对关联表格分类,合并,连接或选取等运算实现数据的管理。
Oracle 数据库领域里霸王地位,每年数百亿美元的产业市场,
MySQL 数据库,以至于被Oracle重金收购了
非关系型数据库
非关系型数据库也被称为NoSQL数据库
NoSQL的本意是”Not OnlySQL”,
指的是非关系型数据库
而不是“NoSQL”的意思(没有SQL语句?)
NoSQL不是要彻底地否定关系型数据库,而是作为传统关系型数据库的有效补充
NoSQL数据库在特定的场景下发挥出难以想象的高效率和高性能
互联网web2网站的兴起,关系型数据库大超大规模和高并发的微博,微信,
SNS类型的web2纯动态网站,关系型数据库IO瓶颈,性能瓶颈显得力不从心,
NoSQL是非关系型数据库的广义定义,NoSQL数据存储不需要固定的表结构,不存在连接操作,大数据存取性能优势
NoSQL在2009年初得到了广泛认同
Google的BigTable与RAmazon的Dynamo是非常成功的商业NoSQL实现
开源的NoSQL体系,如Facebook的Cassandra
Apache的HBase
Redis,mongodb受到大中小型公司的欢迎
非关系型数据库的种类
1.键值(Key-Value)存储数据库
键值数据库就类似传统语言中使用的哈希表
可以通过key来添加,查询或者删除数据,因为使用key主键访问,
所以会获得很高的性能及扩展性。
键值key-value数据库使用哈希表,表中有特定的键和一个指针指向特定的数据
Key/value模型对于IT系统来说的优势在于简单,易部署,高并发
Memcached,redis,memcacheDB,Berkeley DB
2.列存储(column-oriented)数据库
列存储数据库将数据存在列族
column family
一个列族存储经常被一起查询的相关数据。
如果person类,一起查询他们得姓名和年龄而不是薪资
这种情况下名字和年龄就会被放入一个列族中,而薪资则在另一个列族中
这部分数据库通常是用来应对分布式存储的海量数据
键仍然存在,特点是指向了多个列,这些列是由列家族来安排的
Cassandra,HBase基于列的存储系统
3.面向文档Document-Oriented数据库
文档型数据库的灵感是来自于Lotus Notes办公软件的
它同键值存储相类似
该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储
如JSON.文档型数据库可以看作是键值数据库的升级版
允许之间嵌套键值且文档型数据库比键值数据库的查询效率更高
面向文件数据库会将数据以文档的形式存储
每个文档自包含的数据单元,是一系列数据项的集合。
每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,
如字符串,数字和日期等;也可以是复杂的类型,如有序列表和关联对象。
数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,
数据可以使用XML,JSON或者JSNOB等多种形式存储。
典型产品MongoDB,GouchDB
4.图形(Graph)数据库
图形数据库允许将数据以图的方式存储
实体被作为顶点,而实体之间的关系则会被作为边
比如有三个实体Steve jobs,Apple和Next,
则会有两个“Founded by”的边将Apple和Next连接到Steve Jobs
图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,
它是使用灵活的图形模型,能够扩展到多个服务器上。
NoSQL数据库没有标准的查询语言(SQL),
因此进行数据库查询需要制定数据类型。
许多NoSQL数据库都有RSET式的数据接口或者查询API
典型产品Neo4J,InfoGrid
常用关系型数据库
Oracle
前身叫SDL,由Larry Ellison和另两个编程人员在1977创办, 1979年oracle公司第一个商用SQL关系数据库管理系统
oracle公司是最早开发关系数据库的厂商 ,是目前全球最大的数据库软件公司, 业务增长迅速的软件提供与服务商
2007年7月12日,甲骨文公司在美国纽约宣布数据库oracle 11g 是oracle数据库的最新版本 oracle11g有400多项功能,
经过了1500万个小时的测试,开发工作量达到了3.6万人/月oracle 11g在安全,XML DB,备份等方面得到了很大提升。
主要应用范围:传统大企业,大公司,政府,金融,证券等等, 版本升级:oracle8i,oracle9i,oracle10g,oracle11g
MySQL
MySQL数据库是中小型关系型数据库管理系统,
软件开发者为瑞典MySQL AB公司
在2008年1月16号被sun公司收购,后sun公司又被oracle公司收购
目前MySQL被广泛地应用在Internet上的大中小型网站中
由于其体积小,速度快,总体拥有成本低,尤其是开放源码这一特点,许多大中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库,
甚至国内知名的淘宝网也选择弃用ORACLE而更换为更开发的MySQL
MySQL数据库主要应用范围:互联网领域,大中小型网站,游戏公司,电商平台等等
MariaDB数据库
MariaDB数据库管理系统是MySQL数据库的一个分支,主要由开源社区维护,采用GPL授权即可,
开发这个MariaDB数据库分支的可能原因之一是
甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此MySQL开源社区采用分支的方式来避开这个风险。
开发MariaDB数 据库的目的是完全兼容MySQL数据库,包括API和命令行,使之能轻松的成为MySQL的替代品。
在存储引擎方面,使用XtraDB来替代MYSQL的Innodb
MariaDB由MySQL的创始人Michael Widenus主导开发,他早前曾以10亿美元的价格,
将自己创建的公司MYSQL Ab 卖给了SUN, SUN被甲骨文收购,MySQL的所有权也落入oracle的手中
MariaDB数据库的名称来自Mysql的创始人Michael Widenius的女儿Maria的名字
MaraDB基于事务的Maria存储引擎,替换了MySQL的MyISAM存储引擎, 使用了Percona的XtuaDB(InnoDB的变体)
这个版本还包括了PrimeBase XT和FederatedX存储引擎。
MariaDB数据库直到5.5版本,均依照MySQL版本发行
因此,使用MariaDB5.5的人会从MySQL5.5中了解到MariaDB的所有功能
SQL Server数据库
Microsoft SQL server是微软公司 大型关系型数据库系统
SQL server 功能全面,效率高, 作为中型企业或单位的数据库平台
SQL server 在Windows平台上开发的各种企业级信息管理系统来说,不论是C/S(客户机/服务器)架构还是B/S(浏览器/服务器)架构,SQL Server都是一个很好的选择
SQL Server只能在Windows系统下运行
主要应用范围:部分企业电商(央视购物),使用Windows服务器平台的企业
Access数据库
Microsoft公司于1994年推出的微机数据库管理系统。
界面友好,易学易用,开发简单,接口灵活等特点
桌面关系型数据库管理系统
结合了 Microsoft JET database Engine和图形用户界面两项特点,是Microsoft office的成员
常用非关系型数据库
Memcached(key-value)
开源 高性能 分布式内存对象的缓存系统
减轻数据库负载,加速动态的web应用,最初版本由LiveJounrnal的Brad Firzpatrick在2003年开发完成
提高网站的响应速度
memcache是这个项目的名称,而memcached是服务器端的主程序文件名
缓存保存经常被存取的对象或数据
缓存存取的对象或数据要比在硬盘上存取快很多,前者是内存,后者是磁盘
Memcached是一种纯内存缓存系统,把经常存放的对象或数据缓存在memcached的内存中
这些被缓存的数据被程序通过API的方式被存取,memcached里面的数据就像一张巨大的HASH表
数据以Key-value对的方式存在。Memcached通过缓存经常被存取的对象或数据,从而减轻频繁读取数据库的压力,提高网站的响应速度
官方 //memcached.org/
由于memcached为纯内存缓存软件,一旦重启所有数据都会丢失,
新浪网基于memcached开发了一个开源项目memcachedb
通过为memcached增加berkeleyDB的持久化存储机制和异步主辅复制机制
使memcached具备了事务恢复能力,持久化数据存储能力和分布式复制能力
memcachedb 适合需要超高性能读写速度,持久化保存的应用场景,但是最近几年逐渐被其他的持久化产品替代例如redis
Redis(key-value)
官方//redis.io/
redis也是一个key-value型存储系统。redis支持的存储value类型相对更多
包括string(字符串),list(链表),set(集合)和zset(有序集合)等
这些数据类型都支持push/pop,add/remove及取交集,并集和差集及更丰富的操作
这些操作都是原子性的,redis支持各种不同方式的排序,与memcached一样,为了保证效率,redis的数据都是缓存在内存中
区别是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加到记录文件
且在此基础上实现了master-slave(主从)同步
Redis高性能的key-value数据库,redis的出现,很大程序补偿了memcached这类key/value存储不足
在部分场合可以对关系数据库起到很好的补充作用 它提供了python,Ruby,erlang,php客户端,使用很方便
Redis特点
支持内存缓存 相当于memcached
支持持久化 相当于memcachedb,ttserver
数据类型更丰富
支持集群,分布式
支持队列等特殊功能
应用:缓存从存取memcached更改存取redis
MongoDB(Document-oriented)
MongoDB 介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的
他支持的数据结构非常松散,类似json的bjson格式,因此可以存储比较复杂的数据类型
Mongodb最大的特点是他支持的查询语言非常强大,其语法有点儿类似于面向对象的查询语言
几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据库建立索引
高性能,易部署,易使用,存储数据非常方便
面向集合存储,易存储对象类型的数据
面向集合
数据被分组存储在数据集中,被称为一个集合。每个几个在数据库中都有一个唯一的标识名,
且包含无限数目的文档集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)
模式自由,意味着对于存储在mongodb数据库中的文件,不需要知道它的任何结构定义。如果需要,你完全可以把不同结构的文件存储在同一个数据库里。
支持动态查询
支持完全索引,包含内部对象
支持查询
支持复制和故障恢复
使用高效的二进制数据存储,包括大型对象(如视频等)
自动处理碎片,以支持云计算层次的扩展性
支持ruby,python,java,c++,php等多种语言
文件存储格式为BSON(一种JSON的扩展)
BSON存储形式是指:存储在集合中的文档,被存储为键-值对的形式。
键用于唯一标识一个文档,为字符串类型,而值则可以是各种复杂的文件类型可通过网络访问
MongoDB服务端可运行在Linux,windows或os X平台,默认端口为27017,推荐运行在64位平台。
MangoDB数据库存储在文件中 默认路径  /data/db