一、二者区别
关系型数据库 | 非关系型数据库 |
支持强大的查询语言 | 支持非常简单的查询语言 |
它具有固定的模式 | 无固定模式 |
遵循ACID(原子性、一致性、隔离性、持久性) | 只有“最终一致” |
支持事务 | 不支持事务 |
二、二者分别都有哪些数据库?
关系型数据库:MySQL 、Oracle 、SQL Server 、PostgreSQL 、DB2··· |
(NOSQL)非关系型数据库:Redis 、Cassandra 、 HBASE 、MongoDB ··· |
三、各自定义
关系型数据库:是建立在关系模型基础上的数据库。关系模型就是指二维表格模型,因而一个关系数据库就是由二维表及其之间的联系组成的一个数据组织。关系型数据库以行和列的形式存储数据,以便于用户理解。这一系列的行和列被称为表,一组表组成了数据库。用户用查询(Query)来检索数据库中的数据。一个Query是一个用于指定数据库中行和列的SELECT语句。 关系型数据库确实是现今使用最广泛、最容易理解和使用的数据库模型。大多数的企业级系统数据库都采用关系型数据库,关系型数据库的概念是掌握数据库开发的基础。 |
NOSQL数据库:NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。泛指非关系型数据库,“NOT ONLY SQL”不仅仅是SQL。 |
四、NOSQL数据库和关系型数据库
(一)、NOSQL数据库
分类 | Examples举例 | 典型应用场景 | 数据模型 | 优点 | 缺点 |
键值(key-value) | Tokyo Cabinet/Tyrant, Redis,Voldemort, Oracle BDB | 内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。 | Key 指向 Value 的键值对,通常用hash table来实现 | 查找速度快 | 数据无结构化,通常只被当作字符串或者二进制数据 |
列存储数据库 | Cassandra, HBase, Riak | 分布式的文件系统 | 以列簇式存储,将同一列数据存在一起 | 查找速度快,可扩展性强,更容易进行分布式扩展 | 功能相对局限 |
文档型数据库 | CouchDB, MongoDb | Web应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容) | Key-Value对应的键值对,Value为结构化数据 | 数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构 | 查询性能不高,而且缺乏统一的查询语法。 |
图形(Graph)数据库 | Neo4J, InfoGrid, Infinite Graph | 社交网络,推荐系统等。专注于构建关系图谱 | 图结构 | 利用图结构相关算法。比如最短路径寻址,N度关系查找等 | 很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。 |
对于NoSQL并没有一个明确的范围和定义,但是他们都普遍存在下面一些共同特征:
不需要预定义模式:不需要事先定义数据模式,预定义表结构。数据中的每条记录都可能有不同的属性和格式。当插入数据时,并不需要预先定义它们的模式。
无共享架构:相对于将所有数据存储的存储区域网络中的全共享架构。NoSQL往往将数据划分后存储在各个本地服务器上。因为从本地磁盘读取数据的性能往往好于通过网络传输读取数据的性能,从而提高了系统的性能。
弹性可扩展:可以在系统运行的时候,动态增加或者删除结点。不需要停机维护,数据可以自动迁移。
分区:相对于将数据存放于同一个节点,NoSQL数据库需要将数据进行分区,将记录分散在多个节点上面。并且通常分区的同时还要做复制。这样既提高了并行性能,又能保证没有单点失效的问题。
异步复制:和RAID存储系统不同的是,NoSQL中的复制,往往是基于日志的异步复制。这样,数据就可以尽快地写入一个节点,而不会被网络传输引起迟延。缺点是并不总是能保证一致性,这样的方式在出现故障的时候,可能会丢失少量的数据。
BASE:相对于事务严格的ACID特性,NoSQL数据库保证的是BASE特性。BASE是最终一致性和软事务。
NoSQL数据库并没有一个统一的架构,两种NoSQL数据库之间的不同,甚至远远超过两种关系型数据库的不同。可以说,NoSQL各有所长,成功的NoSQL必然特别适用于某些场合或者某些应用,在这些场合中会远远胜过关系型数据库和其他的NoSQL。
NOSQL数据库在一下这几种情况下比较适用 |
1、数据模型比较简单 |
2、需要灵活性更强的IT系统 |
3、对数据库性能要求较高 |
4、不需要高度的数据一致性 |
5、对于给定的key,比较容易映射复杂值的环境 |
(二)、关系型数据库
关系型数据库相比较其他数据库的优势: |
1、容易理解:关系模型中的二维表结构非常贴近逻辑世界,相对于网状、层次等其他模型来说更容易理解。 |
2、使用方便:通用的SQL语言使得操作关系型数据库非常方便,只需要使用SQL语言在逻辑层面操作数据库,而完全不必理解其底层实现。 |
3、易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大降低了数据冗余和数据不一致的概率。 |
1、MySQL数据库
2、SQL Server
3、Oracle
作为全球最大的,领先的数据库巨头,Oracle涉及了数据库行业的所有领域,产品线强大,在数据仓库、数据分析、在线事务处理方面都具有很强的表现。具有以下的几个特点:
①、兼容性:方便数据的对接和数据交换
②、移植性:Oracle的产品可运行于大多数硬件与操作系统平台上。可以安装在多种不同的大、中、小型机上;可在VMS、DOS、UNIX、Windows,Linux等多种操作系统下工作,支持多种网络协议,这为以后的系统升级和平台迁移提供了方便。
③、高可用性:在一个大型数据库或数据仓库环境,数据库是基础中的基础,数据库服务的连续性和可用性非常关键,为保证中心数据库的持续可用,Oracle提供了一系列高可用性产品,比如RAC,DataGuard,Streams Replication等。在数据备份方面,提供了全球最为强大的可免费使用的RMAN备份工具,RMAN备份是给予物理级别的,不及备份了数据还备份了数据相关的文件和日志,这样关键时期可以缩短数据恢复的时间。RMAN包含在Oracle数据库的所有版本中。大多数商业数据库,企业级的备份需要支付昂贵的License.
④、开放性:Oracle数据库具有高度的开放性,为了满足学者了解和学习Oracle数据库,Oracle公司提供了开发许可License,这个License不需要支付费用,Oracle官网提供了可下载学习的数据库产品 ,并且在产品中包含了这个License。也就是我们可以合法免费的使用部分Oracle数据库产品进行学习。Oracle支持多种驱动程序和开发工具,开发者可以很轻松的开发基于Oracle数据库的产品。
4、DB2
============================================================================
数据库的介绍
1、什么是数据库DataBase
数据库是按照数据结构来组织、存储和管理数据的仓库。
2、数据库的特点
①、实现数据共享
②、减少数据的冗余
③、数据独立性
④、实现集中控制--数据(展现数据之间的联系)
⑤、安全性、完整、并发
⑥、故障恢复,防止数据被破坏
============================================================================
ACID(一致性、原子性、隔离性、持久性)
ACID指数据库事务正确执行的四个基本要素的缩写。一个支持事务的数据库必须具备的四个特征;否则在事务过程当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。
1、原子性
整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
2、一致性
一个事务可以封装状态改变(除非它是一个只读的)。事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少。
也就是说:如果事务是并发多个,系统也必须如同串行事务一样操作。其主要特征是保护性和不变性(Preserving an Invariant),以转账案例为例,假设有五个账户,每个账户余额是100元,那么五个账户总额是500元,如果在这个5个账户之间同时发生多个转账,无论并发多少个,比如在A与B账户之间转账5元,在C与D账户之间转账10元,在B与E之间转账15元,五个账户总额也应该还是500元,这就是保护性和不变性
3、隔离性
隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。
4、持久性
在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
[事务完成之后,它对于系统的影响是永久性的。该修改即使出现致命的系统故障也将一直保持。]
=================================================================================================================
数据库事务
是指作为单个逻辑工作单元执行的一系列操作, 要么完全地执行,要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。事务是数据库运行中的逻辑工作单位,由DBMS中的事务管理子系统负责事务的处理。参考其他资料!!