写点什么

PCSD 考试说明及课程汇总

  • 2024-04-26
    北京
  • 本文字数:2286 字

    阅读完需:约 8 分钟

作者: 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


  1. 递增,非严格递增,分段分配给每个 Server

  2. show variables like ‘auto increment %’;

  3. LAST INSERT ID(): 检索上次插入操作所使用的值


  • AUTO_RANDOM


是一个字段属性,用于自动随机填充默认列值以解决热点问题


随机分片,仅支持 BIGINT 数据类型


类似 GUID, 但是是 BIGINT 类型,效率更高,最佳实践


DML 不会阻塞 DDL,原理:在线变更 DDL,是在两个状态(旧 DDL-> 新 DDL)之间引入多个相互兼容的小版本状态, 通过多个小版本演进的方式以 ADD INDEX 为例,整个变更状态流程如下:absent -> delete only -> write only -> write reorg -> public


  • 主键(如果没有主键或主键不是 Integer,则会创建非聚簇的隐藏主键)聚簇索引和非聚簇索引差异:


  1. 聚簇索引将数据行按照索引键的顺序存储,因此查询聚簇索引键的操作效率较高。

  2. 非聚簇索引存储索引键及其对应的指针,指向数据行的存储位置。数据行的存储顺序与索引键的顺序无关,因此非聚簇索引通常需要更多的磁盘 I/O 操作来定位实际数据行。



  • 外键: 支持语法,但不检查

  • 缓存表分区表(针对全表扫描的优化方式)


缓存表 – 将不频繁修改小表放入缓存, 注意:


  1. 对缓存表执行 DDL 语句会失败。若要对缓存表执行 DDL 语句,需要先去掉缓存属性,将缓存表设回普通表后,才能对其执行 DDL 语句

  2. 目前 TiDB 对于每张缓存表的大小限制为 64 MB

  3. 往缓存表写入数据时,有可能出现秒级别的写入延迟


  • 分区表 (可以将全表扫描优化为分区扫描,节省 IO ;针对传统冗余大表优化效果应该很好)


  1. Range 分区(Range 必须是连续的,并且不能有重叠)

  2. Hash 分区


  • Placement Policy (针对集群多区域部署)


  1. 用户可以将表指定部署至不同的地域、主机

  2. 支持应用跨地域部署

  3. 保证本地的数据副本可用于本地 Stale read 读取


  • TiFlash(优化分析查询,对于列很多,优势明显;原理:kvRaft 中作为 learner 参与复制)



  • 加速聚合



  • DML


  1. REPLACE 语句

  2. 避免重复行记录错误(INSERT … ON DUPLICATE KEY UPDATE)

  3. TRUNCATE 非事务方式从表中删除所有数据,无法回滚!!语义可以认为(DROP TABLE + CREATE TABLE)


  • 事务


  1. 手动事务(无法嵌套)、隐性事务

  2. 因果一致性事务在因果一致性的情况下,只有事务 1 和事务 2 加锁或写入的数据有交集时,才能保证事务的提交顺序与事务的发生顺序保持一致

  3. 隔离级别(REPEATABLE-READ)

  4. 预编译


201.4

  • JDBCjava -cp .:misc/mysql-connector-java-5.1.36-bin.jar DemoJdbcConnection5.1.36 兼容 Mysql5.7 最高版本

  • 处理 SQL 中特殊字符


  1. `` 反单引号包围

  2. 占位符 + 预编译




  • 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 最佳实践


  1. 事务



  1. 二级索引创建索引最佳实践


  • Java 开发最佳实践



  1. 启用服务端预编译 (useServerPrepStmts=true)

  2. 批量插入,启用 Insert 重写(rewriteBatchedStatements=true)

  3. 大结果集的场景中使用 StreamingResultJDBC 默认提前获取查询结果并将其保存在客户端内存中两种推荐的处理方式


  1. 设置 Fechsize 为 Integer.MIN VALUE 让客户端不缓存, 并使用 streamingResult

  2. 设置 JDBC 参数 usecursorFetch 为 true, 并设置语句参数 Fetchsize 为正整数


  1. 推荐连接参数汇总



发布于: 刚刚阅读数: 2
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
PCSD考试说明及课程汇总_社区活动_TiDB 社区干货传送门_InfoQ写作社区