PostgreSql,想问一下从其他数据库同步数据的处理逻辑 返回

SqlSugar 沟通中
2 113

现在在做一个需求是从其他数据库同步差不多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 fate sta VIP0
    1个月前

    1、性能最高效: truncate清空表在批量插入

    2、主表和子表整理成2个list 在批量插入



    0 回复
  • @fate sta:第二点的话,子表会用到主表的id,分成两个list的情况,是不是没办法处理了。先弄一个guid去绑定,全部同步完成再去更新?

    0 回复