16 架构设计 - 高性能 NoSQL

2020-06-23 00:00:00 数据库 专区 订阅 列表 关系
  • 关系型数据库缺点
    • 1. 关系数据库存储的是行记录,无法存储数据结构
      • 如:'我关注的人' 是一个用户 ID 列表,关系型只能讲列表拆成多行,再查出来组装,无法直接存储一个列表


    • 2. 关系数据库的 schema 扩展很不方便
      • 表结构的 schema 是强约束,操作不存在的列会报错


    • 3. 关系数据库在大数据场景下 I/O 较高
      • 对大量数据的表进行统计之类计算时,即使只针对其中某一列进行运算
      • 关系数据库也会将 整行数据 从 存储设备 读入 内存


    • 4. 关系数据库的全文搜索功能比较弱
      • 全文搜索只能使用 like 进行整表扫描匹配,性能非常低


  • NoSQL 解决方案
    • Not Only SQL
    • 带来的优势,本质上是牺牲 ACID 中的某个或某几个特性


  • NoSQL 四类方案
    • 1. K-V 存储:解决关系数据库 无法 存储数据结构的问题,以 Redis 为代表
    • 2. 文档数据库:解决关系数据库 强 Schema 约束问题,列可变,以 MongoDB 为代表
    • 3. 列式数据库:解决关系数据库 大数据场景下 I/O 问题,只读取某列数据时,不需将所有行数据都读出来,以 HBase 为代表
    • 4. 全文搜索引擎:解决关系数据库全文搜索性能问题,以 Elasticsearch 为代表


  • 数据库选型
    • 1. 管理型系统,如运营类系统,关系型
    • 2. 大流量系统,如电商单品页的某个服务,后台选关系型,前台选内存型
    • 3. 日志型系统,原始数据选列式,日志搜索选倒排索引
    • 4. 搜索型系统,指站内搜索,非通用搜索,如商品搜索,后台选关系型,前台选倒排索引
    • 5. 事务型系统,如库存、交易、记账,选关系型+缓存+一致性协议,或新型关系数据库
    • 6. 离线计算,如大量数据分析,列式,关系型也可以
    • 7. 实时计算,如实时监控,可以选时序数据库,或列式数据库

相关文章