求助, MySQL 时间戳问题

2021-12-03 11:12:48 +08:00
 jtwor
目前有一个需求,需要读取一个表,表的数据是第三方去写入,我需要写服务监听这个表,按上一次记录的最后更新时间做开始节点去处理这些数据。

表结构大致如下:

CREATE TABLE test (
id bigint(20) NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键 ID',
val varchar(128) NOT NULL COMMENT '数据',
update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
COMMENT '更新时间(修改时自动更新)'
)

SQL:
select * from test where update_time>@上一次最后修改时间 order by update_time limit 5000 offset 0;

难点:
1 、目前项目使用的是 MySQL ,MySQL 没有 SqlServer 那种 timestamp 时间戳,只要数据更新就会更新唯一的时间戳,MySQL 的时间戳是可以重复的。

2 、第三方不只是插入数据,可以修改历史的数据,这样意味着不能使用自增主键作为最后修改的节点,必须使用时间戳作为条件。

3 、数据量预计是千万级,我需要分页分批处理,又因为 MySQL 时间戳能重复,不能不断缩小时间范围,只能使用 limit offset 分页,当数据量大时效率很低,即使击中了索引,数据不断累积也会越来越慢。

场景:
id update_time
201 2021-12-02 00:00:02
202 2021-12-02 00:00:02
203 2021-12-02 00:00:02
======分页=======
204 2021-12-02 00:00:02
205 2021-12-02 00:00:02
206 2021-12-02 00:00:02

求求大佬指导一下,MySQL 有没有类似 SqlServer 的时间戳数据类型,SQL 和分批处理的设计能不能优化一下。
2443 次点击
所在节点    MySQL
10 条回复
jorneyr
2021-12-03 11:29:44 +08:00
updated_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
jtwor
2021-12-03 11:32:42 +08:00
@jorneyr 现在的最后修改时间已经是用这种自动更新时间戳了,主要是时间不是唯一,批量 insert into select 时间都一样。。
liprais
2021-12-03 11:39:50 +08:00
直接 cdc 完事
jtwor
2021-12-03 11:50:41 +08:00
@liprais 这个阔以,但菜鸡的我不敢用到生产。。
wlkq
2021-12-03 12:00:38 +08:00
你看看“触发器”能不能搞你这个需求,但是触发器需要更高的权限
lllby1102
2021-12-03 12:55:20 +08:00
@wlkq 从管理的角度,非常不建议使用触发器,维护很恶心的。
laozhoubuluo
2021-12-03 13:17:36 +08:00
感觉与其折腾时间戳,还不如要求对方维护一个单向自增的 ID ,只要数据修改就要改 ID ,bigint unsigned 足够用到天荒地老。
TypeErrorNone
2021-12-03 13:50:36 +08:00
增量处理数据
1. 添加一个状态字段
2. 第三方操作(插入,更新)后的数据状态都是 1
3. 你的脚本处理完的数据状态都设置为 2
4. 你的脚本每次开始获取数据时,只取状态=1 的数据
Yi23
2021-12-03 19:20:36 +08:00
时间这个是不是可以使用 datatime 类型,加上长度,保存到毫秒(微秒)?
slomo
2021-12-08 18:31:15 +08:00
一定要 mysql 吗,时序数据库不好吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/819742

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX