【问题标题】:Saleforce SOQL query - Jersey Readtimeout errorSalesforce SOQL 查询 - Jersey Readtimeout 错误
【发布时间】:2019-08-06 19:39:49
【问题描述】:

我在批处理作业中遇到问题,该作业具有返回大量记录的简单 SOQL 查询。超过一百万。 根据 SOQL 最佳实践,查询无法进一步优化。 (至少,据我所知。我不是 SF SOQL 专家。)

问题是我得到了 -

Caused by: javax.ws.rs.ProcessingException: java.net.SocketTimeoutException: Read timed out

我尝试将 Jersey 读取超时值从 30 秒提高到 60 秒,但仍然超时。

关于如何处理此问题的任何建议?对于返回这么多数据的查询,有什么推荐的 readtimeout 参数值吗?

查询是这样的:

从对象__c 中选择 ID、字段 1、字段 2__c、字段 3__c、字段 3__c WHERE field2__c = true AND(不是 field3 像 '\u0025Some string\u0025') ORDER BY field4__c ASC

【问题讨论】:

  • 您在使用批量 API 吗?
  • 不,我开始考虑将其作为一种选择。你推荐它吗?
  • (我的回答被正确地批评为错误/简化错误,但我仍然推荐 Bulk API)

标签: salesforce soql


【解决方案1】:

没有特定的顺序...

  • 在 Apex 中写入的批次会在 2 分钟后超时,因此可能在您的 Java 应用程序中设置相同
  • 使用query plan 功能在开发者控制台中运行您的查询(您可能必须在其中输入真正的%,而不是\u0025)。注意哪个部分的“成本”列> 1。
  • 什么是字段类型?简单的复选框和文本还是一些复杂的公式?
  • 该文本是静态的还是会根据您的应用程序需要而变化?您会考虑过滤掉代码中的字符串而不是 SOQL 吗?返回比您真正需要的更多的记录是违反直觉的,但是这可能是一种选择。
  • 您是否会考虑使用整个逻辑或仅使用字符串搜索然后asking SF to index the formula 创建一个公式字段。或者也许用“是的,它包含该文本”信息制作另一个字段(另一个复选框?),可能通过工作流设置值(基本上准备您的数据以便稍后有效地查询它)
  • 阅读有关 skinny tables 的信息,看看它是否适合您(需要 SF 支持)
  • 您能否为您的数据制作分析快照(制作报告、制作 SF 将结果保存到帮助对象、查询该对象)?即使它只包含对原始源的查找,因此您将始终访问新值,它可能会有所帮助。不过可能是存储杀手
  • 你考虑过“big objects”和异步soql
  • 我并不为此感到自豪,但过去我在 SF 数据库中取得了一些成功。不是通过 API,但如果我有一个超时的夜间批处理作业,我会不断重新提交它,并最终在第 3-5 次成功启动。查询优化器中的某些内容,在底层 Oracle 数据库中创建游标,缓存部分结果...我不知道。
  • ORDER BY 中有什么内容?一些日期字段?如果您需要先从 X 开始更新记录,那么 replication API 可能有助于先获取 ID。
  • 例如使用LIMIT 200 有意义吗?您使用的是哪个 API,SOAP 还是 REST?可能是返回较小的块(SOAP:batch size,REST API:special header)会帮助它更快地完成。
  • 当所有其他方法都失败时(但请联系 SF 支持,确保您用尽了所有选项)可能会重组整个事情。让 SF 在数据发生变化时向您推送数据,而不是拉取数据。有“流 API”(CometD 实现,Bayeux 协议,但是这些被称为)和“更改数据捕获”和“平台事件”,用于很好的事件总线驱动的架构决策,如果客户端关闭,则重播最多 3 天前的旧事件并且无法听...但这是一个完全不同的话题。

【讨论】:

  • 感谢@eyescream 提供的所有信息。对此,我真的非常感激。有很多选择要考虑。让我分享更多细节: - 这个批处理作业是用 Java 编写的。 - 我已经在开发者控制台中运行了查询。没有成本 > 1。 - 除了与字符串进行比较的字段之外,这些字段都是日期字段。此字段是一个选项列表字段。 - 排序依据是日期类型字段。 - 我正在使用 REST api。
  • 日期和选项列表可以由 SF 支持索引,您可以自己索引文本字段。我会说无论哪种方式提出一个案例,他们会知道得更好。包括诸如“我在字段 A 和 B 上有索引,但这并不意味着它会在查询中考虑同时过滤两者”
猜你喜欢
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
相关资源
最近更新 更多