什么是数据库?
数据库就是一个存放计算机数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来对数据进行组织和存储的,可通过数据库提供的多种方法来管理其中的数据。
数据(Data):描述事务的符号记录,包括数字、文字、图像等,以“记录”的形式按统一的格式进行存储。
表:将不同的记录组织在一起,用来存储具体数据。
数据库:表的集合,是存储数据的仓库。以一定的组织方式存储的相互有关的数据集合。
数据库系统:一个人机系统,由硬件、OS、数据库、DBMS、应用软件和数据库用户组成。用户可以通过DBMS或应用程序操作数据库。
数据库管理系统(DBMS):数据库管理系统时实现对数据库资源有效组织、管理和存取的系统软件。
主要功能
数据库的建立和维护功能
:包括建立数据库的结构和数据的录入与转换、数据库的 转储与恢复、数据库的重组与性能监视等功能。
数据定义功能
:包括定义全局数据结构、局部逻辑数据结构、存储结构、保密模式 及信息格式等功能。保证存储在数据库中的数据正确、有效和相容,以防止不合语 义的错误数据被输入或输出。
数据操纵功能
:包括数据查询统计和数据更新两个方面。
数据库的运行管理功能
:这是数据库管理系统的核心部分,包括并发控制、存取控制、数据库内部维护等功能。
通信功能
:DBMS 与其他软件系统之间的通信,如 Access 能与其他 Office 组件进行 数据交换。
最常用的数据库模式主要有两种,即关系型数据库(SQL)和非关系型数据库(NoSQL)。
关系型数据库:储存的往往是字符、字符串、数值、布尔值等。
非关系型数据库:储存的往往是图片、视频、语音等。
主流的关系型数据库有Oracle、Microsoft SQL Server、MySQL/MariaDB等。
主流的非关系型数据库有MongoDB、Memcached、Redis。
关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。在关系型数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过这些关联的表格分类、合并、连接或选取等运算来实现数据的管理。
关系模型可用简单的“实体-关系”(E-R)图来表示,其中包含了实体(数据对象)、关系和属性三个要素。
实体:也称为实例,对应现实世界中可区别于其他对象的事件或事物。
属性:实体所具有的某一特性,一个实体可以有多个属性。
联系:实体集之间的对应关系称为联系,也称为关系。
所有实体及实体之间联系的集合构成一个关系数据库。
关系Relational :关系就是二维表,其中:表中的行、列次序并不重要
行row:表中的每一行,又称为一条记录record
列column:表中的每一列,称为属性,字段,域field
主键Primary key:PK , 用于惟一确定一个记录的字段,一张表只有一个主键
域domain:属性的取值范围,如,性别只能是’男’和’女’两个值,人类的年龄只能0-150。
关系型数据库诞生距今已有40多年了,从理论产生到发辰到实现产品,例如:常见的MySQL和Oracle数据库,Oracle在数据库领域里上升到了霸主地位,形成每年高达数百亿美元的庞大产业市场,而MySQL也是不容忽视的数据库,以至于被Oracle重金收购了。
• 关系型数据库在存储数据时实际就是采用的一张二维表(和Word和Excell里表格几乎一样)。
• 市场占有量较大的是MySQL和Oracle数据库,而互联网场景最常用的是MySQL数据库。
• 通过SQL结构化查询语言来存取、管理关系型数据库的数据。
• 关系型数据库在保持数据安全和数据一致性方面很强,遵循ACID理论
非关系型数据库也被称为NoSQL数据库,NoSQL的本意是"Not Only SQL",指的是非关系型数据库,而不是“NoSQL"的意思,因此,NoSQL的产生并不是要彻底否定关系型数据库,而是作为传统数据库的一个有效补充。NoSQL数据库在特定的场景下可以发挥难以想象的高效率和高性能。
随着Web2.0网站的兴起,传统的关系型数据库在应付Web2.0网站,特别是对于规模日益扩大的海量数据,超大规模和高并发的微博、微信、SNS类型的Wb2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,例如:传统的关系型数据库IO瓶颈、性能瓶颈都难以有效突破,于是开始出现了大批针对特定场景,以高性能和使用便利为目的功能特异化的数据库产品。NoSQL(非关系型)类的数据库就是这样的情景中诞生并得到了非常迅速的发展。
NoSQL是非关系型数据库的广义定义。它打破了长久以来关系型数据库与ACID理论大一统的局面。N0SQL数据存储不需要固定的表结构,通常也不存在连续操作。在大数据存取上具备关系型数据库无法比拟的性能优势。该术语(NoSQL)在2009年初得到了广泛认同,
当今的应用体系结构需要数据存储在横向伸缩性上能够满足需求。而NoSQL存储就是为了实现这个需求而诞生的。Google的BigTable与Amazon的Dynamo是非常成功的商业NoSQL实现。些开源的NoSQL体系,如Facebook的Cassandra、Apache的HBase,也得到了广泛认同,Redis,MongoDB也逐渐的越来越受到各类大中小型公司的欢迎和追捧。
• NoSQL数据库不是否定关系型数据库,而是作为关系数据库的一个重要补充。
• NoSQL数据库为了灵活及高性能、高并发而生,忽略影响高性能、高并发的功能。
• 在NoSQL数据库领域,当今的最典型产品为Redis(持久化缓存)、MongoDB、Memcached(纯内存)等。
• NoSQL数据库没有标准的查询语言(SQL),通常使用REST式的数据接口或者查询API。
• 键值数据库就类似传统语言中使用的哈希表。可以通过key来添加、查询或者删除数据,因为使用key主键访问,所以会获得很高的性能及扩展性。
• 键值数据库主要是使用一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key-Vaule模型对于IT系统来说的优势在于简单、易部署、高并发。
• 典型产品:Memcached、Redis、MemcachedB、Berke ley DB
• 列存储数据库将数据存储存在列族(Column Family)中,一个列族存储经常被一起查询的相关数据。举个例子,如果有一个Person类,通常会一起查询他们的姓名和年龄而不是薪资。这种情况下,姓名和年龄就会被放入一个列族中,而薪资则在另一个列族中。这部分数据库通常用来应对分布式存储的海量数据。键仍然存在,但是他们的特点是指向了多个列。这些列是由列家族来安排的。
• 典型产品:Cassandra、HBase
• 文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。
• 面向文档数据库会将数据以文档的形式存储。每个文档都是自包含的数据单元,是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对像。数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用XML、JSON或者JsonB等多种形式存储。
• 典型产品:MongDB、CouchDB
• 图形数据库允许我们将数据以图的方式存储。实体会被作为顶点,而实体之间的关系则会被作为边。比如我们有三个实体,Steve Jobs、Apple和Next,则会有两个“Founded by"的边将Apple和Next连接到Steve Jobs。
• 图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据查询需要定制数据模型。许多NoSQL数据库都有REST的数据接口或者查询API。
• 典型产品:Neo4J、InfoGr id
0 racle前身叫SDL,由Larry Ellison和另两个编程人员在1977创办,他们开发了自己的拳头产品,在市场上大量销售,1979年,Oracle公司引入了第一个商用SQL关系数据库管理系统。Oracle公司是最早开发关系数据库的厂商之一,其产品支持最广泛的操作系统平台。目前Oracle关系数据库产品的市场占有率数一数二。
Oracle公司是目前全球最大的数据库软件公司,也是近年业务增长极为迅速的软件提供与服务商。
2007年7月12日,甲骨文公司在美国纽约宣布推出数据库Oracle llg,这是Oracle数据库的最新版本。Oracle介绍说,Oraclellg有400多项功能,经过了1500万个小时的测试,开发工作量达到了3.6万人/月。Oraclellg在安全,XML DB,备份等方面得到了很大提升。
主要应用范围:传统大企业,大公司,政府,金融,证券等等。
MySQL数据库是一个中小型关系型数据库管理系统,软件开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购,后Sun公司又被Oracle公司收购。目前MySQL被广泛地应用在Internet上的大中小型网站中。由于其体积小、速度快,总体拥有成本低,尤其是开放源码这一特点,许多大中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库,甚至国内知名的淘宝网也选择弃用Oracle而更换为更开放的MySQL。
MySQL数据库主要应用范围:互联网领域,大中小型网站,游戏公司,电商平台等等。
MariaDB数据库管理系统是MySQL数据库的一个分支,主要由开源社区维护,采用GPL授权许可。开发这个MariaDB数据库分支的可能原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此MySQL开源社区采用分支的方式来避开这个风险。
开发MariaDB数据库的目的是完全兼容MySQL数据库,包括APl和命令行,使之能轻松的成为MySQL的代替品。在存储引擎方面,使用XtraDB(英语:XtraDB)来代替MySQL的InnoDB。MariaDB由MySQL的创始人Michael Widenius(英语:Michael Widenius)主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中,MariaDB数据库的名称来自MySQL的创始人Michael Widenius的女儿Maria的名字。
MariaDB基于事务的Maria存储引擎,替换了MySQL的MylSAM存储引擎,它使用了Percona的KtraDB(InnoDB的变体)。这个版本还包括了PrimeBaseXT(PBXT)和FederatedX存储擎。
Microsoft SQL Server是微软公司开发的大型关系型数据库系统。1987年,微软和IBM合作开发完成OS/2,IBM在其销售的OS/2 ExtendedEdition系统中绑定了OS/2 DatabaseManager,而微软产品线中尚缺少数据库产品。为此,微软将目光投向Sybase,同Sybase签订了合作协议,使用Sybase的技术开发基于OS/2平台的关系型数据库。1989年,微软发布了SQL Server1.0版。Microsoft在与Sybase分道扬镳后,随后在其6.05和7.0版本中重写了核心数据库系统。
SQL Server的功能比较全面,效率高,可以作为中型企业或单位的数据库平台。
SQL Server可以与Windows操作系统紧密集成,不论是应用程序开发速度还是系统事务处理运行速度,都能得到较大的提升。对于在Windows平台上开发的各种企业级信息管理系统来说,不论是C/S(客户机/服务器)架构还是B/S(浏览器/服务器)架构,SQL Server都是一个很好的选择,SQL Server的缺点是只能在Windows系统下运行。
主要应用范围:部分企业电商,使用windows服务器平台的企业。
DB2、PostgreSQL、Informiⅸ、Sybase等。这些关系型数据库逐步的淡出了普通运维的视线,特别是互联网公司几乎见不到。
Memcache是一个开源的、高性能的、具有分布式内存对象的缓存系统。通过它可以减轻数据库负截,加速动态的Web应用,最初版本由LiveJoumal的Brad Fitzpatrick在2003年开发完成。目前全球有非常多的用户都在使用它来构建自己的大负载网站或提高自己的高访问网站的响应速度。
注意:Memcache是这个项目的名称,而Memcached是服务器端的主程序文件名。
缓存一般用来保存一些经常被存取的对象或数据(例如,浏览器会把经常访问的网页缓存起来一样),通过缓存来存取对象或数据要比在磁盘上存取快很多,前者是内存,后者是磁盘。Memcached是一种纯内存缓存系统,把经常存取的对象或数据缓存在Memcached的内存中,这些被缓存的数据被程序通过API的方式被存取,Memcached里面的数据就像一张巨大的HASH表,数据以Key-Value对的方式存在。Memcached通过缓存经常被存取的对象或数据,从而减轻频繁读取数据库的压力,提高网站的响应速度,构建出速度更快的可扩展的Web应用。
由于Memcached为纯内存缓存软件,一旦重启所有数据都会丢失,因此,新浪网基于Memcached开发了一个开源项目MemcacheDB。通过为Memcached增加Berkeley DB的持久化存储机制和异步主辅复制机制,使Memcached具备了事务恢复能力、持久化数据存储能力和分布式复制能力,MemcacheDB非常适合需要超高性能读写速度、持久化保存的应用场景,但是最近几年逐渐被其他的持久化产品替代例如Redis。
官方:http://Memcached.orgl
Redis是一个Key-Value型存储系统。但Redisi支持的存储value类型相对更多,包括string(字符串)、Iist(链表)、set(集合)和zset(有序集合)等。这些数据类型都支持push/pop、add/remove及取交集、并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis支持各种不同方式的排序。与Memcached一样,为了保证效率,Redis的数据都是缓存在内存中。区别是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了Master-Slave(主从)同步,
Redis是一个高性能的Key-Value数据库。Redis的出现,很大程度补偿了Memcached这类Key-Value存储的不足,在部分场合可以对关系数据库綱很好的补充作用。它提供了Python、Ruby、Erlang、PHP客户端,使用很方便。
Redis特点:
1.支持内存缓存,这个功能相当于Memcached。
2.支持持久化存储,这个功能相当于MemcacheDB,Ttserver。
3.数据类型更丰富。比其他Key-Value库功能更强。
4.支持主从集群,分布式。
5.支持队列等特殊功能。
应用:缓存从存取Memcached更改存取Redis。
官方:http://www.Redis.io/documentation
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,类似json的Bjson格式,因此可以存储比较复杂的数据类型。MongoDB最大的特点是他支持查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而目还支持对数据建立索引。它的特点是高性能、易部署、易使用,存储数据非常方便。
主要功能特性:
1.面向集合(Collenction-Orented)存储,易存储对象类型的数据,数据被分组存储在数据集中,被称为一个集合(Collenction)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文挡。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)。
2.模式自由(Schema-Free),意味着对于存储在MongoDB数据库中的文件,我们不需要知道它的任何结构定义。如果需要,你完全可以把不同结构的文件存储在同一个数据库里。
3.支持动态查询
4.支持完全索引,包含内部对象
5.支持查询
6.支持复制和故障恢复
7.使用高效的二进制数据存储,包括大型对象(如视频等)
8.自动处理碎片,以支持云计算层次的扩展性
9.支持Ruby,Python,Java,C++,PHP等多种语言
10.文件存储格式为Bson(一种Json的扩展)Bson (Binary Serialized document Format)存储形式是指:存储在集合中的文档,被存储为键值对的形式,建用于唯一标识一个文档,为字符串类型,而值则可以使各种复杂的文件类型。
11.可以通过网络访问
MongoDB服务端可运行在Linux、Windows或OS X平台,支持32位和64位应用,默认端口为27017,推荐运行在64位平台。MongoDB把数据存储在文件中(默认路径为:/data/db),为提高效率使用内存映射文件进行管理。
数据库类型 | 特性 | 优点 | 缺点 |
---|---|---|---|
关系型数据库 | 1、关系型数据库,是指采用了关系模型来组织数据的数据库 2、关系型数据库的最大特点就是事务的一致性 3、简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。 |
1、容易理解:二维表结构是非常贴近逻辑世界一个概念,关系模型相对网状、层次等其他模型来说更容易理解: 2、使用方便:通用的SQL语言使得操作关系型数据库非常方便: 3、易于维护:丰富的完整性(实体完整性、参照完整性和用户定义 的完整性)大大减低了数据冗余和数据不一致的概率: 4、支持SQL,可用于复杂的查询。 |
1、为了维护一致性所付出的巨大代价就是其读写性能比较差: 2、国定的表结构 3、高井发读写需求 4、海量数据的高效率演写 |
非关系型数据库 | 1、使用键值对存储数据: 2、分布式: 3、一股不支持ACID特性; 4、非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。 |
1、无需经过s层的解析,读写性能很高: 2、基于键值对,数据没有用合性,容易扩展: 3、存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,而关系型数据库则只支持基础类型。 |
1、不提供sq支持,学习和使用成本较高; 2、无事务处理,附加功能和报表等支持也不好; |
总结来说:
关系型数据库遵循ACID规则,而非关系型没有。
关系型数据库针对结构化数据,而非关系型数据库针对非结构/半结构化化数据。
END