top of page

Amazon SageMaker UpdateRecord 终结局部特征变更时的全记录重写

5小时前
讀畢需時 12 分鐘

Amazon SageMaker UpdateRecord 引入特征级写入,终结了每次局部变更都必须读取并重写整条记录这一长期限制。现在,一次 API 调用最多可更新 100 个特征,同时保留请求中未包含的所有特征。

这一变化瞄准了实时机器学习基础设施中的一个特定弱点。特征记录往往汇集了由不同流水线生成的值,而这些流水线各自按照不同的节奏运行。点击流处理器可能每隔几秒更新一次活动数据,而夜间任务则刷新客户分群。

此前,这些流水线通常依赖读-改-写模式。每个生产方先获取当前记录,修改自己负责的字段,再重新提交完整记录。这种模式增加了读取操作、传输未变数据,也为并发写入方相互覆盖创造了机会。

AWS 正以原子局部更新机制替代这一路径。该服务会将选定值合并到现有记录中,同时执行权限控制和可选的事件时间排序。真正的重点并非又多了一个 SageMaker 端点,而是 AWS 正将协调逻辑从客户应用转移到托管特征存储中。

Amazon SageMaker UpdateRecord 改变写入路径

UpdateRecord 将局部特征变更转化为一次托管写入,而非由客户编排的读取、合并与完整重写。

AWS 于 2026 年 9 月 8 日宣布推出特征级写入。该能力已在 SageMaker Feature Store 运营所在的各个 AWS 区域推出。

客户端识别一条现有记录,并仅提交需要变更的特征值。SageMaker Feature Store 会验证请求,以原子方式合并这些值,并保持所有未提交特征不变。

这一行为之所以重要,是因为特征记录可能非常宽。一份客户资料可能包含账户历史、近期活动、风险信号、推荐信息和运营元数据。更新一个风险评分不应要求应用传输并重写所有这些无关值。

该 API 至少接受一个特征,单次调用最多支持 100 个特征。根据 UpdateRecord API,更新成功后将返回空的 HTTP 200 响应。

UpdateRecord 不是 upsert 操作。目标记录必须已存在于在线存储中,缺失或软删除的记录将产生 ResourceNotFound 错误。应用在创建记录时仍需使用 PutRecord

记录标识符同样保持不可变。客户端可在既定条件下更新已存储的特征,包括事件时间特征,但无法通过该端点更改主键。

特征名称必须已存在于特征组架构中。UpdateRecord 会修改该架构内的值;它并不提供定义新特征的替代途径。

这些边界使 API 保持专注。它处理对现有在线记录的局部修改,而记录创建和架构管理仍是独立操作。

存储要求同样值得关注。标准在线存储必须先采用较新的 Standard_V2 格式,才能接受局部更新。内存中特征组无需采用另一种内存存储格式即可支持 UpdateRecord。

AWS 将 Standard 描述为基于 DynamoDB 的在线层,将 In-Memory 描述为使用 Redis OSS 的、基于 ElastiCache 的选项。该公司更新后的在线存储指南将 Standard、Standard_V2 和 InMemory 列为不同选项。

这一差异意味着,该发布不只是 SDK 层面的便利功能。AWS 必须新增一种能够应用局部更新、同时保留其余记录内容的存储表示方式。

因此,对于 Standard 客户而言,这项架构收益伴随着格式选择。创建特征组的团队可以选择 Standard_V2,而现有 Standard 部署则必须评估文档中说明的迁移路径及其运营影响。

读-改-写模式才是真正的对手

在这次发布中,AWS 竞争的对象是一种应用模式,而非另一家特征存储供应商。

设想有三个流水线向同一条客户记录写入数据。点击流任务负责 page_views,交易服务负责 purchase_total,模型流水线负责 risk_score

在读-改-写设计下,每个流水线都会先检索整条记录。它修改自己负责的值,再向存储提交完整替换内容。

这一流程在只有一个写入方的演示中看似安全。当多个写入方同时运行时,它就变得脆弱。

假设点击流流水线读取版本 A。评分流水线在片刻后读取同一版本。点击流流水线写入版本 B,其中包含更新后的活动计数。

随后,评分流水线可能提交自己修改过的版本 A 副本。除非应用检测到冲突,否则其全记录写入可能会在更新风险评分的同时,恢复较旧的活动计数。

开发者可以通过编排、锁定、条件逻辑、队列或所有权规则来应对这一问题。每种解决方案都会在特征存储之外增加代码和运行状态。

