PCSD 考试说明及课程汇总
作者: hughzm 原文来源:https://tidb.net/blog/0e4162d6
一、PCSD 认证说明
Tidb 认证(平凯数据库认证)考试说明:
https://learn.pingcap.cn/learner/certification-center
价值:TiDB 的国产数据库排名在前 3,TiDB 在国际 DB 排行榜排名在 72(高于国内其他数据库),可见 TiDB 是被国内外都认可的。本身的认证证书同样具有公信力。
然后,如果你想去的公司想用或者在用 Tidb,那么你就赚大了!
考试报名
https://learn.pingcap.cn/learner/exam-market/list?category=PCSD
积分兑换
https://asktug.com/t/topic/663967
积分攻略
https://asktug.com/t/topic/1024366
PCSD 考试范围指引
https://asktug.com/t/topic/994111
备考需要学习课程 ,在考试范围内写的很清楚。如果你是 java 开发的话,那么学习 201.1~201.5
学习课程
https://learn.pingcap.cn/learner/course
二、201 课程总结
学习路径
201.2
KeySet Seeker 操作深度分页解决方式: 每次记住下次分页的开始位置这种方式其实只适合于 ID 严格递增 MySQL 高性能中给出了深度分页的解决方式: 使用 in (select id from … limit m , offset n)
NULL 是 order by 的最小值
窗口函数
partion by
LAG/LEAD
表连接
UNION 默认 union DISTINCT , 保留重复记录 Union ALL
TIDB 支持差集 (Except) 和交集 (Intercept)
子查询
IN 和 EXISTS 区别: IN 先子查询,后匹配; EXISTS 先外查询,再匹配
WITH (创建临时表,提升可读性)
201.3
TiDB 以区分大小写的方式存储对象名,但以不区分大小写的方式进行比较
TiDB 中的默认字符集是 utf8mb4,与 MySQL 8.0 及更高版本中的默认字符集匹配
排序规则 (collation) 是在字符集中比较字符以及字符排序顺序的规则, 如果字符集不一致也会导致 JOIN 的时候无法走索引utf8mb4_bin 和 utf8mb4_general_ci 差异
SHOW CREATE TABLE 语句用于显示创建已有表的确切语句, 能够看到没有显性声明的、但实际生效的属性
复制表
临时表:仅对创建它的会话可见, 不会出现在 information_schema.tables
闪回表:垃圾回收生命周期窗口之内还原被丢弃的表和数据 (机制: MVCC)
AUTO INCREMENT
递增,非严格递增,分段分配给每个 Server
show variables like ‘auto increment %’;
LAST INSERT ID(): 检索上次插入操作所使用的值
AUTO_RANDOM
是一个字段属性,用于自动随机填充默认列值以解决热点问题
随机分片,仅支持 BIGINT 数据类型
类似 GUID, 但是是 BIGINT 类型,效率更高,最佳实践
DML 不会阻塞 DDL,原理:在线变更 DDL,是在两个状态(旧 DDL-> 新 DDL)之间引入多个相互兼容的小版本状态, 通过多个小版本演进的方式以 ADD INDEX 为例,整个变更状态流程如下:absent -> delete only -> write only -> write reorg -> public
主键(如果没有主键或主键不是 Integer,则会创建非聚簇的隐藏主键)聚簇索引和非聚簇索引差异:
聚簇索引将数据行按照索引键的顺序存储,因此查询聚簇索引键的操作效率较高。
非聚簇索引存储索引键及其对应的指针,指向数据行的存储位置。数据行的存储顺序与索引键的顺序无关,因此非聚簇索引通常需要更多的磁盘 I/O 操作来定位实际数据行。
缓存表 – 将不频繁修改小表放入缓存, 注意:
对缓存表执行 DDL 语句会失败。若要对缓存表执行 DDL 语句,需要先去掉缓存属性,将缓存表设回普通表后,才能对其执行 DDL 语句
目前 TiDB 对于每张缓存表的大小限制为 64 MB
往缓存表写入数据时,有可能出现秒级别的写入延迟
分区表 (可以将全表扫描优化为分区扫描,节省 IO ;针对传统冗余大表优化效果应该很好)
Range 分区(Range 必须是连续的,并且不能有重叠)
Hash 分区
Placement Policy (针对集群多区域部署)
用户可以将表指定部署至不同的地域、主机
支持应用跨地域部署
保证本地的数据副本可用于本地 Stale read 读取
TiFlash(优化分析查询,对于列很多,优势明显;原理:kvRaft 中作为 learner 参与复制)
加速聚合
DML
REPLACE 语句
避免重复行记录错误(INSERT … ON DUPLICATE KEY UPDATE)
TRUNCATE 非事务方式从表中删除所有数据,无法回滚!!语义可以认为(DROP TABLE + CREATE TABLE)
事务
手动事务(无法嵌套)、隐性事务
因果一致性事务在因果一致性的情况下,只有事务 1 和事务 2 加锁或写入的数据有交集时,才能保证事务的提交顺序与事务的发生顺序保持一致
隔离级别(REPEATABLE-READ)
预编译
201.4
JDBCjava -cp .:misc/mysql-connector-java-5.1.36-bin.jar DemoJdbcConnection5.1.36 兼容 Mysql5.7 最高版本
处理 SQL 中特殊字符
`` 反单引号包围
占位符 + 预编译
ONLY_FULL_GROUP_BY 在 Mysql5.7 版本中,ONLY_FULL_GROUP_BY 默认为 Flase,而 Tidb 中默认为 True。可以通过修改 sql_mode 改为一致如果取消了 ONLY_FULL_GROUP_BY 限制,那么 group by 取的非 group 列值为主键排序第一行
异常处理(设置不自动提交,通过 try catch,获取错误码,灵活控制数据更新逻辑)
201.5
SQL 最佳实践
事务
二级索引创建索引最佳实践
Java 开发最佳实践
启用服务端预编译 (useServerPrepStmts=true)
批量插入,启用 Insert 重写(rewriteBatchedStatements=true)
大结果集的场景中使用 StreamingResultJDBC 默认提前获取查询结果并将其保存在客户端内存中两种推荐的处理方式
设置 Fechsize 为 Integer.MIN VALUE 让客户端不缓存, 并使用 streamingResult
设置 JDBC 参数 usecursorFetch 为 true, 并设置语句参数 Fetchsize 为正整数
推荐连接参数汇总
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/0de879c0499a00e5ddac231b1】。文章转载请联系作者。
评论