数据库概论

数据库的前生今世

数据库的前世今生 (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

缺点

  • 对节点、关系和属性的数量有限制
  • 数据无法拆分

使用场景

  • 社交网络
  • 推荐引擎

常见软件系统数据库选型

img

Hadoop 与 Hive

Hadoop 是一个开源框架,用于在分布式环境中存储和处理大数据。它包含两个模块,一个是分布式文件系统HDFS,另外一个是分布式计算模型 MapReduce。

MapReduce 可将大数据处理任务分解成很多单个的、可以在服务器集群中并行执行的任务。这些任务的计算结构可以合并在一起用于计算最终的结果。
Hive 是基于Hadoop的一个数据仓库工具,常用于数据提取(Extract)、转化(Transform)、加载(Load)。


参考:数据库与数据挖掘—智慧树网 (zhihuishu.com)