RDBMS
关系型数据库。
优点:
- 事务型,遵循ACID
- 数据的规范性和结构性
- 数据处理对应用透明
- 对表关联查询
- 规范的SQL标准
- 多年企业实践,非常成熟
劣势:
- 水平扩展困难
- 无法满足非结构化数据的处理
关系型数据库可以分为:
- 传统的行式数据库
- 列式数据库
传统行式数据库:
- 数据是按行存储的
- 没有索引的查询使用大量I/O
- 建立索引的和物化视图需要花费大量时间和资源
- 面对查询的需求,数据库必须被大量膨胀才能满足性能要求
列式数据库(例如sybase iq数据库):(适合OLAP系统)
- 数据按列存储,每一列单独存放
- 数据即是索引
- 只访问查询涉及的列,大量降低系统IO
- 每一列由一个线索来处理,查询的并发处理
- 数据类型一致,数据特征相似,高效压缩
NOSql
NOSql(Not Only Sql),例如:Redis、MongoDB、Neo4j等
NOSql数据库分类:
- Key Value型(例如Redis)
- Column型(例如Hbase)
- Document型(例如MongoDB)
- Graph型(例如Neo4j)
k-v类型:
说明 | |
---|---|
应用场景 | 内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等 |
数据模型 | key指向value的键值对,通常用hash table实现 |
强项 | 查找速度快 |
弱项 | 数据无结构化,通常只能被当做字符串或二进制数据 |
列式存储类型:
说明 | |
---|---|
应用场景 | 分布式文件系统 |
数据模型 | 以列簇式存储,将同一列数据存在一起 |
强项 | 查找速度快,可扩展性强,更容易进行分布式扩展 |
弱项 | 功能相对局限 |
文档类型:
说明 | |
---|---|
应用场景 | Web应用(与k-v类似,value是结构化的,不同的是数据库能够了解value的内容) |
数据模型 | k-v对应的键值对,value为结构化数据 |
强项 | 数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构 |
弱项 | 查询性能不高,而且缺乏统一的查询语法 |
图结构类型:
说明 | |
---|---|
应用场景 | 社交网络,推荐系统等。专注于构建关系图谱 |
数据模型 | 图结构 |
强项 | 利用图结构相关算法,比如最短路径寻址,N度关系查找等 |
弱项 | 很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案 |
Hadoop
Hadoop:
- 发源于Google
- 分布式处理的软件框架
- 用于海量数据的处理
- 可靠、高效、可伸缩的数据处理平台
- Hadoop != NOSql
RDBMS和NOSql对比
RDBMS | NOSql |
---|---|
ACID第一,严格保证 | Throughout第一,弱/松ACID |
Schema-centric,严格的结构化数据模型 | Schema-free,灵活的非结构化/半结构化数据模型 |
复杂的数据关系、主外键、多表join等 | 简单的数据关系,一般不提供复杂的join |
天生的Scale-up(高性能服务器)及后天培养的Scale-out(如Rac) | 天生的分布式架构,优秀的横向扩展能力 |
基于ORM的SQL语句,映射、解析、执行成本较高 | NO-Sql一般提供各类高级语言API,简单的读/写函数 |