《从 0 开始学架构》学习归整(五)高性能 NoSQL

内容纲要

NoSQL

即非关系型的数据库。

NoSQL = Not Only SQL != No SQL

关系型数据库的缺点

  • 行存储,无法存储数据结构
  • schema 扩展不方便
  • 在大数据场景下 I/O 支撑难度高
  • 全文搜索功能弱

常见 NoSQL 方案分类

  • KV(key-value) 存储:解决关系型数据库无法存储数据结构的缺点(Redis 等)
    • 支持简单事务
      • 只能保证隔离性和一致性;不能保证原子性和持久性
  • 文档数据库:解决关系型数据库 schema 问题(MongoDB 等)
    • no-schema:可以存储和读取任意数据
      • 新增字段简单
      • 历史数据不会出错
      • 存储复杂数据简单
    • 不支持事务
    • 无法实现 join 操作
  • 列式数据库:解决关系型数据库大数据高 I/O 场景问题(HBase 等)(类数据库适合在某些特定场景中使用,如:离线大数据分析等,场景不匹配优势变劣势)
    • 业务同时读取多个列效率高
    • 能够同时对一行中的多个列进行操作
    • 节省 I/O
    • 列数据压缩比例更高
  • 全文搜索引擎:解决关系型数据库全文搜索弱的问题(Elasticsearch 等)
    • 原理:倒排索引;建立单词到文档的索引

如何选型

关系型和 NoSQL 选型主要看数据量、并发量、实时性、一致性要求、读写分布和类型、安全性、运维性等。

  • 管理型系统:如运营类系统
    • 首选关系型
  • 大流量系统:如电商单品页某服务
    • 后台首选关系型;前台选内存型
  • 日志型系统
    • 原始数据选列式存储
    • 搜索日志选搜索引擎型
  • 搜索型系统:如站内搜索
    • 后台选关系型
    • 前台选搜索引擎型
  • 事务型系统:库存、交易、记账
    • 关系型 + 缓存 + 一致性
  • 离线计算
    • 首选列式
  • 实时计算
    • 时间序列数据库
    • 列式数据库

NoSQL 有优势也有劣势,不能盲目相信“NoSQL 银弹”论,应该将 NoSQL 作为 SQL 的补充。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注