TIDB分布式数据库

概念

TiDB 是一款开源的分布式 NewSQL 数据库,兼容 MySQL 生态,支持水平扩展、金融级高可用及实时 HTAP(混合事务分析处理)。与 OldSQL(如 MySQL)相比,它解决了单机容量和性能瓶颈;与 NoSQL 相比,提供完整的 ACID 事务和 SQL 接口。

核心特性

  • MySQL 兼容:支持 MySQL 5.7 协议及常用功能,迁移成本低。
  • 水平扩缩容:存储与计算分离,支持在线弹性扩缩容。
  • 金融级高可用:多副本 + Multi-Raft 协议,保障数据强一致性。
  • 实时 HTAP:通过 TiKV(行存)和 TiFlash(列存)支持 OLTP 与 OLAP。
  • 云原生:支持 Kubernetes 部署(TiDB Operator)。

核心架构

  • TiDB Server:无状态 SQL 计算层,处理 SQL 解析、优化及执行计划生成。
  • TiKV Server:分布式行式存储引擎,基于 Raft 协议实现数据强一致性与高可用。
  • PD Server:元数据管理与调度中枢,负责 Region 调度及全局 ID 分配。
  • TiFlash Server:列式存储引擎,通过 Multi-Raft Learner 实时同步 TiKV 数据,支持实时分析。

主要限制

  • 功能限制:不支持存储过程、自定义函数和触发器。
  • 资源开销:分布式架构引入额外管理开销(如多副本同步)。
  • 适用规模:数据量低于千万级时,单机 MySQL 可能更经济。
  • 其他限制:默认单行大小 ≤6 MB(可调至 120 MB),用户名最长 32 字符。

应用场景

  • 金融核心系统:需 RPO=0 和 RTO≤30 秒的高可用场景。
  • 高并发 OLTP:替代分库分表,实现透明水平扩展。
  • 实时 HTAP:同一份数据同时支持交易与分析(T+0)。
  • 数据汇聚与报表:简化传统 Hadoop 架构,直接通过 SQL 生成报表。

Java 交互

连接与驱动
  • 驱动 :使用 mysql-connector-java

  • 连接字符串 :配置多个 TiDB 节点地址以实现负载均衡。

    java 复制代码
    String url = "jdbc:mysql://tidb-host1:4000,tidb-host2:4000/testdb?loadBalanceAutoCommitStatementThreshold=5";
  • 连接池:推荐 HikariCP,配置与 MySQL 一致。

事务处理
  • 乐观事务 :默认模式,提交时检测冲突,需处理重试逻辑。

    java 复制代码
    int maxRetries = 3;
    for (int i = 0; i < maxRetries; i++) {
        try {
            updateAccountBalance(connection, accountId, amount);
            connection.commit();
            break;
        } catch (MySQLTransactionRollbackException e) {
            if (i == maxRetries - 1) throw e;
            Thread.sleep(50);
        }
    }
  • 悲观事务 :通过 SET tidb_txn_mode = 'pessimistic' 启用。

主键与自增 ID
  • 显式主键:建议使用单调递增主键(避免写热点)。
  • 自增 ID :保证唯一性但不连续,可选 AUTO_RANDOM 或雪花算法。
SQL 优化
  • 避免大事务:单事务数据量过大可能触发限制(默认 100MB)。
  • 索引优化 :通过 EXPLAIN 分析执行计划。
  • 热点处理
    • 写入热点 :使用 SHARD_ROW_ID_BITSAUTO_RANDOM 分散写入。

      sql 复制代码
      CREATE TABLE events (content TEXT) SHARD_ROW_ID_BITS = 4;  -- 16 分片
    • 读取热点:优化查询频率或分片键设计。

生态与监控

  • 工具链:支持 TiUP(部署工具)、TiDB Dashboard(监控界面)。
  • 监控指标:通过 Prometheus + Grafana 跟踪集群状态(如 Region 分布、事务延迟)。
相关推荐
蜜獾云2 小时前
Kafka(2)-kafka架构-基本原理
分布式·架构·kafka
沙漏无语2 小时前
(一)TiDB简介
java·开发语言·tidb
wellc2 小时前
redis连接服务
数据库·redis·bootstrap
隔叶听风2 小时前
RocketMQ 与 Kafka 长轮询详解
数据库·kafka·rocketmq
袋鼠云数栈2 小时前
构建金融级数据防线:数栈 DataAPI 的全生命周期管理实践
java·大数据·数据库·人工智能·api
知识分享小能手2 小时前
PostgreSQL 入门学习教程,从入门到精通,PostgreSQL 16 数据备份与还原详解 —语法、案例与实战(16)
数据库·学习·postgresql
IvanCodes2 小时前
二、Kafka核心架构与分布式存储
大数据·分布式·架构·kafka
空空潍2 小时前
【超详细】RabbitMQ安装延迟消息插件
分布式·rabbitmq
yc_xym2 小时前
Redis哨兵(Sentinel)机制
数据库·redis·sentinel