曹阳的博客 仅用于学习和分享

数据库的总结

2019-10-15

数据库的总结 NoSQL与关系型数据库的对比

数据库

一、概念

  1. 数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合

  2. 数据库管理系统是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。

二、分类

  1. 关系型数据库

  2. NOSQL

三、NoSQL与关系型数据库的区别

  1. 存储方式

    传统的关系型数据库采用表格的储存方式, 数据以行和列的方式进行存储,要读取和查询都十分方便。

    非关系型数据不适合这样的表格存储方式,通常以数据集的方式,大量的数据集中存储在一起,类似于键值对、图结构或者文档

  2. 存储结构

    关系型数据库按照结构化的方法存储数据, 每个数据表都必须对各个字段定义好(也就是先定义好表的结构),再根据表的结构存入数据,这样做的好处就是由于数据的形式和内容在存入数据之前就已经定义好了,所以整个数据表的可靠性和稳定性都比较高,但带来的问题就是一旦存入数据后,如果需要修改数据表的结构就会十分困难。

    NoSQL数据库由于面对的是大量非结构化的数据的存储,它采用的是动态结构,对于数据类型和结构的改变非常的适应,可以根据数据存储的需要灵活的改变数据库的结构。

  3. 存储规范

    关系型数据库为了避免重复、规范化数据以及充分利用好存储空间,把数据按照最小关系表的形式进行存储,这样数据管理的就可以变得很清晰、一目了然,当然这主要是一张数据表的情况。如果是多张表情况就不一样了,由于数据涉及到多张数据表,数据表之间存在着复杂的关系,随着数据表数量的增加,数据管理会越来越复杂。

    NoSQL数据库的数据存储方式是用平面数据集的方式集中存放,虽然会存在数据被重复存储,从而造成存储空间被浪费的问题(从当前的计算机硬件的发展来看,这样的存储空间浪费的问题微不足道),但是由于基本上单个数据库都是采用单独存放的形式,很少采用分割存放的方式,所以这样数据往往能存成一个整体,这对于数据的读写提供了极大的方便。

  4. 扩展方式

    关系型数据库将数据存储在数据表中,数据操作的瓶颈出现在多张数据表的操作中,而且数据表越多这个问题越严重,如果要缓解这个问题,只能提高处理能力,也就是选择速度更快性能更高的计算机,这样的方法虽然可以一定的拓展空间,但这样的拓展空间一定有非常有限的,也就是关系型数据库只具备纵向扩展能力。

    NoSQL数据库由于使用的是数据集的存储方式,它的存储方式一定是分布式的,它可以采用横向的方式来开展数据库,也就是可以添加更多数据库服务器到资源池,然后由这些增加的服务器来负担数据量增加的开销。

  5. 查询方式

    关系型数据库采用结构化查询语言(即SQL)来对数据库进行查询,SQL早已获得了各个数据库厂商的支持,成为数据库行业的标准,它能够支持数据库的CRUD(增加,查询,更新,删除)操作,具有非常强大的功能,SQL可以采用类似索引的方法来加快查询操作。

    NoSQL数据库使用的是非结构化查询语言(UnQL),它以数据集(像文档)为单位来管理和操作数据,由于它没有一个统一的标准,所以每个数据库厂商提供产品标准是不一样的,NoSQL中的文档Id与关系型表中主键的概念类似,NoSQL数据库采用的数据访问模式相对SQL更简单而精确。

  6. 规范化

    在数据库的设计开发过程中开发人员通常会面对同时需要对一个或者多个数据实体(包括数组、列表和嵌套数据)进行操作,这样在关系型数据库中,一个数据实体一般首先要分割成多个部分,然后再对分割的部分进行规范化,规范化以后再分别存入到多张关系型数据表中,这是一个复杂的过程。好消息是随着软件技术的发展,相当多的软件开发平台都提供一些简单的解决方法,例如,可以利用ORM层(也就是对象关系映射)来将数据库中对象模型映射到基于SQL的关系型数据库中去以及进行不同类型系统的数据之间的转换。

    对于NoSQL数据库则没有这方面的问题,它不需要规范化数据,它通常是在一个单独的存储单元中存入一个复杂的数据实体。

  7. 事务性

    关系型数据库强调ACID规则(原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)),可以满足对事务性要求较高或者需要进行复杂数据查询的数据操作,而且可以充分满足数据库操作的高性能和操作稳定性的要求。并且关系型数据库十分强调数据的强一致性,对于事务的操作有很好的支持。关系型数据库可以控制事务原子性细粒度,并且一旦操作有误或者有需要,可以马上回滚事务。而NoSQL数据库强调BASE原则(基本可用(Basically Availble)、软状态(Soft-state)、最终一致性(Eventual Consistency)),它减少了对数据的强一致性支持,从而获得了基本一致性和柔性可靠性,并且利用以上的特性达到了高可靠性和高性能,最终达到了数据的最终一致性。

    NoSQL数据库虽然对于事务操作也可以使用,但由于它是一种基于节点的分布式数据库,对于事务的操作不能很好的支持,也很难满足其全部的需求,所以NoSQL数据库的性能和优点更多的体现在大数据的处理和数据库的扩展方面。

  8. 读写性能

    关系型数据库十分强调数据的一致性,并为此降低读写性能付出了巨大的代价,虽然关系型数据库存储数据和处理数据的可靠性很不错,但一旦面对海量数据的处理的时候效率就会变得很差,特别是遇到高并发读写的时候性能就会下降的非常厉害。

    NoSQL数据库相对关系型数据库优势最大的恰恰是应对大数据方面,也就是对于大量的每天都产生非结构化的数据能够高性能的读写,这是因为NoSQL数据库是按key-value类型进行存储的,以数据集的方式存储的,因此无论是扩展还是读写都非常容易,并且NoSQL数据库不需要关系型数据库繁琐的解析,所以NoSQL数据库大数据管理、检索、读写、分析以及可视化方面具有关系型数据库不可比拟的优势。

  9. 授权方式

    关系型数据库常见的有Oracle,SQLServer,DB2,Mysql,除了Mysql大多数的关系型数据库如果要使用都需要支付一笔价格高昂的费用,即使是免费的Mysql性能也受到了诸多的限制。

    对于NoSQL数据库,比较主流的有redis,HBase,MongoDb,memcache等产品,通常都采用开源的方式,不需要像关系型数据库那样,需要一笔高昂的花费。

