最近遇到了这样一个问题:
要求解析csv文件,逐行取出数据,并调用第三方指定的接口进行数据同步。
听上去很简单直白,甚至调用的demo都写好了,什么加密的逻辑都是现成的,只要把真实的秘钥、appid之类的信息填进去就能跑,感觉用个工具类解析csv文件,逐行拿出来作为入参传进去了事。 但拿到了数据文件才发现没这么简单,里面居然有上亿的数据...... 先取了部分数据同步地逐行组参调用试了试效果,发现接口性能比较差,单次调用都上1秒多。真要同步一行行来操作的话要搞到猴年马月去了~
又尝试了下多线程的方法。 不知道是我个人电脑性能太差,还是线程池配置的参数不理想,感觉效果并不好,甚至还不如同步的稳定性高。 跑了一段时间后,就没反应了,然后报java.lang.OutOfMemoryError: GC overhead limit exceeded 直接整挂了。
说实话这么大量的数据,要同步的话照理应该考虑数据库层面的同步方式吧。 不过现在受条件限制要求只能调人家的接口。 有没有什么高效一点的方法啊? 另外感觉这种大型工作还是最好在专门服务器上搞把,个人电脑吃不消~
这里面包含好几个问题: