主要介绍常见的数据库类型和基础理论

数据库类型

关系型数据库

用简单的二维关系表示数据库模型结构,使用结构化查询语言(SQL)对数据库进行操作。
常见的有Oracle、DB2、SQL Server、Mysql

数据库名称 适用场景 优点 缺点 备注
Oracle 一般用在满足对银行、金融、保险等行业大型数据库的需求上 1、具有很好的开放性 2、能在所有主流平台上运行 性能高、安全性高、风险低 1、对硬件要求很高 管理维护和操作比较复杂且昂贵 厂商:甲骨文,是世界上第一款支持SQL语言的关系型数据库,是世界上最流行的数据库
DB2 比较适合大型的分布式应用系统 1、稳定性、安全性、恢复性都很棒 2、从小规模到大规模的应用都可以使用 用起来繁琐 厂商:IBM
SQL Server 可以作为中型企业或者单位的数据库平台 功能全面、效率高 SQL Server只能在Windows系统中运行,无开放性 厂商:Microsoft
MySQL 广泛应用于互联网上的中小型网站中,并且大型网站也开始使用 1、Mysql是开源的,可以根据个人需要进行修改 2、体积小、速度快、成本低 1、安全系统复杂而且非标准 2、没有一种存储过程语言 3、不支持热备份 厂商:由瑞典MySQL AB公司开发,属于Oracle旗下产品
PostgreSQL 1、相比于MYSQL的各种text字段的限制,PG没有这个限制,可以支持各种大小,丰富的几何类型 2、事务隔离级别比Mysql会更好 3、任何子查询的性能都比Mysql要好 4、稳定性强,并且在高并发的读写条件下性能指标仍然维持在极限情况 有强悍的SQL编程能力 对超大内存下的内存使用率不那么充分 厂商:由瑞典MySQL AB公司开发,属于Oracle旗下产品

非关系型数据库

解决大数据集合多重数据类带来的挑战,尤其是大数据应用难题。常见的非关系型数据库有Memcached、MongoDB、Redis、HBase等

数据库分类

分类 数据模型 备注
键值(key-value)存储数据库 通常用hash表来实现 常用于大量数据的高负载缓存,但是只对部分数据进行高负载查询或者更新的时候,效率则较低
列存储数据库 使用列簇将同一列数据存储在一起 查询速度快,多用于分布式文件系统
文档型数据库 Key-value对应的键值,Value值为结构化数据 较为灵活,但是查询性能不高,可用于Web应用
图像数据库 图结构 使用最短路径寻址,N度查找等

常见数据库

数据库名称 适用场景 备注
Redis 数据变化较少,执行预定义查询、进行数据统计的。如股票价格、数据分析、实时数据收集等 Key-Value型数据库
MongoDB 执行动态查询 对大数据库有性能要求 基于分布式文件的数据库,介于关系型和非关系型数据库之间
Neo4j 适用于存储图形一类的数据,如社会关系、地图和网络拓扑等 高性能NoSQL图形数据库,将数据存储在网络上而不是表中
Casandra 适用于存储特别大的数据,在银行金融业中使用,写比读更快 使用列存储的混合型的非关系的数据库
HBase 对大数据进行随机、实时访问 分布式的、面向列的开源数据库,是一个适合非结构化数据存储的数据库
CouchDB 数据变化较少 面向文档的数据库管理系统

数据库基本理论

ACID理论

数据库系统在写入或者更新资料的过程中,为保证事务的正确性和可靠性必须具备的四个特性。
A-Automicity(原子性)
一个事务中的所有操作,要么全部完成要么全部不完成,不会结束在中间的某个环节。
C- Consistency(一致性)
写入的资料必须完全符合所有的预设规则
I- Isolation(隔离性)
隔离性防止多个事务并发执行时由于交叉执行导致的数据不一致性。
D- Durabiliy(持久性)
事务处理结束以后,对数据的修改是永久,即使系统故障也不会丢失。

分布式系统理论

分布式系统最大的特点是可扩展性,能够适应需求变化而扩展。通过增加服务器数量来增强分布式系统整体的处理能力,以应对企业增长带来的计算需求增加。

CAP理论

一个分布式系统不可能同时满足一致性(C)、可用性(A)、分区容错性(P)三个要求,最多只能满足其中的两项,对于一个分布式系统,分区容错性是基本需求。一般需要在C和A之间寻求平衡。
一致性(Consistency)
更新操作完成后,所有节点在同一时间的数据完全一致
可用性(Availabiliy)
即使是严重的网络错误,每个请求必须完成
分区容错性(Partition tolerance)
遇到某个节点或者网络分区故障时候,仍然能够对外提供满足一致性和可用性的服务

Base理论

分布式系统在出现故障的时候允许损失部分性能,保证核心功能或者当前最重要的功能可用。允许系统在不同节点的数据副本之间进行数据同步时存在延迟。

分布式存储算法

1)一致性算法-Paxos
解决一个分布式系统如何就某个值达成一致,是一种基于消息传递模型的一致性算法
2)一致性哈希算法
通常分布式系统中存储的内容是hash中的一部分,一致性哈希算法解决如何在动态的网络拓扑中分布存储和路由