PostgreSql,想问一下从其他数据库同步数据的处理逻辑 返回
现在在做一个需求是从其他数据库同步差不多15万条数据过来,项目用的PostgreSql。
然后目前我的处理逻辑是:
1、查询同步记录表,判断上一次的同步是否完成。
2、获取上一次同步的最大时间,然后用这个时间去查对方表的数据,取X条过来。
3、BeginTranAsync(),然后开始循环这个list数据
3.1、做各种各样的数据转换。这里涉及到很多把对方字符串数据转换成我这边对应的数据id。
3.2、对方的一条项目数据,对应我这边的项目主表+项目子表,先插入了主表,然后获取实体之后,处理一些信息再插入子表。
3.3、对方的一条项目拥有十多条价格数据,处理完子表之后,去查询到这个项目的价格数据,然后同步插入到我这边的价格表。
3.4、上面的完成之后,插入同步详情记录表。
4、结束循环,CommitTranAsync()。
根据日志查看的话,BeginTran是14:40:12.7921,CommitTran是14:50:58.2708
循环的时候
第一次开始是14:40:12.8257,结束是14:40:15.6965,
最后一次是14:50:55.6653,结束是14:50:58.2708,差不多3、4秒,同步250条数据就要10多分钟的样子了,有什么能优化的吗。
目前,我这边主表和子表里各自有接近9万条数据,价格表里有150万条数据。
热忱回答(2)
-
fate sta VIP01个月前
1、性能最高效: truncate清空表在批量插入
2、主表和子表整理成2个list 在批量插入
0 回复 -
国王迷宫 VIP01个月前
@fate sta:第二点的话,子表会用到主表的id,分成两个list的情况,是不是没办法处理了。先弄一个guid去绑定,全部同步完成再去更新?
0 回复