TiDB之分布式数据库TiDB 操作管理规范【附可下载文档】

news2025/2/25 15:52:51

一、 目的

为了在软件生命周期内规范数据库相关的设计、开发、运维工作,便于不同团队之间的沟通及协调,制定此文档,以期在相关规范上达成共识和默契,提升相关环节的工作效率及系统的可维护性。同时好的规范,在执行的时候可以培养出好的习惯,好的习惯是软件质量的很好保证。

二、 使用范围

本文档适用于研发人员、运维开发成员、DBA等所有能接触数到据库的人员。

三、分布式数据库TiDB

3.1 使用限制

3.1.1、标识符长度限制

在这里插入图片描述

3.1.2、事务限制

 TiDB 单个事务大小限制:数据批处理时,默认100MB,最大不超过10GB;
 单行数据的大小限制:默认6MB,最大不超过120MB(开发时注意Json,文本存储等卡类型)
 单个事务包含的 SQL 语句不超过 5000 条(默认)

3.1.3、与MySQL兼容性限制

 存储过程与函数
 触发器
 事件
 自定义函数
 外键约束
 非 ascii/latin1/binary/utf8/utf8mb4 的字符集
 XML 函数
 列级权限 #9766
 CREATE TABLE tblName AS SELECT tb_1
在这里插入图片描述

3.1.4、AUTO_INCREMENT限制

 必须定义在主键或者唯一索引的列上
 只能定义在类型为整数、FLOAT 或 DOUBLE 的列上
 不支持与列的默认值 DEFAULT 同时指定在同一列上
 不支持使用 ALTER TABLE 来添加 AUTO_INCREMENT 属性
 支持使用 ALTER TABLE 来移除 AUTO_INCREMENT 属性
 在集群中有多个 TiDB 实例时,如果表结构中有自增 ID,建议不要混用显式插入和隐式分配(即自增列的缺省值和自定义值),否则可能会破坏隐式分配值的唯一性
如:客户端A插入id=2(id 为自增),客户端B插入id=1;客户端A再次插入时会返回 Duplicated Error 错误。(多台TiDB机器插入不保证连续)
解决:
确认表上自增值的最大值:show create table tb_1;
修改表上的自增值最大值到一个更大的值:alter table tb_1 AUTO_INCREMENT=120000;
 TiDB 的自增列仅保证唯一,也能保证在单个 TiDB server 中自增,但不保证多个 TiDB server 中自增,不保证自动分配的值的连续性

3.1.5、DDL限制

 不能在单条 ALTER TABLE 语句中完成多个操作。例如,不能在单个语句中添加多个列或索引,否则,可能会输出 Unsupported multi schema change 的错误。
在这里插入图片描述

3.2 开发规范

3.2.1、字符集

 TiDB 默认:utf8mb4。
 MySQL 5.7 默认:utf8mb4。(MySQL默认latin1,标准安装默认utf8mb4)
 MySQL 8.0 默认:utf8mb4。

3.2.2、排序规则

 TiDB 中 utf8mb4 字符集默认:utf8mb4_bin。
 MySQL 5.7 中 utf8mb4 字符集默认:utf8mb4_general_ci。
 MySQL 8.0 中 utf8mb4 字符集默认:utf8mb4_0900_ai_ci。

3.2.3、SQL Mode

 TiDB 默认:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION。

 MySQL 5.7 默认与 TiDB 相同。
 MySQL 8.0 默认

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION。

3.2.4、lower_case_table_names

 TiDB 默认:2,且仅支持设置该值为 2。
lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候是不区分大小写
lower_case_table_names=0 表名存储为给定的大小和比较是区分大小写的
lower_case_table_names=2, 表名存储为给定的大小写但是比较的时候是小写的
在这里插入图片描述

3.2.5、删除数据

【建议】删除表中全部的数据时,使用 TRUNCATE 或者 DROP 后重建方式,不要使用 DELETE;
原因:DELETE,TRUNCATE 和 DROP 都不会立即释放空间,对于 TRUNCATE 和 DROP 操作,在达到 TiDB 的 GC (garbage collection) 时间后(默认 10 分钟),TiDB 的 GC 机制会删除数据并释放空间。对于 DELETE 操作 TiDB 的 GC 机制会删除数据,但不会释放空间,而是当后续数据写入 RocksDB 且进行 compact 时对空间重新利用。

3.2.6、GROUP_CONCAT

