目前用java做一个对账功能, 功能描述如下:
1. 系统这边记录的账目都在系统数据库中,而需要进行对比的数据是调用第三方给的一个接口查询得到的(webservice)网络传输 这些数据返回时有些慢。
2. 现在要根据时间段来进行对账,会出现的情况 快钱中有数据系统中没有 系统中又快钱中没有 都有的金额不一样 金额和数据都一样, 也就是两边的数据都要进行逐条比对有可能还会出现重复的数据。
3. 我的思路 系统中的数据是一个list 第三方返回的组成一个list 然后对比
4. 慢的地方 1.第三方返回数据时候需要查询好多次因为他们每次只返回一页的记录 我需要多次查询拼成一个list 2. 两个list都有的话 进行对比
5. 希望高手能从上面慢的地方给点意见看怎么做性能高,或者给出个好的思路。。 跪求。
性能优化
------解决方案--------------------
首先要看别人提不提供list方式查询,如果没有的话这个思路就不要考虑了。
------解决方案--------------------
两边的数据库应该不是同一个吧?
如果条目很多,分list查询,又没有排序(排序会更慢),list1和list2两次查询结果都可能不一样的,不建议这么做。
嗯,建议向第三方提需求,扩展查询接口的参数,增加金额上限、下限的入参,这样分段查询,效果可能会好点。(当然,也可以以其他条件为入参,最好以主键做条件)
------解决方案--------------------
1 从第三方接口将帐目数据导入本地临时表
2 通过临时表并利用sql批量更新本地帐目表
快钱中有数据系统中没有 属于漏单,必须将金额与状态同时更新
系统中又快钱中没有 属于垃圾数据,不考录更新
逐条对比的性能显然很糟糕
------解决方案--------------------
鉴于你这个业务,要在对账人员登进系统了才分析数据,这个思路就是不对的。
大体按需求,可以按二步解决:
批量数据查询(保证当天以前的所有数据都已经匹配完成):
1.做一个服务,每晚上定点运行,把所有当月的第三方(快钱)数据拿过来,与自己的进行对比。
2.对账人员只需要看服务处理完成的结果即可。
实时单条数据查询:
按单号,然后请求第三方数据源,进行单条数据核对。
------解决方案--------------------