我有一个充满用户的数据库和一个查询所有用户的Java
代码(大约有5,000个),创建一个包含每个代码相关详细信息的字典,并将其发送到SalesForce以确保我所拥有的数据与数据库中的数据保持同步。
这是一项每天运行的cron-job。
我的问题是 - 哪个选项更好?
答案 0 :(得分:1)
我认为你在API上看错了。暂时忘记批量API。
SOAP API和REST API具有相同或几乎相同的功能。选择您感觉更舒适的/您更了解哪些Java库。仅举几个关键因素:
请求大小:它们都支持一次发送多条记录,实际上最多可以发送200条记录。因此,首先考虑重构代码以在每次更新中发送更多内容。您将节省API调用(滚动限制到24小时),它会更快(网络流量引入的开销更少)......
错误处理:如果您的更新失败 - 他们都会在返回的邮件中提供相同位置的错误(第5条输入记录 - >第5条成功/错误记录),这样您就可以匹配东西,即使它是插入而不是更新(因为更新时错误也包括ID)。
“全部或全部”:你想保存那批 N 记录中的内容,或者它应该是全部或全部,正确的数据库回滚,如果有的话出错?在SOAP API中,您可以在消息头中将其指定在REST中 - 作为HTTP标头。
我认为REST API的一个优点是身份验证。使用SOAP,您需要用户名+密码+有时候是令牌。 REST可以让你使用OAuth流程 - 不必在你的程序中保存密码就不会受到伤害......如果它是一个cron工作,可能不那么重要。
是的,所以我们可能会看到5K / 200 = 25个请求/天。好多了。
批量API可让您在最多10K记录的1个块中执行此操作。但它是异步的。你提交了一份工作,它排队等待处理,你得到了工作ID,你需要定期检查状态,下载结果,处理它们(解压缩等)。这是可行的,但似乎对你的情况有点矫枉过正。当您谈论+ 100K记录时,请考虑批量API。
即便如此,你可能也不会手工制作它,但可能会重复使用。您是否知道可以编写DataLoader脚本以从控制台运行(包括cron jobs / windows任务调度程序?)。 DataLoader几乎是一个可以直接使用的JAR文件的瘦UI包装器?它支持您需要的所有操作。
也许你甚至决定使用某些集成解决方案,比如dataloader.io,jitterbit,informatica ......(然后这些也可能是一种过度杀伤)......天哪,甚至还有一个假装Salesforce的SQL Server插件只是一个带有ODBC驱动程序的常规数据库,因此您可以触发正常的SQL查询,更新等。