UpdateRecord 缩小了写入范围。评分流水线仅提交 risk_score,点击流流水线则仅提交其活动特征。两者都无需重新提交归另一方所有的值。

AWS 表示,合并会以原子方式发生。这意味着,一次局部请求不应暴露其所含值处于半写入状态的组合。

原子性并不能让所有流水线设计都变得正确。不过,它确实消除了因替换无关字段而导致更新丢失的最明显来源。

当应用只需设置已知值时,这一变化还取消了前置的 GetRecord 请求。更少的读取意味着更少的网络往返,也意味着在通过 Standard 层计费的工作负载中产生更少的读取容量费用。

AWS 尚未发布一项显示普遍延迟下降的独立基准测试。实际节省将取决于记录宽度、请求频率、网络部署位置、重试行为和应用设计。

即便没有这样的基准,方向依然明确。一次请求所需的应用侧工作少于先读后完整写入。

当记录包含大量特征、但每个事件只改变其中一两个时,网络流量也可能下降。客户端只发送记录标识符和变更值,而无需序列化每个已存储字段。

写入计费需要更细致地看待。AWS 表示,Standard 层的写入容量仍基于更新后的项目大小,而不仅仅是提交的特征载荷。最直接的节省来自于取消此前的读取操作。

SageMaker 定价模型分别计算特征存储的读取、写入和存储费用。团队应在给出节省比例之前,先对自身访问模式进行建模。

因此,这一发布在两个层面转移了责任。SageMaker 现在负责原子特征合并,而客户仍负责工作负载测量和容量规划。

独立流水线获得更清晰的所有权模型

特征级写入让生产方能够拥有选定字段,而无需每个生产方都理解完整记录。

流式特征系统很少以相同频率更新每个值。会话活动可能持续变化,财务总额可能随着交易发生改变,而人口统计属性的刷新频率可能低得多。

单一的全记录契约迫使这些流水线进行不必要的协调。每个生产方要么必须了解每个字段的最新状态,要么必须信任其他组件来合并其变更。

UpdateRecord 创建了更简单的边界。生产方可以提交自己负责的值,并省略其他所有内容。特征存储会保留被省略的值。

这种方法适用于流式特征补全,即多个事件源逐步构建当前在线表示。一次点击事件可以更新会话统计信息,而不会触及由批处理流水线分配的分群。

回填是另一个实际场景。在添加架构中已定义的特征后,团队可以为现有记录填充该值,而无需重新发送此前存储的所有特征。

数据修正遵循同样的逻辑。AWS 描述了一个涉及 50,000 条被错误分类客户记录的场景。修正任务可以更改 customer_segment,而不会危及这些记录中的无关字段。

这些例子揭示了更大的架构影响。局部更新减少了每个生产方在安全写入前所需掌握的共享上下文。

它们也支持更精细的权限控制。AWS 新增了 sagemaker:IsUpdateRecordsagemaker:UpdatableFeatures IAM 条件键,用于控制局部写入。

管理员可以只允许某项服务针对选定特征调用 UpdateRecord。评分服务可能可以更新 scorelast_activity,但仍无法更改 salary 或其他敏感字段。

在策略评估中,UpdateRecord 仍使用 sagemaker:PutRecord IAM 操作。根据 AWS 的说法,现有的拒绝 PutRecord 的策略也会阻止局部更新。

这种向后兼容的行为降低了意外开放新写入路径的风险。工作负载必须先获得明确授予的适当访问权限,才能使用该操作。

特征级授权也强化了生产方所有权模型。这一边界不再仅依赖应用层面的约束。IAM 可以拒绝试图修改另一生产方字段的流水线。

不过,特征所有权需要持续治理。随着架构演变、服务职责变化,或新增特征包含敏感信息,团队必须维护相应策略。

过于宽泛的通配符策略可能会抹去大部分收益。新的条件键提供了一种控制机制,但 AWS 不会自动为每个工作负载设计最小权限规则。

局部写入也补充了 AWS 近期针对更广泛摄取操作所做的工作。BatchWriteRecord 可在一次请求中跨特征组处理最多 25 条记录,而 UpdateRecord 则修改一条现有记录中的选定值。

这些 API 解决的是不同瓶颈。批量写入减少跨记录的请求开销;特征级写入则减少单条记录内部的不必要工作。

两种操作不能相互替代。大型修正任务可能仍需发起许多 UpdateRecord 调用,因为此次发布文档说明的是特征数量上限,而非多记录局部更新批处理。

