Apex-大数据处理

Apex 大数据处理(4)数据删除

学习目标

完成本单元后,您将能够:

  • 在处理大量数据时,使用Salesforce批量API数据删除机制会对性能产生积极影响。
  • 从组织中抽取大量数据时,使用PK分块来对抗性能低下的问题。
  • 了解在自定义对象下截断记录以加快删除的好处。

使用批量API删除和提取

谈到您的Salesforce组织,数据管理始终处于优先级列表的首位。这部分管理包括删除和提取数据。而且,就像加载大量数据一样,批量API在删除或提取LDV时非常有用。当有一个过程涉及删除一百万或更多的记录时,批量API的硬删除选项可以做到这一点。

软与硬删除

Salesforce数据删除机制可能会对大数据量的性能产生深远的影响。 Salesforce将回收站用于用户删除的数据。通过回收站将其标记为已删除且可见,而不是删除数据。这个过程被称为软删除。当数据被软删除时,仍然会影响数据库的性能,因为它仍然存在于组织中,并且删除的记录必须从任何查询中排除。

数据保留在回收站中15天,或直到回收站增长到特定的大小。一旦达到时间或大小限制,或者使用UI,API或Apex清空回收站时,数据将从数据库中物理删除。

批量API支持硬删除(物理删除)选项,该选项允许记录绕过回收站并立即变为可用于删除。使用批量API的硬删除功能是推荐的删除大量数据卷的策略,以尽快释放空间并防止无关的材料影响性能。请注意,硬删除选项在默认情况下处于禁用状态,必须由管理员启用。

分块数据

使用批量API抽取数据时,默认情况下,查询会被分割为100,000个记录块 – 您可以使用chunkSize头域来配置较小的块,也可以使用大于250,000的较大的块。较大的块大小使用较少批量API批处理,但可能无法执行。您可能需要尝试一下才能确定最佳块大小。

在数量极高的情况下(数以亿计的记录),通过对字段值进行过滤来定义这些块可能并不实际。返回的行数可能会高于Salesforce查询优化器的选择性阈值。结果可能是全表扫描和性能下降,甚至失败。那么你需要采用不同的策略。

使用PK块

所以如果属性过滤不能帮助你将数据分成足够小的块,你可以做什么?使用PK Chunking处理超大型数据集提取。 PK代表主键 – 对象的记录ID–始终索引。 PK分块根据查询记录的记录ID将非常大的表上的批量查询拆分成块。

查询具有超过1000万条记录的表时,或批量查询始终超时时启用PK分块。 PK Chunking是Salesforce Bulk API的一项支持功能,因此它可以将查询拆分为可管理的块。只需在批量API作业中输入几个参数,平台就会自动将查询分成不同的块,对每个块执行查询并返回数据。

您可以使用大多数标准对象的PK块。它支持帐户,广告系列,CampaignMember,大小写,联系人,潜在客户,登录历史记录,机会,任务和用户以及所有自定义对象。要启用该功能,请在批量API查询的作业请求上指定标题Sforce-Enable-PKChunking。

要选择块大小,只需在标题中指定它。例如,此标题可以使用块大小为50,000的记录启用PK组块:Sforce-Enable-PKChunking:chunkSize = 50000。每个块都作为一个单独的批处理进行处理,并计入您的每日批处理限制,并且其结果必须单独下载。您可以在批量API查询中包含WHERE子句的同时使用PK块处理执行筛选。使用此方法,可能会有比chunkSize中指定的数量少的记录返回的记录。

注意

如果您查询的记录少于1000万,则可以通过将chunkSize设置为小于查询记录数的数字来练习PK分块。例如,Sforce-Enable-PKChunking:chunkSize = 1000。你会得到一个查询拆分成多个批次,并看到PK在行动。
查询成功分块时,原始批处理的状态显示为NOT_PROCESSED。如果分块失败,则原始批处理的状态显示为FAILED,但在分块尝试期间成功排队的所有分块批处理都将正常处理。当原始批次状态更改为NOT_PROCESSED时,监视后续批次。您可以在完成后从每个后续批次检索结果。那么你可以安全地关闭工作。

截断

如果要立即删除沙箱组织的自定义对象中的记录,可以尝试截断这些自定义对象。截断自定义对象是永久删除自定义对象中的所有记录的一种快速方法,同时保持对象及其元数据的完整性以供将来使用。

截断自定义对象将清除当前坐在自定义对象的回收站中的所有记录;自定义对象的历史;以及每个删除记录的相关事件,任务,注释和附件。

注意

截断自定义对象会导致截断对象及其记录的一些不可逆转的更改。他们不能回到原来的状态。

截断是有用的,例如,如果您创建了一个自定义对象并填充了测试记录。当您完成测试数据时,可以截断对象以清除测试记录,但保留该对象并将其投入生产。这比批量删除记录快得多,并且可能重新创建对象。

这是简单的设置过程:

  1. 首先,通过在快速查找框中输入User Interface,选择User Interface,然后选择权限,为您的组织启用截断。
  2. 接下来,转到自定义对象的对象管理设置。
  3. 单击对象名称以转到该对象的详细信息页面,然后 Truncate.
  4. 在“Confirm Custom Object Truncate”窗口中,查看警告,然后在空字段中输入要截断的对象的名称。
  5. 点击 Truncate.

截断之后必须使用擦除功能来释放存储空间。

截断自定义对象时,对象的所有记录都将永久删除,但对象的定义仍然存在。记录不再计入您的组织限制。相反,如果您删除自定义对象,对象将移动到回收站15天(如上所述)。之后,对象及其记录被永久删除。

不能截断由另一个对象通过查找字段引用的标准对象或自定义对象,或者在主 – 从关系的主方一侧引用的标准对象或自定义对象在报告快照中被引用,具有自定义索引或外部标识,或者激活了瘦子表。而且,当组织已经达到允许的自定义对象的限制时,不能截断自定义对象。

使用诸如截断之类的策略,以及PK分块和批量API的硬删除,可以帮助您防止大量数据卷毁你的组织。定期和根据需要采用这些方法是保持稳健性能的明智做法。

你可能也会喜欢...