12:关系 & NoSQL 14:扩展机制(分区 & MySQL主从复制)& 缓存机制 15:关系 & 文件 & 内存 17:ORM 18:分布式缓存(Redis & Memcache)
关系型数据库:是建立在关系模型基础上的数据库,借助集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。简单说,关系型数据库是由多张能互相联接的二维行列表格组成的数据库
NoSQL:泛指非关系型的数据库。随着互联网的兴起,传统的关系数据库在应付超大规模和高并发的纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储
内存数据库:将数据库整体存储在内存中,提高性能
设计难度 | 冗余程度 | 数据架构 | 扩展性 | |
---|---|---|---|---|
关系数据库 | 数据结构需要符合关系模式,难度大 | 遵守数据库范式,冗余少 | 以数据库为中心组织、管理数据 | 数据库独立于应用系统,数据库系统接口标准化,易于在不同应用之间共享数据 |
文件系统 | 针对特定的应用系统,难度小 | 多个文件中复制相同的数据属性,冗余大 | 以应用系统为中心组织、管理数据 | 符合特定应用系统要求的文件数据库很难在不同应用系统之间共享 |
数据模型 | 读写性能 | 存储容量 | 可靠性 | |
---|---|---|---|---|
关系数据库 | 关系模式 | 外存读写,较低 | 磁盘存储,容量大 | 内建恢复机制,高 |
内存数据库 | Key-Value模式 | 内存直接读写,高 | 内存存储,容量受限 | 恢复机制复杂,较低 |
特征 | 关系数据库 | NoSQL |
---|---|---|
并发支持 | 支持并发,效率低 | 并发性能高 |
存储与查询 | 关系表方式存储,sql查询 | 海量数据存储,查询效率高 |
扩展方式 | 向上扩展 | 向外(水平)扩展 |
索引方式 | B树、哈希 | 键值索引 |
应用领域 | 通用 | 特定 |
数据一致性 | 实时一致性 | 弱一致性 |
数据类型 | 结构化数据 | 非结构化,灵活支持多种类型的的数据格式 |
事务 | 高事务性 | 弱事务性 |
水平扩展 | 弱 | 强 |
数据容量 | 有限数据 | 海量数据 |
可用性 | 基于分布式数据存储,不存在单点故障和性能瓶颈,可用性高 |
缓存技术
MemCache: 高性能的分布式的内存对象缓存系统,用于动态Web应用以减轻数据库负载。在内存里维护一个统一的巨大的hash表,能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。
Redis: 一个开源的使用ANSI C语言编写,支持网络,可基于内存亦可持久化的日志型,key-value数据库,并提供多种语言的API。
二者区别:
1.都是基于内存数据库,都支持key-value数据类型。Memcache可用于缓存图片、视频等;Redis支持list、set、hash等数据结构的存储。
2.Redis并不是所有的数据都是一直存储在内存中的。当物理内存使用完时,Redis可以将一些很久没有用的value交换到磁盘。
3.Redis很多方面支持数据库的特性,可以说他就是一个数据库系统,而Memcache只是简单地K/V缓存。
MemCache | Redis | |
---|---|---|
数据类型 | 简单Key/Value结构 | 还提供List、Set、Hash等数据结构的存储 |
持久性 | 不支持 | 支持 |
分布式存储 | Memcache服务器需要通过hash一致化来支撑主从结构 | 多种方式,主从、Sentinel、Cluster等 |
多线程支持 | 支持 | 把任务封闭在一线程中,不支持 |
内存管理 | 按照既定的内存,将内存切割成特定长度来存储相应的数据 | 无 |
事务支持 | 弱支持,只能保证事务中的每个操作连续执行 | 有限支持 |
ORM
object-Relational Mapping,关系型数据库和对象之间一个映射,这样我们在具体的数据库操作的时候,就不需要再去和复杂的SQL语句打交道,只需要像平时操作对象一样即可。
面向对象编程把所有实体看成对象,关系型数据库则是采用实体之间的关系连接数据。很早就有人提出,关系也可以用对象表达,这样的话就能使用面向对象编程,来操作关系型数据库。
ORM把数据映射成对象,如:
数据库的表(table) 类(class)
记录(record,行数据) 对象(object)
对象(field) 对象的属性(attribute)
优点 | 缺点 | |
ORM | 1.大大降低学习和开发成本 2.程序员不用再写SQL来进行数据库操作 3.减少程序的代码量 4.降低由于SQL代码质量差异而带来的影响 | 1.不太容易处理复杂查询语句 2.性能较直接用SQL差 |
优点 | 缺点 | |
在线访问 | 1.性能比直接用SQL好 2.可以处理复杂的查询语句 | 1.程序员必须懂SQL语句 2.修改维护相对困难 |
分布式数据库
分布式数据库是由一组数据组成的,这组数据分布再计算网络的不同计算机上,网络中的每个节点具有独立处理的能力(场地自治),它可以执行局部应用,同时,每个节点也能通过网络通信子系统执行全局应用。分布式数据库系统是集中式数据库系统技术的基础上发展起来的。具有如下特点:
数据独立性。在分布式数据库系统中,数据独立性这一特点更加重要,并具有更多的内容。除了数据的逻辑独立性与物理独立性外,还有数据分布独立性(分布透明性)。
集中与自治共享结合的控制结构。各局部的DBMS可以独立地管理局部数据库,具有自治的功能。同时,系统又设有集中控制机制,协调各局部DBMS的工作,执行全局应用。
适当增加数据冗余度。在不同的场地存储同亦一数据的多个副本,这样可以提高系统的可靠性和可用性,同时也能提高系统性能。
全局的一致性、可串行性和可恢复性。
优点:
1.解决企业部门分散而数据需要相互联系的问题。
2.扩展影响较小
3.满足均衡负载
4.全局应用
5.相当规模的分布式数据库系统出现在故障的概率上不会比集中数据库系统低,但由于其故障的影响仅限于局部数据应用,因此就整个系统来说,可靠性比较高。
数据仓库集成 把多种来源的数据集中在一起,建立数据仓库,所有数据都驻留在单个数据库服务器上,配置大型处理器和储存容量。数据仓库主要用于决策支持,在数据处理过程中强调分析其特点是:集成的数据 面向主题 数据相对稳定 包含历史信息
四个层次:
数据源:基础
数据的存储与管理:核心
OLAP(联机分析处理)服务器:有效集成 多维模型组织 多角度 多层次分析 并发趋势
前端工具:包括各种报表、查询、数据分析、数据挖掘工具以及各种基于数据仓库或数据集市的应用开发工具。
商业智能
BI:数据预处理 建立数据仓库 数据分析 数据展现