这一差异对规划高容量回填的团队至关重要。他们获得了更安全的字段级变更能力,但仍需要并发限制、重试处理、进度跟踪和故障恢复。

EventTime 可防止陈旧写入,但有条件限制

UpdateRecord 减少了意外覆盖,但安全排序仍取决于生产方如何使用 EventTime。

每个特征组都有一个事件时间特征,它表示记录或事件发生的时间。UpdateRecord 可以连同正在变更的字段一起包含该特征的较新值。

当提交的 EventTime 等于或晚于存储值时,SageMaker 会应用更新。如果它更早,服务将以 ConflictException 和 HTTP 409 响应拒绝整个请求。

这项检查可防止延迟事件覆盖与较新记录时间关联的值。它为流水线提供了针对乱序交付的托管防护。

当多条消息代表同一逻辑事件流中的连续状态时,该机制尤其有用。一条迟到的消息无法在不被察觉的情况下将记录回退到较早的事件时间。

不过,EventTime 是记录级元数据。不同生产者未必共享一个具有实际意义的时钟,尤其是在它们从不同来源更新互不相关的特征时。

AWS 通过允许客户端省略 EventTime 来处理这种情况。服务随后会应用特征更改,同时保留记录现有的事件时间。

省略它可以避免无关流水线之间的人为竞争。夜间分群流程无需仅为更新其负责的某个字段而推进记录时钟。

这种灵活性也带来了重要权衡。未提供 EventTime 的更新无法利用记录的时间比较来证明其值更新。

每个团队都必须决定,某个生产者是参与共享记录排序,还是独立运行。这一决定取决于特征的含义,而不仅仅是 API 的便利性。

源自带日期交易流的风险评分可能需要严格排序。修正后的语言偏好则可能需要将独立的源时间戳作为另一个特征存储。

应用程序重试也需要谨慎处理。409 响应表示 EventTime 已过期,而非临时服务故障。盲目重试同一请求并不会让其时间戳变得更新。

客户端应将冲突与限流或瞬时错误分别分类处理。它们可以丢弃过期更新、重新计算更新,或将其送入异常处理流程。

存活时间处理还增加了一项条件。如果请求提供 TtlDuration,也必须包含 EventTime。否则,SageMaker 会返回验证错误。

TTL 到期时间由 EventTime 加上指定时长计算。要求同时提供这两个值,可避免服务构建出含义不明确的到期时间点。

这些规则使 UpdateRecord 比不受限制的补丁端点更安全。但它们并不能消除在多个生产者之间建立并记录时间模型的必要性。

团队应明确每项特征遵循哪个时钟、更新是否可能迟到,以及由哪个服务解决冲突。没有这些决策,API 可以拒绝过期记录,却无法判定业务事实。

Standard_V2 带来了主要的采用问题

该功能可立即用于 In-Memory 组,而 Standard 客户则必须考虑存储格式迁移。

AWS 表示,特征级写入适用于两种在线存储层级,但启用路径有所不同。现有的 In-Memory 特征组无需选择其他存储格式即可使用该操作。

Standard 特征组则需要 Standard_V2。更新后的文档称,客户可以使用该存储类型创建组,或就地迁移现有的 Standard 组。

文档说明,迁移通过 UpdateFeatureGroup 修改在线存储配置。AWS 表示,该操作会保留特征组,并避免重新导入其数据。

这听起来比重建生产特征存储简单,但它并非可逆的切换。AWS 警告,从 Standard 迁移至 Standard_V2 是单向操作。

文档还指出,迁移完成后,UpdateRecord 可能需要数分钟才能可用。因此,应用程序需要一套能够识别此能力转换的发布计划。

生产团队应测试其 SDK 版本、基础设施模板、IAM 策略、监控以及回退行为。存储迁移不应被仅仅视为一次源代码修改。

混合环境可能会增加复杂性。新特征组可能使用 Standard_V2,而旧组仍保留在 Standard,使得 UpdateRecord 仅适用于部分环境。

客户端库不应假定每个 SageMaker 特征组都接受部分更新。API 参考文档将该操作限定为 Standard_V2 和 InMemory 在线存储。

团队还需要区分在线和离线行为。即便一个特征组也包含离线存储,UpdateRecord 始终要求存在在线存储记录。

对于关联离线存储的配置,AWS 表示,部分更改会通过复制流程以完整快照的形式流转。这种设计让历史训练数据与合并后的在线记录保持一致。

