tidb开发规范

简介: tidb开发规范

tidb开发规范
如果有不对的地方求留言指正
一 减少大事务
3.0的版本
1.1 每个事务内的 SQL 数量不超过 5000 条。
1.2 每个键值对不超过 6MB。
1.3 键值对的总大小不超过 100MB
1.4 键值对的总数不超过 300,000(总的行数*(1 + 索引个数) < 30万)

4.0版本 对大事务支持进一步优化
1.5 单个事务最大支持10GB
1.6 取消键值对的总数不超过 300,000 这个限制
虽然4.0对大事务进行优化和改善,但DBA建议对大事务进行拆分小事务,减少数据库压力,提示数据库性能。

二 禁止使用(不支持功能)
2.1 存储过程和函数、 触发器、 事件、 自定义函数、外键、全文索引
2.2 字符集 非ascii/latin1/binary/utf8/utf8mb4 的字符集

三 库表设计与SQL
3.1. 建议取消主键 使用唯一健+not null,理由方便手动分区,从而处理热点写问题。如果必须使用自增主键建议bigint+AUTO_RANDOM
3.2. 如果有AP类型业务,建议申请服务器使用TiFlash,从而提升读的性能
3.3. 默认不支持删除主键操作,也不支持添加主键,添加自增索引
3.4. 目前不支持DDL变更合并的操作,目前对一个表进行多次DDL,进行拆写
3.5 3.0.8(以上)或4.0版本支持乐观事务和悲观事务
3.6 大表,比如超过1亿,建议每个SQL都要严格审核,否则一旦走错索引,可能会影响整个集群.(大表谨慎加索引)
3.7 表字段数不建议超过 60 个,建议单行的总数据大小不要超过 64K,数据长度过大字段最好拆到另外的表
3.8 不推荐使用复杂的数据类型
3.9 需要 join 的字段,数据类型保障绝对一致,避免隐式转换
3.10 WHERE条件中不在索引列上进行数学运算或函数运算;
3.11 用 in /union 替换 or,并注意 in 的个数小于 300;
3.12 禁止使用%前缀进行模糊前缀查询。
3.13 TiDB对大小写支持为lower_case_table_names=2(只支持2)
3.14 统计类SQL特别多,并行符合条件,建议使用TiFlash
3.15 TiDB不支持字段的有损变更。自增属性删除后不支持在新增自增属性。
3.16 库表索引等命名规则设计与MySQL一致即可

四 线上流程
4.1 必须在测试环境跑完(兼容性测试,以及业务测试),才可以考虑上生产。
4.2 至少3台物理机(标C的机器,SSD硬盘),根据业务实际情况进行合理分配。
4.3 建议数据量特别大(单表上亿),有弹性扩、缩容,无法确认切分规则不能使用分库分表。

五 数据删除规范

5.1 删除表中全部的数据时,使用 TRUNCATE 而不要使用delete。
5.2 如果大批删除,容易引发整个集群性能抖动。建议拆分SQL(少删多提)

六 其他
6.1 大数据导入,联系DBA进行操作,导入成功后研发确认进行核对。
6.2 业务涉及的时候 如有热点表 热点读写等需要提前通知DBA,对热点小表 还是建议存在redis。
6.3 默认GC超时时间是1天(tidb 默认10分钟),可以恢复1天之前的数据。
6.4 定期针对慢SQL进行合理优化,默认统计信息收集时间03点到05点之间,如在期间有性能问题可联系DBA进行调整。如需要手动收集统计信息可以联系dba。
6.5 TiDB监控、报警、大事报 地址和报警配置 联系dba即可
6.6 线上默认版本4.0.最新(大于4.0.8)。如使用3.0版本的话默认3.0.最新(大于3.0.18)。自己单位内部订版根据实际情况选择。

目录
相关文章
|
6月前
|
关系型数据库 MySQL 数据库
实时计算 Flink版产品使用合集之支持将数据写入 OceanBase 数据库吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
144 5
|
6月前
|
存储 SQL 关系型数据库
TiDB的优势:为何选择TiDB作为您的数据库解决方案
【2月更文挑战第25天】随着数据规模的不断增长和业务需求的日益复杂化,现代企业对数据库系统的扩展性、高可用以及分布式处理能力提出了更高的要求。TiDB作为一个新型的开源分布式数据库,以其独特的设计理念与卓越的技术特性,在众多数据库解决方案中脱颖而出。本文将深入剖析TiDB的核心优势,探讨其如何帮助企业从容应对海量数据挑战、实现无缝水平扩展、保障服务高可用性,并提供灵活一致的事务支持。
|
5月前
|
运维 关系型数据库 分布式数据库
技术选型思考:分库分表和分布式DB(TiDB/OceanBase) 的权衡与抉择
技术选型思考:分库分表和分布式DB(TiDB/OceanBase) 的权衡与抉择
|
存储 SQL 缓存
PostgreSQL DirectIO开发实践
在数据库开源的背景下,基于PG的DirectIO的研发方案分享。
PostgreSQL DirectIO开发实践
|
SQL 关系型数据库 MySQL
「数据架构」数据迁移神器 pgloader,迁移各种数据到PostgreSQL
「数据架构」数据迁移神器 pgloader,迁移各种数据到PostgreSQL
|
SQL AliSQL 数据库连接
开源分布式数据库PolarDB-X源码解读——PolarDB-X源码解读(十三):DML之INSERTIGNORE流程
开源分布式数据库PolarDB-X源码解读——PolarDB-X源码解读(十三):DML之INSERTIGNORE流程
11321 0
|
SQL 存储 Java
实战|Flink不支持分库分表的改造之路
实战|Flink不支持分库分表的改造之路
实战|Flink不支持分库分表的改造之路
|
存储 SQL 监控
MySQL开发规范之我见
MySQL开发规范之我见
134 0
|
存储 缓存 Oracle
OceanBase 源码解读(六):存储引擎详解
从2010年一路走来,每一步 OceanBase 犹如走在悬崖峭壁,走得十分小心翼翼。回头看,非处当时之情景,不能理解当时之设计。好的设计不是“想”出来的,而是“痛”出来的,希望大家在阅读时也能够感受到这份成果背后的“痛并快乐着”。
1353 0
OceanBase 源码解读(六):存储引擎详解
|
SQL 存储 NoSQL
Greenplum应用最佳实践
Greenplum分布式分析数据库 通用操作的最佳实践。持续更新
1460 0
Greenplum应用最佳实践