zoukankan      html  css  js  c++  java
  • TiDB学习笔记01-分布式数据库

    一代系统:数据库中间件

    ● 二代系统:NoSQL 数据库

    ● 三代系统(2013):

    ○ Google Spanner 及其类似的 NewSQL (TiDB 3.0, CockroachDB)

    ○ AWS Aurora 及其类似架构的云数据库

    ● 新一代趋势:HTAP 数据库(以 TiDB 4.0 为代表)

    数据库管理员(Database Administrator,简称DBA)

    1.1 数据库中间件

    两种实现模式:
    ● 业务层手动分库分表(手动)
    ● 通过中间件指定 Sharding Key 的模
    式水平分表(半自动)
    常见分片Key选择: user id、城市、时间
    常见分片规则:哈希分片、范围分片

    数据库中间件的优点:
    ● 架构相对简单
    ● 对底层的关系型数据库改动不大,运维经验可以复用

    缺点:
    ● 只适用于简单业务,同时对业务有侵入性,需要改造
    ● 很难支持跨分片的高性能复杂查询
    ● 分布式事务性能损失
      ○ 扩展问题:为什么会有性能牺牲?
    ● 水平扩展能力差,只能按照选定的分片规则横向扩展
    ● 大型集群运维困难
      ○ 表结构变更(DDL)操作困难,容易出现失误
      ○ 只能按照分片进行维护(备份、恢复等操作)

    1.2 NoSQL - Not Only SQL

    ● 放弃高级 SQL 能力,追求强水平扩展能力(反过来意味着业务兼容的成本高)
      ○ 放弃复杂 SQL 查询
      ○ 放弃分布式事务(ACID)
    ● 通常的数据访问模型:
      ○ 键值对 (Key-Value)
      ○ 文档型 (Document)
    ● 代表系统:
      ○ MongoDB
      ○ CouchBase
      ○ Cassandra
      ○ HBase
    ● 在互联网行业比较活跃:2006 ~ 2012

    NoSQL系统的优点:
    ● 水平扩展能力强
    ● 针对特殊类型数据效果好,可以作为关系型数据库的很好补充
    ● 对于一致性要求不强的场景,可能会有更好的性能

    缺点:
    ● 由于不支持 SQL 业务需要进行较大的改造
    ● 普遍无法支持事务,强一致场景比较难实现
    ● 复杂查询受限

    1.2.1 典型系统分析:MongoDB

    ● 文档型数据库
    ● 仍然是通过选择 Sharing Key 的方式进行分

      ○ Range 或 Hash 分片
    ● 优点:
      ○ Scheme-less,对文档型数据比较友好
    ● 缺点:
      ○ 跨分片聚合能力差
      ○ Rebalance 过程中会占用大量带宽
      ○ 无跨分片事务

    1.3 第三代分布式数据库 NewSQL

    两种流派
    ○ 以 Google Spanner 为代表的 Shared Nothing 架构
    ○ 以 AWS Aurora 为代表的 Shared Everything 架构

    1.3.1 Shared Nothing 流派

    ● 特点:
      ○ 无限的弹性水平扩展
      ○ 强 SQL 支持(几乎不需要妥协,无需指定分片策略,系统自动扩展)
      ○ 和单机数据库一样的事务支持
      ○ 跨数据中心故障自恢复级别的高可用能力
    ● 代表产品
      ○ Google Spanner
      ○ TiDB 3.0 及之前版本
      ○ CockroachDB

    ● 优点:
      ○ 无限水平扩展,没有容量上限, 对海量数据场景友好
      ○ 对金融级别的一致性 ACID 事务支持,业务改动代价小
      ○ 故障自恢复的高可用能力,运维省事
      ○ SQL 能力强,和单机数据库的体验基本一致
    ■ 例如:TiDB 支持 MySQL 的绝大多数语法和网络协议 (覆盖度超过 92%)
      ○ 无限扩展的吞吐能力(和业务负载有关)
    ● 缺点:
      ○ 并非 100% 兼容传统数据库的语法(不支持存储过程)
      ○ 对于一些极端场景(秒杀),延迟不如单机数据库(跨机,跨地域的分布式事务必然带来更高延
    迟)
        ■ 例子:小事务平均 latency: 2ms(单机) vs 5ms (分布式)

    1.3.2 Shared Everything 流派

    代表产品:AWS Aurora、阿里云 PolarDB
    Cloud-Native
    ● 通常由公有云提供
      ○ 为什么?
    存储计算分离
    ● 无状态 SQL 计算节点
      ○ 计算节点通常直接复用
    MySQL,但是不存储数据
    ● 远程存储(数据文件层)

    优点:
    ● 易用,100% 兼容 MySQL,业务兼容性好(最大优势)
    ● 对一致性要求不高的场景,读可以水平扩展(但是有上限)
    缺点:
    ● 本质上还是单机数据库,如果要支持大数据量,仍然需要分库分表
    ● 内存和容量不匹配,在单表数据量大后,性能抖动严重
    ● 跨机的事务一致性问题(存在同步延迟)
    ● 分析能力受限于单点,几乎没有分布式 OLAP 能力

    1.4 分布式 HTAP 数据库

    ● HTAP 的定义:Hybrid Transactional/Analytical Processing,混合事务分析处理
    ● 分布式 HTAP 的标准
      ○ 业务透明的无限水平扩展能力
      ○ 分布式事务的支持
      ○ 多数据中心故障自恢复的高可用能力
      ○ 提供高性能的分析能力
        ■ 提供列式存储能力
      ○ 在混合负载下,实时 OLAP 分析不影响 OLTP 事务
    ● 目前业界仅有 TiDB 4.0 能达到上述的要求
      ○ TiDB + TiFlash (TiDB 的列存扩展)

    数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。 

    OLTP 系统强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作;
    OLAP 系统则强调数据分析,强调SQL执行市场,强调磁盘I/O,强调分区等。 

    ● 为什么能实现 OLAP 和 OLTP 的彻底隔离,互不影响?
      ○ 存储和计算彻底分离
      ○ 列式存储(适用于 OLAP)以副本扩展的形式存在
      ○ 通过 Multi Raft 架构进行日志级别的复制同步,业务层完全无感知

    ● 扩展性依托 TiDB 的分布式架构,能做到水平扩展
      ○ 数据同步不会成为瓶颈
    ■ 面向实时分析设计,不需要额外的技术栈从数据库同步到实时数仓

  • 相关阅读:
    java-初始化和清理
    java-字符串
    java-I/O流
    java-反射和代理
    java-执行流程控制语句
    java-访问控制修饰符
    java-异常
    java-注解
    [ Java学习 ] 一道Java好题的详细题解 001
    [ Java学习 ] 查阅资料整理 002
  • 原文地址:https://www.cnblogs.com/luckyplj/p/15133413.html
Copyright © 2011-2022 走看看