集成与数据流动
另有 19 种语言版本
English · Español · 日本語 · Português (Brasil) · Français · Deutsch · Italiano · 한국어 · Português (Portugal) · 繁體中文 · Bahasa Indonesia · Türkçe · Polski · Tiếng Việt · ไทย · Українська · Español (México) · Français (Canada) · Deutsch (Schweiz)

Data Architect 课程第 9 章的学习指南。请先阅读四个模块;这一页帮你检查自己记住了什么。
**关于本学习指南。**它只依据本课程自己的内容,以及 Salesforce 公开发布的考试指南中的目标清单编写。它从不基于真实的考试题目,也不声称知道考试会考什么。如果你参加过考试,请不要把考题发给我:认证协议禁止分享考题,而且死记答案本来就不是成为架构师的正确方式。
考试指南说它不考集成工具的配置,而这一章是给数据架构师的拼盘,不是 Integration Architect 课程。考试真正关心的,是集成对你的数据做了什么:键、写入权限、数据量和完整性,以及在 org 之间流动的数据。平台的数字会变,依赖它们之前请先查看当前的数字。
边学边打勾。每一条都链接到讲授它的地方。
画箭头之前(支撑 LDV-1 和 SDM-2)
- I zoom out to the landscape, then zoom in on one arrow and ask its data questions: initiator, direction, freshness, volume and shape, key, write authority, and who proves it arrived. (Zoom In on One Arrow) ⟲
- 我把谁发起和数据往哪个方向流动分开,也知道只有客户端能看到完整的往返。(谁发起,不等于数据往哪里走)
- I treat freshness as a requirement, not a default, and match the timing to the mechanism: a synchronous call when the caller waits, platform events for fire and forget, Change Data Capture to keep another system in step, the Bulk API for large scheduled loads. (How Current Does It Need to Be?) ⟲
- I know a database stores; a process calls: polling needs a process, often middleware, and polling for nothing is waste. Change Data Capture has a daily delivery allocation, counted per subscriber. (Asking Every Minute) ⟲
- I know Salesforce’s guidance for pulling changes on a schedule:
getUpdated()andgetDeleted()for intervals over 5 minutes; more often than that, let Salesforce send the change. (Asking Every Minute) ⟲ - I know the three traffic shapes, singles, sets and bulk; that more than 2,000 records is a good candidate for Bulk API 2.0, fewer for bulkified synchronous calls such as Composite; and to send only the fields that changed. (The Number of Zeros Applies to Integrations Too) ⟲
- I know integration volume becomes data volume: ownership, automation, sharing and storage. (Integration Volume Becomes Data Volume) ⟲
键与写入权限(支撑 SDM-2、SDM-4 和 MDM-2)
- I carry an external system’s key in an External ID field marked Unique, one-to-one, and upsert on it: no match creates, one match updates, more than one fails. (One Record, One Key) ⟲
- When one customer has several external records, I add records, not fields (a hierarchy, peers or a child object), never a key field per ERP. (When the Customer Is in Two ERPs, chapter 6: One Customer, Two ERPs) ⟲
- I know one key field with the source in the value is still one key per record, and a new partner is a new value, not a new field. (Steve Trucking: One Field, the Source in the Value) ⟲
- 我知道稳定的键让重试变得安全(幂等性的起点)。(键让重试变得安全)
- I know a key isn’t authority, and enforce write authority in the org: record types, read-only fields for users, and an integration user with only the access its contract needs. (A Key Isn’t Authority) ⟲
- I know two-way movement still has one owner per field, and how unclear authority causes loops. (Two-Way Movement, One Owner per Field) ⟲
- 我知道一个 Salesforce org 的记录 ID 在另一个 org 里不是企业级的键:两个 org 就是两个系统。(键也有生命周期)
Proof of delivery (supports MIG-1 and MIG-2) ⟲
- I know the client owns the conversation, and whoever knows what should arrive proves that it did; the server keeps its own promises and reports what it received. (Who Proves It Arrived?) ⟲
- I know “no errors” isn’t completeness: reconcile counts and, where it matters, control totals. (“No Errors” Isn’t Completeness) ⟲
- I design for restart and safe retries, and log every call: request ID, endpoint, response code and duration. (Know Where You Are, and Restart Gracefully, Log Every Call, Retries Are Normal; Make Them Safe) ⟲
- I know platform events and Change Data Capture events stay on the bus for 72 hours, subscribers resume by Replay ID, duplicates can happen, and proof needs my own return receipt. (The Return Receipt) ⟲
- I know the soft landing for partial failure, and I send the increment, not the universe. (Partial Failure, and the Soft Landing, Send the Increment, Not the Universe) ⟲
- I know the four shapes: request and reply, fire and forget, batch and events, and where each recovers. (Four Shapes of Integration) ⟲
- I know outbound messaging is supported but gets no further investment, and since Spring ‘26 sends no session ID. (Outbound Messaging: Know It, Don’t Start There) ⟲
集成数据契约(支撑 SDM-4)
- I can write an integration data contract for an arrow, eleven lines: initiator, direction, freshness, volume and shape, key, write authority, pattern, mechanism, proof of delivery, sensitivity and travel, and change. (An Arrow Needs More Than a Label) ⟲
- I go requirement, then pattern, then mechanism. (Requirements, Then Pattern, Then Mechanism) ⟲
- I know when to give another team a custom Apex REST endpoint instead of the standard APIs (one stable interface, my own logging and orchestration) and what it costs (code to maintain; API and Apex limits still apply). (A Contract Between Teams) ⟲
- I count every place the data rests on its way, logs and retry queues included, when it has to stay in a country. (Make Each Line Specific) ⟲
- For multiple orgs, I start with a contract per movement, and sometimes the contract says don’t move it (chapter 14). (Multiple Orgs, and “Don’t Move It”) ⟲
Where the rest lives. This chapter is about moving data. Not moving it (Salesforce Connect, mashups, data brought in on demand, zero copy: exam objective LDV-3) is chapter 14, Virtualization, Federation, and Zero-Copy (coming soon). Loading and extracting at volume is chapter 10, Migration and Synchronization. ⟲
考试是底线,不是天花板。下面这些是本章中架构师需要的习惯,不管有没有考题问到它们。
- Zoom out, then zoom in. Start with the landscape; then take one arrow at a time. ⟲
- **了解即将到来的流量,**即使集成是别人设计的。
- 先理解数据流动,再选择机制。
- A database stores; a process calls. Someone has to own the process. ⟲
- **数据流动不是免费的。**每一份副本都是又一个需要治理的地方。
- Add records, not fields. ⟲
- **认清记录。认清所有者。**然后再让集成写入。
- Whoever knows what should arrive proves that it did. ⟲
- **如果它可能悄无声息地失败,它就还没有完成。**一个停了的集成就是一个数据质量问题。
- 权限说的是能不能;架构说的是该不该。
- Decide the interface between teams in the first weeks: the standard API or a wrapper you own. ⟲
- 契约比技术活得更久。
- **把智能体的每个操作都当作一个集成,**配上键、权威、幂等性和可观测性。
| 术语 | 一句话解释 |
|---|---|
| 发起方 | 发起对话的系统(客户端) |
| 数据方向 | 业务数据往哪个方向流动,不论谁发起 |
| Freshness | How current the data must be |
| Polling | Asking on a schedule whether anything changed |
| 单条、成组、批量 | 一次一条记录、小批分组,或在一个作业中处理大量数据 |
| 外部 ID | 存放在 Salesforce 记录上、用于匹配的另一个系统的键 |
| Upsert(更新插入) | 如果匹配的记录存在就更新它,不存在就创建它 |
| 幂等性 | 重复执行一个操作而不产生意外的额外效果 |
| 水位标记 / 检查点 | 记录一个集成已经安全走到了哪里 |
| 对账 | 比较预期的内容和实际到达的内容 |
| Proof of delivery | Evidence, held by the side that knows what should arrive, that it did |
| Return receipt | An acknowledgment sent back to say a message was received and processed |
| Request and reply | The client sends and waits for the answer |
| Fire and forget | The client sends without waiting for the outcome |
| 平台事件 | 在 Salesforce 事件总线上发布给订阅方的消息 |
| 变更数据捕获 | 记录变化时 Salesforce 发布的事件 |
| Replay ID | 订阅方用来继续读取事件的位置 |
| Custom Apex REST | Your own REST endpoint in Salesforce, written in Apex, in front of your objects |
| 集成数据契约 | 一份简短记录,说明一个集成可以对数据做什么 |
按课程风格编写的简短情景题。打开答案之前,先想好你的答案。
1. Salesforce 调用 ERP 获取一个客户的信用状态。数据往哪个方向流动,谁是发起方?
Salesforce 发起;数据从 ERP → Salesforce 流动。发起方和方向是两个独立的问题,而发起方(客户端)才是能看到完整往返的那一方。重读谁发起,不等于数据往哪里走。
2. 团队提议为每一条 GPS 读数创建一条 Salesforce 记录:每天 200,000 条。你首先问什么?
为什么要把一年 7,300 万条读数放进事务型模型?这首先是一个数据架构决定,然后才是集成决定;org 可能只需要最新的位置。重读集成的数据量会变成数据的数据量。
3. A warehouse team says, "Snowflake will just poll Salesforce every minute." What's missing?
⟲A database stores; a process calls. Something has to run the polling (usually an integration layer), with its own credentials, schedule and failures, and 1,440 calls a day mostly find nothing. Ask how current the data must be, then consider letting Salesforce send the changes (Change Data Capture), and count the events. Reread Asking Every Minute.
4. An external system needs Salesforce's changes about every hour, including deletions. What does Salesforce's own guidance suggest?
⟲For intervals over 5 minutes, the SOAP API’s getUpdated() and getDeleted() return what changed and what was deleted in a window, instead of a full extract. More often than that, let Salesforce send the change. Reread Asking Every Minute.
5. The ERP retries a "create customer" call after a timeout and Salesforce ends up with two accounts. How should it have been designed?
⟲Upsert on the ERP’s customer number in an External ID field marked unique, so a retry matches the existing record instead of inserting a duplicate. Reread Keys Make Retries Safe.
6. The customer exists in two ERPs, and someone proposes `NA_ERP_ID__c` and `EMEA_ERP_ID__c` on the Account. Your view?
⟲That’s a key field per ERP: an anti-pattern. It hides repeating structure in fields and turns every new ERP into a schema change. Add records, not fields: child accounts, peer accounts, or a child object per ERP record, each with one key. Reread When the Customer Is in Two ERPs.
7. The integration log shows zero errors, but finance totals don't match. What happened, and who should have caught it?
⟲Zero errors isn’t completeness: maybe fewer records were sent than intended, or values changed in transit. The side that knows what should have arrived proves it did: it reconciles counts and control totals against what it meant to send. Reread Who Proves It Arrived?.
8. A subscriber to platform events was down for a day. Can it catch up?
⟲Yes, within the 72-hour retention: it resumes from its last Replay ID. It must also handle duplicates, because the same event can arrive twice. Reread The Return Receipt.
9. The requirement says "we need a REST integration for credit holds." What's wrong with that?
⟲REST is a mechanism, not a requirement. The requirement is something like “agents see a credit hold within five minutes of the ERP change.” Start there, choose the pattern, then the mechanism, and write the contract. Reread Requirements, Then Pattern, Then Mechanism.
10. A partner's middleware team will send orders that touch four objects, and your data model changes every release. Standard API or custom Apex REST?
⟲It depends on the team. If they know Salesforce deeply and can change quickly, the standard APIs work. If not, a custom Apex REST endpoint gives them one stable interface, lets Salesforce orchestrate the four writes and log every call, and absorbs your changes inside. The cost is code you maintain, inside Salesforce’s API and Apex limits. Decide in the first weeks. Reread A Contract Between Teams.
- Salesforce Certified Platform Data Architect Exam Guide (在新标签页中打开), Salesforce Help (checked 2026-11-01): the official list of objectives and their weights. Always check the current version before you book the exam. ⟲
- Salesforce, Best Practices for Deployments with Large Data Volumes (在新标签页中打开), Winter ‘27 (last updated September 18, 2026), checked 2026-11-01: the guide behind the exam’s Large Data Volumes section. Its integration rules are in module 1; its mashups are in chapter 14. ⟲
- 每个模块自己的“延伸探索”部分列出了其事实所依据的 Salesforce 文档,并注明了查阅日期。
