NoSQL

#DataBase #NoSQL

What is NoSQL
  • Not Only SQL
  • NoSQL 是一个总称 不遵循 RDBMS 原则的数据库和数据存储
    • 一类产品
    • 有关数据存储和操作的多个(相关)概念的集合
    • 通常与大型数据集有关
为什么不用RDBMS

在互联网背景下

  • RDBMS 假定数据是
    • 密集
    • 基本一致(结构化数据)
  • 来自互联网的数据是
    • 大量且稀疏
    • 半结构化或非结构化
  • 面对海量稀疏数据集,典型的存储机制和访问方法变得捉襟见肘
    • 稀疏的非/半结构化数据
    • 高水平可扩展性

NoSQL数据库类型

NoSQL

  • 图数据库: Neo4j
    • 用于存储数据网络信息,如社交关系。
  • 文档数据库: MongoDB
    • 将每个键与称为文档的复杂数据结构配对。
  • 键值数据库: Redis
    • 是最简单的 NoSQL 数据库。数据库中的每个项目都以属性名称(或 "键")的形式与其值一起存储。
  • 列族数据库:Cassandra
    • 针对大型数据集的查询进行了优化,将数据列(而不是行)存储在一起

图数据库

  • 面向图形
  • 一切都以边、节点或属性的形式存储
  • 每个节点和边可以有任意数量的属性
  • 节点和边都可以贴标签
  • 标签可用于缩小搜索范围
  • 适用场景: 网络型
    • 社交网络
    • 金融领域
    • 交通网络
    • 计算机通信网络
    • 智能电网
    • ...

文档数据库

  • 核心概念是 "文档 "的概念,它与 RDBMS 中的行相对应
  • 以某些标准格式或编码封装和编码数据,如 JSON(BSON)
  • 文档在数据库中通过代表该文档的唯一密钥进行处理
  • 将文档作为一个整体处理,避免将文档拆分为其组成的名称/值对
  • 数据库提供 API 或查询语言,可根据文档内容检索文档
  • 文档是无模式的,也就是说,不同的文档可以有不同的结构和模式(RDBMS 要求每一行都包含相同的列)
  • 适用场景:评论型
    • 内容管理系统
    • 电子商务平台
    • 社交网络
    • 日志管理系统
    • ...

键值数据库

  • 以无模式方式存储数据
  • 以映射方式存储数据
    • 哈希映射或关联数组
    • 为访问数据提供非常高效的平均运行时间算法
  • 特点
    • 简洁:数据主要采用Key-Value(KV)形式储存
    • 高速:数据驻留内存,重启时可再次加载进行使用
    • 易扩展:根据系统负载量,灵活添加或删除服务器
    • 对键可设置失效时间
  • 适用场景
    • 缓存
    • 用户会话管理
    • 分布式锁
    • 分布式配置管理
    • 分布式存储系统

列族数据库

  • 以列为导向的方式存储数据

    • 有效存储数据
    • 避免消耗空间来存储空值
    • 以列族对列进行分组
    • 数据不存储为单一表格,而是按列族存储
    • 数据单位是一组键/值对
      • 用 "行键 "标识
      • 根据行键排序与筛选
  • 特点

    • 更好的可扩展性
    • 高可用性
    • 适合离线批量数据处理
    • 支持跨平台部署
  • 适用场景

    • 数据仓库
    • 数据挖掘和商业智能
    • 实时数据分析
    • 大规模数据集成

处理大数据和可扩展性

NoSQL 解决方案设计用于在集群或多节点数据库解决方案上运行

  • 如果数据量/操作量较大,则需要在集群中添加更多机器,即 "向外扩展 "或 "水平扩展"。
  • 不同的方法包括
    • 主从(Master-slave)
    • 分片(Sharding)

CAP 定理

分布式存储系统必然存在如下三方面问题

  • 一致性(Consistency)
    • 每个客户端都有相同的数据视图
  • 可用性(Availability)
    • 每个客户端始终可以读写
  • 分区容错性(Partition Tolerance)或稳定性
    • 系统在分布式物理网络中运行良好

CAP 定理 - 最多可以处理三个属性中的两个属性

  1. 满足CA原则:系统几乎没有或根本没有分区容错性。一致性和可用性优先
    • RDBS
  2. 满足AP原则:一致性受到影响,但系统始终可用,并且在部分分区时也能工作
    • CouchBD, Cassandra, DynamoDB, Riak
  3. 满足CP原则:可用性受到影响,但一致性和分区容错性优于可用性
    • MongoDB, HBase, Redis

没有完美的 NoSQL 数据库

  • 每个数据库都有其优缺点
  • 取决于要完成的任务类型(和偏好)
    • NoSQL 是一套处理以下问题的概念、想法、技术和软件
  • 大数据
  • 稀疏的非/半结构化数据
    • 高水平可扩展性
    • 大规模并行处理
  • 不同的应用、目标、对象和方法需要不同的 NoSQL 解决方案

ACID事务

  1. 原子性 Atomicity
  2. 一致性Consistency
  3. 隔离性Isolation
  4. 持久性Durability
  • NoSQL
    • 不重视 ACID 特性,在某些情况下完全忽略
  • 在分布式并行系统,很难/不可能确保 ACID 属性

BASE事务

  1. 基本可用性 Basically Available
  2. 软状态 Soft State
  3. 最终一致 Eventually Consistent
  • 特点
    • 弱一致性可用性优先
    • 尽最大努力
    • 近似答案
    • 进取(乐观)
    • 更简单、更快速

一致性问题

  • NoSQL分布式集群系统由多个节点构成

  • 由于网络异常、服务器故障等原因,节点并不总能保证正常工作

  • 分布式系统采用多数据副本来保证可用性

  • 严格一致性

  • “读己之所写”一致性

  • 会话一致性

  • 单调读一致性

  • 最终一致性

Consistency

Quorum的NWR策略

  • N: 副本数
  • R: 写入副本数
  • W: 写入副本数

Paxos Algorithm

  1. 提议者 Proposer
  2. 决策者 Acceptor
  3. 学习者 Learner
  • Request
  • Prepare
  • Accept
  • Response

Raft Algorithm

  1. 领导者Leader: 1 个,接受服务端的请求
  2. 候选者Candidate: 多个,选举领导者
  3. 追随者Follower: 多个,负责响应来自领导者或者候选者的请求
  • 每个任期至多存在一个领导者
  • 默写任期又要选举失败,不存在 Leader
  • 每个服务器本地维护当前任期

子问题

  1. 领导者选举 Leader Election
  2. 日志复制 Log Replication
  3. 安全性 Safety

向量时钟机制