一、数据库的基本认识

一、什么是数据库?

简单的说,数据库就是一个存放数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织,存储的,我们可以通过数据库提供的多种方法来管理数据库里的数据。
更简单的形象理解,数据库和我们生活中存放杂物的储物间仓库性质一样,区别只是存放的东西不同,杂物间存放实体的物件,而数据库里存储的是数据,这样我们就对数据库有一个初步的了解了。
数据库诞生于距现在大概六十多年前,随着信息技术的发展和人类社会的不断进步,特别是2000年以后,数据库不在仅仅是存储和管理数据了,而转变成用户所需要的各种数据管理的方式。数据库有很多种类和功能,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到广泛的应用。

二、数据库的种类

按照早期的数据库理论,比较流行的数据库模型有三种,分别为层次式数据库,网络式
数据库和关系型数据库。而在当今的互联网中,最常用的数据库模型主要是两种,即关系型数据库和非关系型数据库,我们不是写教科书,更不是研究数据库理论,因此,我们主要讲解关系型数据库和非关系型数据库NOSQL这两类最重要的也是目前实际使用最多的数据库种类。

关系型数据库

1)关系型数据库由来
虽然网状数据库和层次数据库已经很好地解决了数据的集中和共享问题,但是在数据独立性和抽象级别上仍有很大欠缺。用户在对这两种数据库进行存取时,仍然需要明确数据的存储结构,指出存取路径。而关系型数据库就可以较好地解决这些问题。
2)关系型数据库介绍
关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。在关系数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关联的表格分类,合并,连接或选取等运算实现数据的管理。
关系型数据库诞生距今已有40多年了,从理论产生发展到显示产品,列如:大家最常见的MySQL和Oracle数据库,Oracle在数据库领域里上升了霸王地位,形成每年高达数百亿美元的庞大产业市场,而MySQL也是不容忽视的数据库,以至于被Oracle重金收购了。

非关系型数据库介绍

非关系型数据库诞生背景

非关系型数据库也被称为NoSQL数据库,请读者注意,NoSQL的本意是”Not OnlySQL”,指的是非关系型数据库,而不是“NoSQL”的意思(没有SQL语句?),因此,NoSQL的产生并不是要彻底地否定关系型数据库,而是作为传统关系型数据库的一个有效补充。NoSQL数据库在特定的场景下可以发挥出难以想象的高效率和高性能。
随着互联网web2.0网站的兴起,传统的关系型数据库在对应web2.0网站,特别是对于规模日益扩大的海量数据,超大规模和高并发的微博,微信,SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,列如:传统的关系型数据库IO瓶颈,性能瓶颈都难以有效突破,于是开始出现了大批针对特定场景,是以高性能和使用便利为目的功能特异化的数据库产品,NoSQL(非关系型)类的数据库就是在这样的情景中诞生并得到了非常迅速的发展。
NoSQL是非关系型数据库的广义定义。它打破了长久以来关系型数据库与ACID理论大一统的局面,NoSQL数据存储不需要固定的表结构,通常也不存在连接操作。在大数据存取上具备关系型数据库无法比拟的性能优势。该术语(NoSQL)在2009年初得到了广泛认同。
当今的应用体系结构需要数据库存储在横向伸缩性上能够满足需求。而NoSQL存储就是为了实现这个需求而诞生的。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

Oracle前身叫SDL,由Larry Ellison和另两个编程人员在1977创办,他们开发了自己的拳头产品,在市场上大量销售,1979年,oracle公司引入了第一个商用SQL关系数据库管理系统,oracle公司是最早开发关系数据库的厂商之一,其产品支持最广泛的操作系统平台,目前oracle关系数据库产品的市场占有率数一数二。
Oracle公司是目前全球最大的数据库软件公司,也是近年业务增长极为迅速的软件提供与服务商。
2007年7月12日,甲骨文公司在美国纽约宣布退出数据库oracle 11g,这是oracle数据库的最新版本。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操作系统紧密集成,不论是应用程序开发速度还是系统事务处理运行速度,都能得到较大的提升,对于在Windows平台上开发的各种企业级信息管理系统来说,不论是C/S(客户机/服务器)架构还是B/S(浏览器/服务器)架构,SQL Server都是一个很好的选择。SQL Server的缺点是只能在Windows系统下运行。
1987年,微软和IBM合作开发完成OS/2,IBM在其销售的OS/2 ExtendedEdition系统中绑定了OS/2 Database Manager,而微软产品线中尚缺少数据库产品。为此,微软将目光投向Sybase,同Sybase签订了合作协议,使用Sybase的技术开发基于OS/2平台的关系型数据库。1989年,微软发布了SQL Server1.0版。Microsoft在与sybase分道扬镜后,随后在其6.05和7.0版本中重写了核心数据库系统,如今SQL server2008即将到来。
主要应用范围:部分企业电商(央视购物),使用Windows服务器平台的企业。

