01
什么是关系型数据库?
关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。
关系型数据库的特点
1.存储方式:
采用表格进行储存,数据以行和列的方式进行存储,读取和查询十分方便
2.存储结构:
结构化的方法存储数据,数据表必须定义好各个字段,再根据表的结构存入数据。
a.优点:数据的形式和内容在存入数据之前就已经定义好了,所以整个数据表的可靠性和稳定性都比较高。
b.缺点:一旦存入数据后修改表的结构会很困难
3.存储规范:
关系型数据库为了避免重复,规范化数据以及充分利用好存储空间,把数据按照最小关系表的形式进行存储,这样数据管理就可以变得很清晰,一目了然,当然这是一张表的情况。多张数据表就不是这样了,由于涉及到多张数据表,数据表之间存在着复杂的关系,随着数据表数量的增加,数据管理会越来越复杂。
4.扩展方式:
由于关系型数据库将数据存储在数据表中,数据操作的瓶颈出现在多张数据表的操作中,而且数据表越多这个问题越严重,如果要缓解这个问题,只能提高处理能力,也就是选择速度更快性能更高的计算机,这样的方法虽然可以一定的拓展空间,但这样的拓展空间一定有非常有限的,也就是关系型数据库只具备纵向扩展能力
5.查询方式:
采用结构化查询语言(SQL),SQL可以采用类似索引的方法加快查询操作
6.规范化:
在数据库的设计开发过程中开发人员通常会面对同时需要对一个或者多个数据实体(数组,列表,嵌套数据)进行操作,这样在关系型数据库中,一个数据实体一般首先要分割成多个部分,然后再对分割的部分进行规范化,规范化以后再分别存入到多张数据表中,这是一个复杂的过程。好消息是随着软件技术的发展,相当多的软件开发平台都提供一些简单的解决方法,例如,可以利用ORM层(也就是对象关系映射)来将数据库中对象模型映射到基于SQL的关系型数据库中去以及进行不同类型系统的数据之间的转换。
7.事务性:
ACID原则:原子性,一致性,隔离性,持久性
8.读写性能:
关系型数据库十分强调数据的一致性,并为此降低读写性能付出了巨大的代价。虽然关系型数据存储数据和处理数据的可靠性很不错,但一旦面对海量数据的处理时候效率会变得很差,特别是遇到高并发读写的时候性能会下降的非常厉害。
关系型数据库的设计原则
1.命名规范化:在概念模型中对于出现的实体,属性以及相关表的结构要统一
2.数据的一致性和完整性:
a.在关系型数据库中可以采用域完整性,实体完整性和参照完整性等约束条件来满足数据的一致性和完整性。用check,default,null,主键和外键约束来实现。
3.数据冗余:
数据库中的数据尽可能减少冗余,让重复数据减少到最少。
4.范式理论:3NF范式
a.通常认为3NF范式在性能和扩展性和数据完整性方面达到了最好的平衡。因此一般数据库设计要求达到3NF,消除数据中依赖的不合理部分,最终实现使一个关系仅描述一个实体或者实体间一种联系的目的。
常见关系型数据库:
Oracle,DB2,MySQL,SQL Server,Access等,每个数据库的语法和功能也各具特色。
02
什么是非关系型数据库?
NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,特别是大数据应用难题。
基本含义:
NoSQL最常见的解释:“non-relational”,”Not Only SQL”。泛指非关系型数据库,区别于关系数据库,它们不保证ACID特性。
NoSQL的特点:
1.易扩展:数据之间没有关系,非常容易扩展
2.大数据量,高性能
a.具备非常高的读写性能,尤其在大数据量下
b.数据结构简单,一般MySQL使用Cache Query。NoSQL的Cache是记录级的,是一种细粒度的Cache,性能更高。
3.灵活的数据模型
a.无需实现为要存储的数据建立字段,随时可以存储自定义的数据格式
4.高可用:
a.NoSQL在不太影响性能的情况下,可以方便的实现高可用架构。比如Cassandra,Habase模型,通过复制模型也能实现高可用。
NoSQL的体系框架:由下至上
1.数据持久层:定义数据存储格式
2.整体分布层:定义数据是如何分布的
3.数据逻辑模型层:数据的逻辑表现形式
4.接口层:方便的数据调用接口
NoSQL的适用场景:
1.数据模型比较简单
2.灵活性更强的IT系统
3.对数据库性能要求过高
4.不需要数据高度一致性
5.对于给定Key,比较容易映射复杂值的环境
NoSQL的常见数据库及对比: