【 TiDB 使用环境】测试
【 TiDB 版本】v5.4.3
【复现路径】无
【遇到的问题:问题现象及影响】
目前考虑使用.NET做类似TiCDC的调度工具,进行数据同步,有开放接口或者表可以查到单位时间内的数据变化么?
之前的binlog ,可以采用文件的模式存放,可以通过其他的方式还原来查询
TiCDC,需要自己保存所有的变化信息了,然后在根据你的场景要求来做查询,但是要考虑到数据规模和增长速度… 有点小挑战
最简单的方案:
TICDC ---> kafka ----> kafka client consumer -> other tidb.... or doris,starRocks....
也可以考虑采用 flink 的链路来作 sink 服务,这样下游可以对接更多的服务
本意是服务器不够,想跳过TiCDC,省一台服务器~
那就通过 snapshot 来做咯,就是需要定个周期,但是没增量那么准确.
肯定没那么完美的
请展开来讲一讲~
每隔 1 分钟,或者 X 分钟,读取一下数据,用时间作为版本字段,然后保存起来。
但是这样的处理没办法解决 数据被 Delete 的状态… 只能通过补偿算法,来做判断和处理。
没TICDC 直接…
应该不需要这么麻烦,只需要读取到X分钟内数据是否变化即可,如果有变化,就增量同步,不需要知道变成了什么?我看有个闪回功能,不知道能不能用。
闪回(Flashback)是 TiDB 数据库提供的一种数据恢复功能,可以将数据库恢复到某个历史时间点的状态。闪回功能和 GC(Garbage Collection)有一定的关系。
在 TiDB 中,GC 是用来回收已经被删除的数据占用的存储空间的。GC 会定期扫描 TiKV 中的数据,将已经被删除的数据标记为“可以回收的”,然后在后续的 Compaction 过程中将这些数据真正地回收掉。GC 的过程是不可逆的,一旦数据被 GC 回收,就无法再恢复了。
而闪回功能则是用来恢复已经被删除的数据的。闪回功能可以将数据库恢复到某个历史时间点的状态,包括已经被删除的数据。因此,闪回功能可以用来恢复已经被 GC 回收的数据。
需要注意的是,闪回功能只能恢复已经被删除的数据,而不能恢复已经被修改的数据。因此,在使用闪回功能时,需要注意选择恢复的时间点,以免恢复到错误的状态。
总之,闪回功能和 GC 有一定的关系。GC 是用来回收已经被删除的数据占用的存储空间的,而闪回功能则是用来恢复已经被删除的数据的。闪回功能可以用来恢复已经被 GC 回收的数据,但不能恢复已经被修改的数据。
您可以使用 TiDB 的 SELECT ... AS OF TIMESTAMP
语句来获取一段时间内的有变化的数据。具体步骤如下:
-
首先,您需要在表上启用 TiDB 的闪回功能。您可以使用以下命令启用闪回功能:
ALTER TABLE table_name ENABLE FLASHBACK;
-
然后,您可以使用以下语法来查询一段时间内的有变化的数据:
SELECT * FROM table_name AS OF TIMESTAMP 'start_time' WHERE update_time >= 'start_time' AND update_time < 'end_time';
其中,
table_name
是您要查询的表名,start_time
和end_time
是您要查询的时间范围,update_time
是您表中记录更新时间的列名。例如,如果您要查询 2021 年 5 月 1 日至 2021 年 5 月 31 日之间
table_name
表中有变化的数据,您可以使用以下语句:SELECT * FROM table_name AS OF TIMESTAMP '2021-05-01 00:00:00' WHERE update_time >= '2021-05-01 00:00:00' AND update_time < '2021-06-01 00:00:00';
这将返回在该时间范围内更新过的所有行。
更多关于 TiDB 闪回功能的信息可以在 [1] 中找到,关于 SELECT ... AS OF TIMESTAMP
语句的详细信息可以在 [2] 中找到。
注意:闪回功能需要在 TiDB 集群中启用 TiDB Binlog,因此在使用闪回功能之前,请确保您的 TiDB 集群已经启用了 TiDB Binlog。
嗯,依赖于binlog,还是要加机器~
哈?这个Binlog是周边工具那个Binlog么?
我让同事试一下吧
5.X 支持得不太好,试试吧
我觉得加个update_time时间戳列就行,属性设为自动更新,然后你同步时候通过这个时间戳范围查找
update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTA
你这什么时候的文档,SELECT * FROM table_name AS OF TIMESTAMP 并不用ALTER TABLE table_name ENABLE FLASHBACK;这个步骤,直接就可以查,mvcc功能,和后面TiDB Binlog没啥关系啊
省不了这个。后患无穷
表太多,几乎所有表都要维护一遍,还涉及客户的升级~不敢想象
哦吼,是这样么?
目前主要是考虑集成到自己软件中,不通过第三方软件去管理调度。
其实也很好奇,这些软件是如何感知到数据变化的。