有关数据表字段的updateTime creatTime的作用
由于之一直再写前端的项目业务没有规范过后端你的字段表数据,一直都不太清楚后端数据表creatTime
和updateTime
在业务中的实际使用方式。然而在这次的项目实践中这两个字段起到了相当大的作用。
示例
对下表数据是远程数据库信息
id | name | department | evaluate | creatTime | updateTime |
---|---|---|---|---|---|
1 | 张三 | 信息工程 | 优 | 2020-10-01 18:00:00 | 2020-10-01 18:00:00 |
2 | 李四 | 食品卫生 | 良 | 2020-10-01 18:00:00 | 2020-10-01 18:00:00 |
……… | ……… | ……… | ……… | ……………… | ……… |
1000 | 王五 | 动物科学 | 差 | 2020-10-01 18:00:00 | 2020-10-01 18:00:00 |
我们有一个业务user表
id | name | department | creatTime | updateTime |
---|---|---|---|---|
1 | 张三 | 信息工程 | 2020-10-01 18:00:00 | 2020-10-01 18:00:00 |
2 | 李四 | 食品卫生 | 2020-10-01 18:00:00 | 2020-10-01 18:00:00 |
……… | ……… | ……… | ……… | ……………… |
1000 | 王五 | 动物科学 | 2020-10-01 18:00:00 | 2020-10-01 18:00:00 |
对于远程表我们只有读取权限
,并且它的增删改查
我们都没有对应的事件去响应它,但是我们需要做到user表和远程业务表的信息同步。我们可以怎么做呢?
1.全表对比
将远程数据库全读,与本地库对比添加修改。这是最稳最简单的方法,如果业务允许甚至可以清空添加。
但是问题也非常明显,这种方式消耗性能
、数据量大的时候时间长
、数据更新如果锁定表会影响整个系统
等等。
因此引出第二个方法
2. 时间增量法
因为远程和本地都存在creatTime
和updateTime
两个字段,完全可以通过查询远程数据库中 updateTime和creatTime处于本地数据库最后的updateTime到当前时间的数据,只用同步这一部分的数据即可。
例如下面逻辑
- 远程表 origin_user
id | name | department | evaluate | creatTime | updateTime |
---|---|---|---|---|---|
1 | 张三 | 信息工程 | 优 | 2020-10-01 18:00:00 | 2020-10-01 18:00:00 |
2 | 李四 | 食品卫生 | 良 | 2020-10-01 18:00:00 | 2020-10-01 18:00:00 |
……… | ……… | ……… | ……… | ……………… | ……… |
999 | 赵六 | 食品卫生 | 良 | 2020-10-01 18:00:00 | 2020-10-08 18:00:00 |
1000 | 王五 | 动物科学 | 差 | 2020-10-01 18:00:00 | 2020-10-09 18:00:00 |
- 业务表target_user(最后更新时间
2020-10-01-18:00:00
)
id | name | department | creatTime | updateTime |
---|---|---|---|---|
1 | 张三 | 信息工程 | 2020-10-01 18:00:00 | 2020-10-01 18:00:00 |
2 | 李四 | 食品卫生 | 2020-10-01 18:00:00 | 2020-10-01 18:00:00 |
……… | ……… | ……… | ……… | ……………… |
1000 | 王五 | 动物科学 | 2020-10-01 18:00:00 | 2020-10-01 18:00:00 |
- 当前时间(
2020-10-11 13:20:00
) - sql语句如下:
select * from origin_user where updateTime between `2020-10-01 18:00:00` and `2020-10-11 13:20:00`
# 之后同步即可