由于 group_concat() 中没有使用 order by 导致结果集不稳定;
结果集不稳定是因为 TiDB 是并行地从存储层读取数据,所以 group_concat() 不加 order by 的情况下得到的结果集展现顺序容易被感知到不稳定。

mysql> select group_concat(name order by name) from tb_2;

3.2.7、其他

【建议】WHERE条件中不在索引列上进行数学运算或函数运算;
【建议】用 in/union 替换 or,并注意 in 的个数小于 300;
【建议】禁止使用%前缀进行模糊前缀查询;
【建议】如应用使用 Multi Statements 执行 SQL,即将多个 SQL 使用分号连接一次性发给客户端执行,TiDB 只会返回第一个 SQL 的执行结果。

3.3 命名规范

3.3.1、大原则

【要求】命名建议使用具有意义的英文词汇,词汇中间以下划线分隔;避免中划线;
【要求】命名只能使用英文字母、数字、下划线;
【要求】避免用 TiDB 的保留字如:group,order 等作为单个字段名;
【要求】所有数据库对象使用小写字母;
【要求】避免特殊字符。
【建议】参考MySQL命名规范,保持一致

3.3.2、数据库命名规范

建议按照业务、产品线或者其它指标进行区分,一般不要超过 20 个字符。如:临时库(tmp_cbb)、测试库(test_cbb)。

3.3.2、表命名规范

参考MySQL命名规范
【建议】同一业务或者模块的表尽可能使用相同的前缀,表名称尽可能表达含义;
【建议】多个单词以下划线分隔,不推荐超过32个字符;
【建议】建议对表的用途进行注释说明,以便于统一认识。
如:临时表(tmp_t_crm_relation_0425)
备份表(bak_t_crm_relation_20170425)
业务运营临时统计表(tmp_st_[业务代码][创建人缩写][日期])
账期归档表(t_crm_ec_record_YYYY[MM][DD])
【建议】不同业务模块的表单独建立 DATABASE,并增加相应注释。

3.3.3、字段命名规范

【建议】字段命名需要表示其实际含义的英文单词或简写;
【建议】建议各表之间相同意义的字段应同名;
【要求】字段需要添加注释,枚举型需指明主要值的含义,如”0 - 离线,1 - 在线”;
【要求】布尔值列命名为 [is_描述]。如 member 表上表示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1473736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

飞行棋网站源码

最近抖音很火的情侣飞行棋网站源码,这款情侣飞行棋提供了丰富的游戏玩法,可以为情侣、朋友或家人带来欢乐的游戏体验。无论是在家中,还是在聚会、旅行等场合,都可以轻松启动该网站,共同享受游戏的乐趣。 源码获取搜一搜…

【BUG 记录】史诗级 BUG - MYSQL 删库删表却没有备份如何恢复数据

【BUG 记录】史诗级 BUG - MYSQL 删库删表却没有备份如何恢复数据 1. 问题描述2. 解决方案(binlog)2.1 构造测试环境2.2 查看 MySQL 环境是否开启 binlog2.3 查看所有的 binlog 日志记录2.4 查看当前正在使用的是哪一个 binlog 文件2.5 查看此时的 binlo…

Redis 发布订阅详解

Redis 发布订阅 Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。 Redis 有两种发布订阅模式 基于频道(Channel)的发布订阅基于模式&#xff…

腾讯云4核8G服务器有用过的吗?性能咋样?

腾讯云4核8G服务器支持多少人在线访问?支持25人同时访问。实际上程序效率不同支持人数在线人数不同,公网带宽也是影响4核8G服务器并发数的一大因素,假设公网带宽太小,流量直接卡在入口,4核8G配置的CPU内存也会造成计算…

MySQL进阶45讲【26】主库出问题了,从库怎么办?

1 前言 在前面的MySQL进阶45讲【23】MySQL是怎么保证主备一致的?、MySQL进阶45讲【24】MySQL是怎么保证高可用的?和MySQL进阶45讲【25】备库为什么会延迟好几个小时?3篇文章中,介绍了MySQL主备复制的基础结构,但这些都…

Python算法100例-2.5 存钱

完整源代码项目地址,关注博主私信源代码后可获取 1.问题描述2.问题分析3.算法设计4.确定程序框架5.完整的程序 1.问题描述 假设银行整存整取存款不同期限的月利率为: 0.63%,期限为1年; 0.66%,期限为2年…

Java练习(第4天)【总结】反转字符串的9种不同实现方法

