Big Object 基础:存储与管理海量数据

Big object 让你在 Salesforce 平台上存储和管理十亿级记录,用于 360 度客户视图、审计追踪和历史归档。本文介绍 big object 的类型、用途与限制,以及如何创建自定义 big object、定义字段与索引、部署并用 Data Loader 或 Apex 填充数据。...

📅 2026/9/26 ✍️ ponybai 🏷️ salesforce, data, developer, headless

学习目标

slide_2

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

  • 描述什么是 big object。
  • 识别自定义 big object 的常见用例。
  • 识别查询 big object 的方式。

什么是 Big Object?

slide_3

在当今大数据时代,你可能发现自己数据太多——有数字要处理,却难以高效处理,性能受损,你开始希望标准、自定义或外部对象能「更大」。这就是 big object 的用武之地。Big object 让你能在 Salesforce 平台上存储和管理海量数据——不是一千、十万甚至一百万条记录,而是十亿条或更多记录仍能提供一致性能,并可通过标准 API 集访问。

Big object 有两种:标准 big object(由 Salesforce 定义、包含在 Salesforce 产品中,如 Field Audit Trail 的 FieldHistoryArchive,可存储长达 10 年的归档字段历史数据)和自定义 big object(在 Setup 中定义和部署,设置其定义、字段和索引——索引中的字段决定 big object 的身份和可查询能力)。

自定义 Big Object 的用途

slide_4

虽然 big object 能存储各种数据,但它主要为几个特定场景而生:

  • 360 度客户视图:存储大量客户信息(忠诚度计划、交易、订单、账单),用自定义 big object 跟踪每个细节。
  • 审计与追踪:长期保存用户的 Salesforce 使用情况,用于分析或合规。
  • 历史归档:为分析或合规保留历史数据的访问,同时优化核心 CRM 或 Lightning Platform 应用的性能。

查询 big object:可以用标准 SOQL 配合 Bulk API 和 batch Apex 查询。Bulk API 可查询超过 10 万条记录的结果(适合报告);需要操作数据时用 batch Apex,若结果集超过 5 万条建议让 Batch Apex 作业自分页,需要额外处理时可在 finish() 中触发更多 Apex Batch 作业。

有什么限制?

slide_5

由于 big object 的规模,它的工作方式与非 big object 不完全相同:

  • 只支持对象和字段权限。
  • 部署后不能编辑或删除索引——要改索引就得用新的 big object 重新开始。
  • SOQL 关系查询基于从 big object 到标准或自定义对象的查找字段(在选择字段列表中,而非过滤器或子查询中)。
  • 支持自定义 Lightning 和 Visualforce 组件,而非标准 UI 元素(主页、详情页、列表视图等)。
  • 每个 org 最多 100 个 big object,字段数限制类似自定义对象(取决于许可证类型)。
  • 不支持包含 big object、标准对象和自定义对象的事务。
  • 不支持触发器、Flow、Process 和 Salesforce 应用。

定义自定义 Big Object

slide_6

本单元创建自定义 big object、构建索引、部署并填充数据。

学习目标

slide_7

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

  • 创建自定义 big object。
  • 构建自定义索引。
  • 部署自定义 big object。
  • 填充 big object。

创建自定义 Big Object

slide_8

可以在 Setup 中定义自定义 big object(也可用 Metadata API,但 Setup 简单得多)。高层步骤:点击 Setup → 在 Quick Find 输入 Big Objects 并选择 → 创建 big object 并添加基本详情 → 添加自定义字段(存储数据)→ 添加索引(定义复合主键、用于查询和过滤)→ 保存并把状态改为 Deployed。注意:big object 的对象名必须在 org 内所有标准、自定义、外部和 big object 中唯一。

定义自定义 Big Object 详情

slide_9

定义 big object 时先填写基本详情:Label(UI 中引用对象的名称)、Plural Label、Starts with a vowel sound、Object Name(唯一 API 名称,只能用字母数字和下划线、以字母开头、无空格)、Description、Context-Sensitive Help Setting、Deployment Status。保存后,big object 的 API 名以「__b」后缀标识(对比自定义对象的「__c」)。创建时状态为 In Development,只有包含至少一个必填自定义字段的索引后,才能部署(状态改为 Deployed)。

Big Object 自定义字段

slide_10

定义 big object 后添加自定义字段存储数据,也可创建自定义关系字段关联其他对象。Big object 支持的字段类型:Lookup Relationship、Date/Time、Email、Number、Phone、Text、Text Area (Long)、URL。要创建索引,至少一个自定义字段必须标记为必填。

定义 Big Object 索引

slide_11

索引定义 big object 的复合主键,索引中的字段决定 big object 的身份和可查询能力。索引字段应是与查询最相关的字段,需要规划和远见;字段定义的顺序也很重要——用 SOQL 查询时只能按索引字段、按定义顺序查询,把查询过滤器中最常用的字段放在索引第一个位置。定义索引的注意事项:索引至少包含 1 个、最多 5 个自定义字段;索引中的字段必须标记为必填;Long Text Area 字段不能加入索引;索引中所有文本字段的总字符数不能超过 100;索引创建后不能编辑或删除。

Big Object 索引详情

slide_12

索引详情定义构成 big object 索引的字段,以及字段和排序顺序。设置:Label(UI 引用索引的名称)、Name(索引 API 名)、Index Fields(为每个索引字段设置 Index Position 和 Index Direction;字段顺序决定索引顺序,把最常用的过滤参数设为 Index Position 1,Index Direction 可选 Ascending 或 Descending)。

示例自定义 Big Object

slide_13

假设你开发了游戏 SFORCE-COM: U.F.B.O. Defense,想存储玩家在单次游戏会话中的所有交互。在自定义 big object Customer_Interaction__b 中捕获:内购数量(In_Game_Purchase__c)、最高等级(Level_Achieved__c)、本局生命数(Lives_This_Game__c)、平台(Game_Platform__c)、得分(Score_This_Game__c)、账户名(Account__c,Lookup 到 Account)、游戏日期(Play_Date__c,Date/Time)、游戏时长(Play_Duration__c,Number)。

定义字段后定义索引:每个玩家的账户名唯一,所以 Account__c 作为索引第一个字段,接着是 Game_Platform__c、再是 Play_Date__c——这个顺序让你能按账户查询、按账户+平台查询、或按账户+平台+日期查询。示例索引:Label 为 Customer Interactions Index、Name 为 CustomerInteractionsIndex,Index Fields 为 Account__c(位置1,Descending)、Game_Platform__c(位置2,Ascending)、Play_Date__c(位置3,Descending)。

部署与填充 Big Object

slide_14

定义好自定义 big object 后,点击 Edit 把部署状态改为 Deployed 即可部署。之后可以编辑 big object 及其字段的标签和名称,但不能编辑或删除索引(要改索引就新建 big object)。也可以从 Setup 删除 big object,删除后保留 15 天(期间可恢复或永久删除)。

填充 big object 有两种主要方式:用 .csv 文件配合 Data Loader 或 API(文件首行必须包含用于映射数据的字段标签,可通过 Data Loader、Bulk API 或 SOAP API 上传),或完全通过 Apex(用 insertImmediate 方法)。注意:Apex 测试不允许混合 DML 调用;用相同索引但不同数据重新插入记录的行为类似 upsert(覆盖索引值、幂等、不产生重复),这对上传数百万条记录很有帮助。


文章来源:Trailhead - Big Object Basics