数据库概论
数据库的前生今世
数据库的前世今生 (baidu.com)
数据库的四个基本概念
1. 数据库的四个基本概念_清风的博客-CSDN博客_数据库的四个基本概念
数据模型
数据模型_百度百科 (baidu.com)
关系型数据库
关系的完整性
关系代数
ER图
实体、联系与属性
数据库范式
第一范式:列最小分割单元
第二范式:满足第一范式,无函数部分依赖
第三范式:满足第二范式,无传递依赖
非关系型数据库
关系型数据库的缺点
大数据场景下 I/O 较高
存储的是行记录,无法存储数据结构
表结构扩展不方便
全文搜索能力较弱
存储和处理复杂关系型数据功能较弱
非关系型数据库
有键值对存储、列存储、文档存储、图形数据存储
采用分布式系统架构
没有声明式查询语言(SQL)
允许半结构化数据
摒弃了关系型数据库ACID属性(原子性、一致性、独立性、持久性)
CAP定理(最多同时满足两条)
- 一致性(Consistency):所有节点在同一时间具有相同的数据
- 可用性(Availability):保证每个请求不管成功或者失败都有响应
- 分割容忍(Partition tolerance):系统中任意信息的丢失或者失败不会影响系统的继续运作
注:
集群:每个节点的功能都是相同的,当一个节点失效了,则剩下的节点可以为失效的节点承担更多的工作量。
分布式:每个节点只完成完整任务中的一个子任务,即每个节点之间的功能是不相同的。当某一个节点失败了,则整个分布式系统就会失败。
针对关系型数据库的局限性的 NoSQL 解决方案
针对大数据场景下 I/O 较高的问题
提出列式数据库(BigTable,HBASE)
优点:
高效的存储空间利用率
查询效率高
适合大数据场景
缺点:
- 不适合扫描小数据
- 不适合做含有删除和更新的实时操作
使用场景
- 大数据量且有快速随机访问的需求
- 写密集型应用
- 不需要复杂查询条件的应用
- 对性能和可靠性要求比较高的应用
- 有数据扩展的需求
- 存储结构化和半结构化的数据
针对无法存储数据结构的问题
提出了键值对数据库,有Redis(普通场景中最为常用)、cassandra(大型企业级应用场景较为流行)、levelDB
优点:
- 性能极高
- 数据类型丰富
- 特性丰富
缺点:
- 查询内容基于值
- 无法存储数据之间的关系
使用场景
- 存储用户信息、配置文件、参数、购物车等
针对表结构扩展不方便的问题
提出文档数据库,有 mongoDB(常被用于存储一些文件类的数据,例如 word、PDF)、CouchDB(采用了MapReduce机制)
优点
- 新增属性简单
- 兼容历史数据
- 存储复杂结构数据
缺点
- 不支持复杂查询
使用场景
- 当前数据量大且变动较大的场景
- 表结构不明确
针对全文搜索能力较弱问题
提出全文搜索引擎(基于数据库原理开发出的强化全文搜索能力的工具),有Elastic Search、Solr。
采用的数据存储方式:倒排索引方式(关于 ElasticSearch 中倒排索引的理解 (yangyingming.com))
优点
- 查询效率高
- 可扩展性
- 可有可用性良好
缺点
- 对关系的表述能力较弱
- 读写有一定延时
- 更新性能较低
- 内存占用较大
使用场景
- 全文检索,结构化检索、数据分析
- 对海量数据进行近实时的处理
针对存储和处理复杂关系型数据功能较弱的问题
提出了图数据库,有Neo4j(最流行、符合ACID) 、ArangoDB、TITAN
优点
- 查询性能高
- 开发敏捷性与设计灵活性
- 完全支持ACID
缺点
- 对节点、关系和属性的数量有限制
- 数据无法拆分
使用场景
- 社交网络
- 推荐引擎
常见软件系统数据库选型
Hadoop 与 Hive
Hadoop 是一个开源框架,用于在分布式环境中存储和处理大数据。它包含两个模块,一个是分布式文件系统HDFS,另外一个是分布式计算模型 MapReduce。
MapReduce 可将大数据处理任务分解成很多单个的、可以在服务器集群中并行执行的任务。这些任务的计算结构可以合并在一起用于计算最终的结果。
Hive 是基于Hadoop的一个数据仓库工具,常用于数据提取(Extract)、转化(Transform)、加载(Load)。
参考:数据库与数据挖掘—智慧树网 (zhihuishu.com)