目前的项目把mysql换成了TiDb,所以特意来了解下tidb。其实也不能说换,由于tidb和mysql几乎完全兼容,所以我们的程序没有任何改动就完成了数据库从mysql到TiDb的转换,TiDB 是一个分布式 NewSQL (SQL 、 NoSQL 和 NewSQL 的优缺点比较 )数据库。它支持水平弹性扩展、ACID 事务、标准 SQL、MySQL 语法和 MySQL 协议,具有数据强一致的高可用特性,是一个不仅适合 OLTP 场景还适合 OLAP 场景的混合数据库。下面是对有关资料的整理还有一些扩展内容以链接的方式展示,有兴趣可以点击了解一下。
TiDb的整体架构如下:
基础规范
- 单表数据量大于5000W
- 总体数据大于1TB
- 不使用热点数据
- 尽可能批量写入,但每次写入的数据不大于64M
- 每个事务包含的SQL语句数量不大于50
- 使用有真正意义的列作为主键,而不是单调递增ID作为主键
- 数据库字符集默认使用utf8,如果存储emoji表情等四字节使用utf8mb4字符集
- 禁止线上核心业务使用存储过程、视图、触发器
- 禁止从测试、开发环境、本机直连线上生产数据库
- 禁止在线上生产环境做数据库压力测试
库表设计
- 库名、表名、字段名必须使小写字母,并采用下划线分割;对相关功能的表应当使用相同前缀,如job_xxx,前缀通常为库名或依赖主实体对象:数据库名称约定:db58_xxx dbgj_xxx dbchr_xxx
- 所有的表及字段都必须有备注,详细说明表及字段的含义
- 库名、表名、字段名禁止使用MySQL保留字,如date、like、desc、return等
索引设计
- 索引名称必须使用小写,普通索引按照“idx_字段名_字段名[_字段名]”进行命名,唯一索引按照“uniq_字段名_字段名[_字段名]”进行命名”
- 单张表中索引数量不超过5个
- 单个索引中的字段数不超过5个
- 对字符串使用前缀索引,前缀索引长度不超过10个字符
- 索引字段的顺序需要考虑每个字段去重之后的数量,区分度最大的【个数最多的】放在前面
- 合理创建联合索引(避免冗余),符合最左前缀原则:(a,b,c) 相当于 (a) 、(a,b) 、(a,b,c)
- ORDER BY,GROUP BY,DISTINCT的字段需要添加在索引的后面
- UPDATE、DELETE语句需要根据WHERE条件添加索引
- 对于JOIN操作,需要在JOIN字段上建立索引
- 禁用FORCE INDEX
- 禁止使用外键