你有一个按 /customerId 分区的 Azure Cosmos DB SQL API 容器。当订单下达时,你的服务必须原子性地完成以下操作:(1) 创建订单文档,(2) 更新客户资料的 openOrderCount,以及 (3) 删除客户的购物车文档。所有三个文档共享相同的 customerId 值。你希望所有操作要么都成功,要么都失败,并且不使用服务器端存储过程。你应该怎么做?
选择一个答案
点击一个选项来检查您的答案。
正确答案: 使用 Azure Cosmos DB SDK 的 TransactionalBatch 发出具有相同 PartitionKey 值(等于 customerId)的创建、替换和删除操作。.
为什么这是答案
正确答案是使用 Azure Cosmos DB SDK 的 TransactionalBatch 发出具有相同 PartitionKey 值(等于 customerId)的创建、替换和删除操作。这是因为 TransactionalBatch 允许对同一逻辑分区键中的多个操作进行原子性处理。所有操作要么全部成功,要么全部失败,确保了数据的一致性。 通过设置账户级选项以允许多分区事务是错误的,因为 Cosmos DB 的事务仅限于单个逻辑分区。跨分区事务需要更复杂的协调机制,并且 Cosmos DB 不直接提供内置的跨分区 ACID 事务。 使用变更源处理器 (Change Feed Processor) 并在订单创建后触发更新是错误的,因为它引入了最终一致性,而不是题目要求的原子性(要么都成功,要么都失败)。变更源处理器适用于异步处理和事件驱动架构,不保证操作的即时原子性。 执行三个由 ETags 保护的独立请求是错误的,因为这不能保证原子性。如果其中一个请求失败,其他请求可能已经成功提交,导致数据不一致。重试机制也无法保证所有操作的原子性。
通过考试 — 无需无休止地寻找答案
将本次考试的所有验证问题和解释集中在一处,节省数小时的准备时间。1,000+ 认证 · 20+ 语言 · 免费开始。
更快通过考试 → 无需银行卡