关系型数据库

一、概念

  1. 在一个给定的应用领域中,所有实体实体之间联系的集合构成一个关系数据库。

  2. 关系数据库的型与值

    关系数据库的型称为关系数据库模式,是对关系数据库的描述,若干域的定义,在这些域上定义的若干关系模式;

    关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常简称为关系数据库。

二、分类

  1. 桌面数据库

    例如Access、FoxPro和dBase等

    桌面数据库用于小型的、单机的应用程序,它不需要网络和服务器,实现起来比较方便,但它只提供数据的存取功能。

  2. 客户/服务器数据库

    例如SQL Server、Oracle和Sybase等

    客户/服务器数据库主要适用于大型的、多用户的数据库管理系统,应用程序包括两部分:一部分驻留在客户机上,用于向用户显示信息及实现与用户的交互;另一部分驻留在服务器中,主要用来实现对数据库的操作和对数据的计算处理。

三、关系模型结构

  1. 单一的数据结构—-关系(表文件)

    关系数据库的表采用二维表格来存储数据,是一种按行与列排列的具有相关信息的逻辑组,它类似于Excle工作表。

    一个数据库可以包含任意多个数据表。

    在用户看来,一个关系模型的逻辑结构是一张二维表,由行和列组成。这个二维表就叫关系,通俗地说,一个关系对应一张表。

  2. 元组(记录)

    表中的一行即为一个元组,或称为一条记录。

  3. 属性(字段)

    数据表中的每一列称为一个字段,表是由其包含的各种字段定义的,每个字段描述了它所含有的数据的意义,数据表的设计实际上就是对字段的设计。

    创建数据表时,为每个字段分配一个数据类型,定义它们的数据长度和其他属性。

    字段可以包含各种字符、数字、甚至图形。

    如错误!未找到引用源。

  4. 属性值

    行和列的交叉位置表示某个属性值,如“数据库原理”就是课程名称的属性值。

  5. 主码

    主码(也称主键或主关键字),是表中用于唯一确定一个元组的数据。

    关键字用来确保表中记录的唯一性,可以是一个字段或多个字段,常用作一个表的索引字段。

    每条记录的关键字都是不同的,因而可以唯一地标识一个记录,关键字也称为主关键字,或简称主键。

    如错误!未找到引用源。

  6. 属性的取值范围。

  7. 关系模式

    关系的描述称为关系模式。

    对关系的描述,一般表示为:关系名(属性1,属性2…..属性n)。

    例如上面的关系可描述为:课程(课程号、课程名称、学分、任课老师)。

非关系型数据库

一、概念

  1. 非关系型数据库是分布式的非关系型的不保证遵循ACID原则的数据存储系统。

  2. NoSQL最常见的解释是“non-relational”, “Not Only SQL”也被很多人接受。

二、分类

  1. 键值对存储(key-value)

    代表软件:Redis

    优点:查找速度快

    缺点:数据无结构化,通常只被当作字符串或者二进制数据

    应用场景:内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。

    数据模型:Key 指向 Value 的键值对,通常用hash table来实现

  2. 列存储

    代表软件:Hbase

    优点:查找速度快,可扩展性强,更容易进行分布式扩展

    缺点:功能相对局限

    应用场景:分布式的文件系统

    数据模型:以列簇式存储,将同一列数据存在一起实现

  3. 文档数据库存储

    代表软件:MongoDB

    优点:数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构

    缺点:查询性能不高,而且缺乏统一的查询语法。

    应用场景:Web应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容)

    数据模型:Key-Value对应的键值对,Value为结构化数据

  4. 图形数据库存储

    代表软件:InfoGrid

    优点:利用图结构相关算法。比如最短路径寻址,N度关系查找等

    缺点:很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。

    应用场景:社交网络,推荐系统等。专注于构建关系图谱

    数据模型:图结构

三、特点

  1. 易扩展

    NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。无形之间,在架构的层面上带来了可扩展的能力。

  2. 大数据量,高性能

    NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。一般MySQL使用Query Cache。NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说性能就要高很多。

  3. 灵活的数据类型

    NoSQL无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是——个噩梦。这点在大数据量的Web 2.0时代尤其明显。

  4. 高可用

    NoSQL在不太影响性能的情况,就可以方便地实现高可用的架构。比如Cassandra、HBase模型,通过复制模型也能实现高可用。

四、应用场景

  1. 数据模型比较简单

  2. 需要灵活性更强的IT系统

  3. 对数据库性能要求较高

  4. 不需要高度的数据一致性

  5. 对于给定key,比较容易映射复杂值的环境


Content