使用salesforce Java API查询超过1,000,000条记录并寻找最佳方法

ast*_*tro 7 java api salesforce

我正在开发一个Java应用程序,它将查询可能包含1,000,000多条记录的表.我尽我所能尽力而为,但我只能在平均上实现.一分钟约5,000条记录,一次最多10,000条记录.我试过逆向工程数据加载器,我的代码似乎非常相似,但仍然没有运气.

这里的线程是否可行?我试过这个,但结果很少.

我一直在阅读并应用了所有可能的东西(压缩请求/响应,线程等),但我无法像速度那样实现数据加载.

要注意,似乎queryMore方法似乎是瓶颈.

有没有人有任何代码样本或经验,他们可以分享,以指导我朝着正确的方向?

谢谢

小智 5

我过去使用的一种方法是仅查询您想要的ID(这使得查询速度明显加快).然后,您可以跨多个线程并行化retrieve().

看起来像这样:

[query thread] - > BlockingQueue - > [thread pool doing retrieve()] - > BlockingQueue

第一个线程尽可能快地执行query()和queryMore(),将所有ID写入BlockingQueue.如我所知,queryMore()不是你应该同时调用的东西,所以没有办法并行化这一步.所有ID都写入BlockingQueue.您可能希望将它们打包成几百个捆绑包以减少锁争用,如果这成为一个问题.然后,线程池可以对id执行并发的retrieve()调用,以获取SObject的所有字段,并将它们放入队列中,供应用程序的其余部分处理.

我编写了一个Java库来使用可能有用的SF API.http://blog.teamlazerbeez.com/2011/03/03/a-new-java-salesforce-api-library/


Kev*_*Day -1

延迟将成为此类情况的杀手 - 解决方案将是多线程或异步操作(使用 NIO)。我将从并行运行 10 个工作线程开始,看看它有何不同(假设后端支持同时获取)。

抱歉,我没有任何具体代码或我可以在这里提供的任何内容 - 只是通过高延迟网络进行 API 调用的痛苦经历。