Access数据库

美国Microsoft公司于1994年推出的微机数据库管理系统。它具有界面友好,易学易用,开发简单,接口灵活等特点,是典型的新一代桌面关系型数据库管理系统。它结合了
Microsoft JET database Engine和图形用户界面两项特点,是Microsoft office的成员之一。

四、常用非关系型数据库产品介绍

Memcached(key-value)

Memcached是一个开源的,高性能的,具有分布式内存对象的缓存系统。通过它可以减轻数据库负载,加速动态的web应用,最初版本由LiveJounrnal的Brad Firzpatrick在2003年开发完成。目前全球有非常多的用户都在使用它来构建自己的大负载网站或提高自己的高仿问网站的响应速度。注意:memcache是这个项目的名称,而memcached是服务器端的主程序文件名。
缓存一般用来保存一些经常被存取的对象或数据(列如,浏览器会把经常访问的网页缓存起来一样),通过缓存来存取的对象或数据要比在硬盘上存取快很多,前者是内存,后者是磁盘。Memcached是一种纯内存缓存系统,把经常存放的对象或数据缓存在memcached的内存中,这些被缓存的数据被程序通过API的方式被存取,memcached里面的数据就像一张巨大的HASH表,数据以Key-value对的方式存在。Memcached通过缓存经常被存取的对象或数据,从而减轻频繁读取数据库的压力,提高网站的响应速度,构建出速度更快的可扩展性web应用。官方:http://memcached.org/
由于memcached为纯内存缓存软件,一旦重启所有数据都会丢失,因此,新浪网基于memcached开发了一个开源项目memcachedb。通过为memcached增加berkeleyDB的持久化存储机制和异步主辅复制机制,使memcached具备了事务恢复能力,持久化数据存储能力和分布式复制能力,memcachedb非常适合需要超高性能读写速度,持久化保存的应用场景,但是最近几年逐渐被其他的持久化产品替代例如redis。

Redis(key-value)

和memcached类似,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客户端,使用很方便。
官方:https://redis.io/
Redis特点:

  • 支持内存缓存,这个功能相当于memcached
  • 支持持久化,这个功能相当于memcachedb,ttserver
  • 数据类型更丰富。比其他key-value库功能更强
  • 支持集群,分布式
  • 支持队列等特殊功能
    应用:缓存从存取memcached更改存取redis

MongoDB(Document-oriented)

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongodb最大的特点是他支持的查询语言非常强大,其语法有点儿类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据库建立索引。它的特点是高性能,易部署,易使用,存储数据非常方便
主要功能特性:

  • 面向集合存储,易存储对象类型的数据
    “面向集合”意思是数据被分组存储在数据集中,被称为一个集合。每个几个在数据库
    中都有一个唯一的标识名,并且可以包含无限数目的文档集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)
  • 模式自由
    模式自由,意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结
    构定义。如果需要,你完全可以把不同结构的文件存储在同一个数据库里。
  • 支持动态查询
  • 支持完全索引,包含内部对象
  • 支持查询
  • 支持复制和故障恢复
  • 使用高效的二进制数据存储,包括大型对象(如视频等)
  • 自动处理碎片,以支持云计算层次的扩展性
  • 支持BUBY,PYTHON,JAVA,C++,PHP等多种语言
  • 文件存储格式为BSON(一种JSON的扩展)
    BSON存储形式是指:存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各种复杂的文件类型
  • 可通过网络访问
    MongoDB服务端可运行在Linux,windows或os X平台,支持32为和64位应用,默认端口为27017,推荐运行在64位平台。
    MangoDB把数据库存储在文件中,(默认路径为:/data/db),为提高效率使用内存映射文件进行管理。
posted @ 2018-06-08 22:00  baishuchao  阅读(2067)  评论(0编辑  收藏