面对大数据量同步的困惑

bxdg42578670 2010-03-13 01:47:07
场景:



A 、B 两个系统之间 进行数据交互同步 (通过txt文件交互, 由于数据量较大), A系统将数据写入文件当中, B系统将文件中的数据读取 入库, 保证两者之间的独立性。


由于需要做到增量更新,B系统需要记录 数据的操作类型(例如,此条数据为增加、还是修改、还是删除等), 这就需要将数据库的数据读取上来,进行比较, 可由于数据量较大,内存性能的开销无法解决, 想尝试使用批次读取的方式来比较集合, 可是这样仍然问题重重, 也曾想过使用版本号记录的方式来解决问题, 可带来的是频繁插入带来的性能开销!



大家在这样的情况下,都是怎样解决问题的呢?, 或者你有什么更好的建议,可以讨论讨论







听说 LDAP 上的信息数据 交互性就很大, 而且保证了数据的安全性和内存开销,而且性能要高于数据库, 没有使用过LDAP,烦请懂的人 指点一二.
...全文
157 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bxdg42578670 2010-04-05
  • 打赏
  • 举报
回复
to 5楼:

表是没有办法truncate 掉的, 因为存在的数据 主键是自动生成的,并且 很多地方都在使用当做外键来引用, 因此需要比较出来那些数据时更新的, 那些数据时增加的,


虽然需要将 A系统的数据 完全覆盖B系统(除了主键), 但B系统的表里并不是只有A系统的数据 还可能有D 等其他系统的数据, 因此 吥能truncate!


bxdg42578670 2010-03-19
  • 打赏
  • 举报
回复
to 6楼:


由于不允许数据库之间交互, 中间是使用文本文件的方式来做载体!

如果不进行比较, 怎么会得出操作类型呢?。 不知道哪个帐号被修改过, 还是增加的

lizhongqiang_126 2010-03-13
  • 打赏
  • 举报
回复
你从A系统写数据的时候可以考虑把操作类型写入到文件中,而不是在B系统里进行大数据量的比对。
qingyuan18 2010-03-13
  • 打赏
  • 举报
回复
不是很清楚AB系统间同步的逻辑,楼主的问题中提到有删除更新,即是说每次同步B系统中的数据要全部改成A系统发过来的txt文件中的记录内容么?这样的话相当于每次truncate掉整个表再全部重新insert了?

如果只是大数据量的txt导入数据库的性能问题,主流的数据库厂商都有应对的策略,比如DB2的load工具就是专门为大数据量导入做的,导入过程不会逐条的写归档日志,也不会立刻建索引,性能是能满足需求的,但是如果你的业务需求中要记录每次导入时记录变更的详细情况的话,那估计只能先导入临时表,然后将原表与临时表做sql比较,得出结果后再truncate原表,将临时表内容全量插入,这样不用导入每条记录都检查原表

QQ:121102723,多交流吧
bxdg42578670 2010-03-13
  • 打赏
  • 举报
回复
我说的是比较啊, 如果你不拿上来集合比较, 你怎么知道这一条数据是要新增呢, 或者还是要删除呢?
nenyalanye 2010-03-13
  • 打赏
  • 举报
回复
你可以吧 新增,修改,删除 放到同一个事务中 批量提交 不知道我理解的对不对
bxdg42578670 2010-03-13
  • 打赏
  • 举报
回复
一次性 满足不了, 才来讨论的啊!
小贝壳666 2010-03-13
  • 打赏
  • 举报
回复
我觉得一次性读取就可以,性能考虑,一次性读取比较最快,LZ说的内存问题,那要看你有多少条数据?十万条应该不会有问题,内存不够用就增加JVM的内存,现在都几G的内存,再大量的数据都可以搞定。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