场景:

      A 、B 两个系统之间 进行数据交互同步 (通过txt文件交互, 由于数据量较大), A系统将数据写入文件当中, B系统将文件中的数据读取 入库, 保证两者之间的独立性。
      由于需要做到增量更新,B系统需要记录 数据的操作类型(例如,此条数据为增加、还是修改、还是删除等), 这就需要将数据库的数据读取上来,进行比较,  可由于数据量较大,内存性能的开销无法解决, 想尝试使用批次读取的方式来比较集合,  可是这样仍然问题重重, 也曾想过使用版本号记录的方式来解决问题, 可带来的是频繁插入带来的性能开销!      大家在这样的情况下,都是怎样解决问题的呢?, 或者你有什么更好的建议,可以讨论讨论
   
听说 LDAP 上的信息数据 交互性就很大, 而且保证了数据的安全性和内存开销,而且性能要高于数据库, 没有使用过LDAP,烦请懂的人 指点一二.

解决方案 »

  1.   

    我觉得一次性读取就可以,性能考虑,一次性读取比较最快,LZ说的内存问题,那要看你有多少条数据?十万条应该不会有问题,内存不够用就增加JVM的内存,现在都几G的内存,再大量的数据都可以搞定。
      

  2.   

    不是很清楚AB系统间同步的逻辑,楼主的问题中提到有删除更新,即是说每次同步B系统中的数据要全部改成A系统发过来的txt文件中的记录内容么?这样的话相当于每次truncate掉整个表再全部重新insert了?如果只是大数据量的txt导入数据库的性能问题,主流的数据库厂商都有应对的策略,比如DB2的load工具就是专门为大数据量导入做的,导入过程不会逐条的写归档日志,也不会立刻建索引,性能是能满足需求的,但是如果你的业务需求中要记录每次导入时记录变更的详细情况的话,那估计只能先导入临时表,然后将原表与临时表做sql比较,得出结果后再truncate原表,将临时表内容全量插入,这样不用导入每条记录都检查原表QQ:121102723,多交流吧
      

  3.   

    to 5楼:表是没有办法truncate 掉的, 因为存在的数据 主键是自动生成的,并且 很多地方都在使用当做外键来引用,  因此需要比较出来那些数据时更新的, 那些数据时增加的, 
    虽然需要将 A系统的数据 完全覆盖B系统(除了主键), 但B系统的表里并不是只有A系统的数据 还可能有D 等其他系统的数据, 因此 吥能truncate!