In-Memory 特征组还需注意另一项限制。AWS 文档称,该层级目前仅支持纯在线组,且不提供相应的离线存储复制。

因此,不应将此次发布解读为适用于每种存储类型的通用在线到离线同步。仅当特征组配置中包含离线存储时,才会进行复制。

离线历史中的完整快照也会影响下游解读。即使每个客户端仅提交了选定特征,多次部分更新也可能生成连续的完整记录版本。

训练数据消费者仍必须处理事件时间、历史行和时间点正确性。UpdateRecord 改变的是导入路径,而不是离线历史的分析含义。

缺乏公开、独立的生产基准仍是另一项不确定性。AWS 提到了更低延迟、更少数据传输和更少读取,但尚未量化不同工作负载下的结果。

Standard 层级的写入费用也取决于更新后的项目大小。针对宽记录发出的微小请求,并不自动意味着计费仅反映这次微小请求。

这使测量成为实际的下一步。团队应在迁移前比较请求数、p95 写入延迟、读取容量使用、冲突率和应用程序错误率。

它们还应观察部分更新是否能简化事件响应。更少的协调组件可以降低运维负担,但新的 IAM 和冲突处理规则也会引入自身的故障模式。

开发者接下来应关注什么

Amazon SageMaker UpdateRecord 的价值将取决于采用数据、迁移可靠性以及对更复杂写入模式的支持。

第一个信号是 Standard_V2 在生产环境中的迁移表现。团队应关注迁移时长、部署失败、回滚规划,以及 UpdateRecord 可用前的延迟。

稳定的迁移路径将增强 AWS 的论点:现有 Standard 客户可以在不重建特征组的情况下采用部分写入。即使 API 更简洁,运维意外也会放缓采用速度。

第二个信号是可量化的工作负载改进。有用的证据包括更低的 GetRecord 使用量、更少的读取容量消耗、更短的端到端更新延迟,以及更少的更新丢失事件。

这些测量应来自可比的工作负载。在将差异归因于 UpdateRecord 之前,测试必须保持记录宽度、更新频率、网络部署位置和并发性一致。

冲突率值得拥有独立仪表板。频繁出现 HTTP 409 响应,可能意味着事件延迟、时钟不一致,或某个生产者使用 EventTime 的场景其实更适合字段级排序。

第三个信号是 AWS 是否扩展部分写入模型。UpdateRecord 处理一条现有记录和最多 100 个特征,而 BatchWriteRecord 则处理多条记录的完整写入。

运行大规模修正任务的客户可能会希望提供批量特征级操作。它的缺失并不会削弱当前功能,但界定了仍需客户端编排的场景。

开发者还应关注 SDK、基础设施即代码和可观测性支持。当预置工具能一致地暴露一项服务能力,且监控能呈现不同的故障类别时,该能力会更易于运维。

对于正在评估此次发布的团队,最安全的测试范围应保持较小。选择一个更新频繁、更新彼此独立且拥有多个独立生产者的特征组。

在修改代码前记录字段所有权。添加与这些边界相匹配的 IAM 条件,然后确定每个生产者是否应提交 EventTime。

创建或迁移一个非关键的 Standard_V2 组,或使用现有的 In-Memory 组。在等效负载下,测量旧的读取-修改-写入路径和新的部分写入路径。

跟踪的指标不应仅限于平均延迟。比较 p95 和 p99 延迟、读取请求、写入失败、过期事件冲突、载荷大小和运维恢复工作量。

在发布期间保留受控的回退方案。UpdateRecord 无法创建缺失记录,因此应用程序仍需要通过 PutRecord 为初始导入提供明确路径。

工程团队还应确保架构决策、字段所有权和事件时间策略可被检索。维护良好的技术知识库可以防止后续服务违反这些约定。

Amazon SageMaker UpdateRecord 从在线特征流水线中消除了真实存在的重复工作来源。它以部分原子写入和更细粒度的授权控制,取代了完整记录协调。

剩下的问题是运维层面的,而非概念层面的。Standard_V2 迁移能否始终保持可预测?生产指标能否证实更少读取能带来有意义的节省?

频繁发生独立变更的宽记录团队现在有了一个具体实验可做。比较两种路径,检查冲突情况,并决定应用程序端合并是否仍有其价值。

 
 

免费开始

一款本地优先的AI助手

为了获得更好的人工智能体验,

remio 目前仅支持Windows 10+ (x64)M-Chip Mac

你的 AI 工作伙伴

remio 一起高效工作

规划、创作、交付

一站式完成

bottom of page