一、问题描述 给定一个字符串,输出反转后的字符串。 样例输入1: abc 样例输出1: cba 样例输入2: GeeksforGeeks 样例输出2: skeeGrofskeeG 二、Java实现(九个程序) 1、实现1 思想: 逐个取 倒序拼 Java代码: i…

测试开发(6)软件测试教程——自动化测试selenium(自动化测试介绍、如何实施、Selenium介绍 、Selenium相关的API)

接上次博客:测试开发(5)测试分类标准 :按测试对像划分、按是否查看代码划分、按开发阶段划分、按测试实施组织、按是否运行划分、按是否手工划分、按测试地域划分-CSDN博客 目录​​​​​​​ 什么是自动化测试 自动化测试介绍…

【Unity自制手册】Unity—Camera相机跟随的方法大全

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

微信小程序蓝牙通信HC08

总结这两天研究的蓝牙串口。人话版资料不多,主要靠翻别人的仓库和文档。 单片机部分,与蓝牙串口通信是通过串口。比我想的要简单,小程序部分,有非常多的服务和特征,而且人话版资料不多。 如果本文有什么问题&#xf…

C# 水排序 微信小游戏

来只 水排序谜题启发式搜索方法_水排序解法小程序-CSDN博客 大神的C语言转换成C# 语言,更多的请看原作者,这里直接贴C#代码 using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace ConsoleApp2 {class Pro…

再见,Visual Basic——曾经风靡一时的编程语言

2020年3月,微软团队宣布了对Visual Basic(VB)的“终审判决”:不再进行开发或增加新功能。这意味着曾经风光无限的VB正式退出了历史舞台。 VB是微软推出的首款可视化编程软件,自1991年问世以来,便受到了广大…

vue插件——vue-print-nb 实现打印功能

之前写过好多关于打印的功能,通过windowprint组合键来实现打印。 今天遇到一个需求,就是使用vue插件来实现打印功能。 最终效果图如下: 下面介绍解决步骤: 解决步骤1:安装vue-print-nb插件——npm install vue-p…

2024年,“智慧城市”到底是持续拉跨还是稳步向前?

2024年“智慧城市”的发展趋势,总体上来看,是稳步向前的。 随着科技的不断发展,特别是物联网、云计算、大数据、人工智能等技术的日益成熟和普及,智慧城市的建设有了更为坚实的基础。这些技术不仅可以帮助城市实现更高效、智能的…

智慧公厕让社区生活更美好

随着科技的迅猛发展,城市管理、城市服务均使用科技化的手段进行升级改造,社区生活更美好赋予全新的智慧效能,其中智慧公厕也成为了城市环卫设施的新宠。智慧公厕以物联网、互联网、大数据、云计算、5G通信、自动化控制等技术为核心&#xff0…

Leetcoder Day23| 回溯part03:组合+分割

语言:Java/Go 39. 组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的所有不同组合 ,并以列表形式返回。你可以按任意顺序返回这些组合。 candidates 中的同一个…

经典文献阅读之--Scale jump-aware pose graph...(尺度跳跃感知位姿图)

0. 简介 我们常说的位姿图松弛指的就是基于闭环检测的边进行位姿图优化。而位姿图松弛已成为SLAM中不可或缺的补充,能够在满足逐对相对变换约束的目标下,实现传感器参考帧的高效全局配准。这些约束可以通过增量运动估计或全局地点识别来给出。尽管后一种…

SpreadJS+vue3练手使用

SpreadJS的练手使用 // 首先在 package.json 这个文件里{"name": "app-admin","private": true,"version": "0.0.0","type": "module","scripts": {"dev": "vite",&quo…

el-submenu is-opened 展开/闭合;el-submenu is-opened保持一个子菜单的展开控制

写了个mes系统目录 点击子菜单展开后&#xff0c;上一级菜单没有默认关闭。主流后台管理系统大部分都是保持一个子菜单关闭状态、 问度娘无果后&#xff0c;查询官网&#xff0c;一个属性搞定。 unique-opened 是否只保持一个子菜单的展开 加在 <el-menu 组件上即可 完整代…

《品牌声量》开播啦!

11月7日&#xff0c;中国品牌人物高端访谈节目《品牌声量》将在中央新影老故事频道和央视频等平台陆续播出。 《品牌声量》栏目一档专注中国企业/行政区品牌建设的大型演播厅访谈节目。栏目以“汇聚品牌思想&#xff0c;提升品牌声量”为宗旨&#xff0c;采用“著名主持人权威…