《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X的TTL表的使用和原理(1) https://developer.aliyun.com/article/1228589?groupCode=polardbforpg
TTL提供了视图,可以通过select*from information_schema.local_partitions 查看系统视图表,传入表名即可看到表中所有TTL分区。注意,TTL分区与数据分区不一样,数据分区为按照哈希、range分区,TTL分区按照时间分区。
上图显示共有三个分区,小于2022-11-1的数据会被路由到第一个分区,小于2022-12-1的数据会被路由到第二个分区,其他数据会被路由到最后一个分区。也显示了每个分区的失效时间,可以通过右侧命令将分区删除,或通过定时任务自动将分区删除。
注意,如果分区没有过期,则即使执行删除分区命令,该分区也不会被删除,只有已经过期的分区才会被删除。
同样,如果多次调用allocate local partition命令,也不会无限创建新分区,而是会按照建表时定义的提前创建分区的时间,比如定义了提前创建3个分区,则最多只提前创建3个分区。
check table指令用于校验TTL分区的一致性。TTL功能与PolarDB-X的分区表功能正交,PolarDB-X的每个分区在数据节点上都是一个物理表,TTL负责对物理表再做分区。命令作用是校验PolarDB-X所有分区下物理表的物理分区是否相同。TTL默认会保证所有功能的一致性。
所有TTL表与普通表、TTL表之间可以进行任意转换。
PolarDB-X定时任务框架接收到cron表达式后,会自动对其进行转换,展示为人类可读的语句,如上图所示。
如果对内核如何实现DDL感兴趣,可以在执行任何DDL时,在前面加上trace指令,然后再执行show trace指令,即可展示如上图所示的可视化图,可以看到DDL进行了哪些操作。它由一系列task组成,每一个task都与开源代码中Java源文件一一对应,也可以在开源代码中搜索相应class,查看主要代码。
创建新分区与失效老分区的内部逻辑是滑动窗口的时间判断。进行时间判断后会将其翻译为针对数据节点上对物理表的操作。新建分区的本质为reorganize操作,比如要新建分区,其本质为将pmax分区reorganize成多个更细粒度的分区。失效老分区的本质为drop partition操作。
《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X的TTL表的使用和原理(3) https://developer.aliyun.com/article/1228585?groupCode=polardbforpg