AWS SageMaker Feature Store 新增批量写入与记录枚举 API
亚马逊云科技为 SageMaker Feature Store 推出 BatchWriteRecord 和 ListRe…
亚马逊云科技近日为 Amazon SageMaker Feature Store 推出两个新的数据面 API:BatchWriteRecord 与 ListRecords。前者用于在单次调用中跨多个特征组批量写入记录,后者用于分页枚举特征组中的记录标识符。这两项更新主要面向需要高吞吐特征管道与希望在线浏览存储记录的 ML 工程团队。
背景与痛点
SageMaker Feature Store 是一个用于存储、共享和管理机器学习模型特征的托管仓库,同时提供低延迟在线推理服务与用于训练和历史回溯的离线存储。在实际使用中,团队普遍会遇到两类问题:
- 高吞吐特征管道只能通过 PutRecord 逐条写入在线存储,单次 API 调用只能写入一条记录到一个特征组。当一个欺诈检测管道每秒钟需要跨 5 个特征组摄入 1 万条记录时,意味着每秒要发出 5 万次独立的 API 调用,连接开销与尾延迟都会成为瓶颈。
- 使用 In-Memory(Redis 后端)存储层的团队此前无法浏览或枚举在线存储中的记录。若因 bug 或管道故障丢失了记录标识符,这些记录就无法恢复,且 In-Memory 层没有对应的离线存储或 Athena 查询作为兜底。
新 API 概览
AWS 此次发布的两条 API 针对上述两个场景:
- BatchWriteRecord:单次 API 调用可写入最多 25 条记录到多个特征组;具备部分成功语义(partial-success)、每条记录独立的 TTL 控制,并保留与 PutRecord 一致的基于 EventTime 的顺序保证。
- ListRecords:支持分页枚举特征组中的记录标识符,兼容 Standard(DynamoDB 后端)和 In-Memory(Redis 后端)两种存储层。
使用这两个 API 需要具备 SageMaker AI 资源创建权限的执行角色,并配置 sagemaker:BatchWriteRecord、sagemaker:PutRecord、sagemaker:ListRecords 等最小权限,同时使用最新版 Boto3 或 SageMaker Python SDK v3.8.0 及以上版本。
BatchWriteRecord 详解
BatchWriteRecord 的核心特性包括:
- 单请求最多 25 条记录,可跨一个或多个特征组。
- 每条记录独立成功或失败,单条记录的错误不会导致整个请求失败。
- 与 PutRecord 一致的顺序保证:若传入记录的 EventTime 比现有记录新,则成为在线存储中的最新版本;否则作为历史版本写入离线存储(针对启用离线存储的特征组)。
- 对于认证 / 校验失败、服务限流等错误,记录会随错误码、错误信息和原始记录一起在响应中返回;未被处理的条目则在
UnprocessedEntries字段中返回,供调用方重试。 - 响应体中未出现在
Errors或UnprocessedEntries中的记录表示已成功写入,应用侧只需对失败条目采用指数退避策略重试。
调用示例(Boto3)展示了如何构造 Entries 数组,其中每条记录包含 FeatureGroupName、Record(特征名 / 值列表)、TargetStores(OnlineStore / OfflineStore)以及可选的 TtlDuration。例如,可同时向 click-features 写入点击计数、向 login-features 写入登录计数,两组写入在同一次 API 调用中完成。
ListRecords 概览与适用场景
ListRecords 让团队可以在不依赖离线存储的前提下,按页枚举特征组内的记录 ID,缓解 In-Memory 层「记录丢失即永久不可恢复」的问题。结合 BatchWriteRecord,二者共同降低了高吞吐特征管道对 PutRecord 的依赖,并让 In-Memory 用户具备了基础的运维可观测能力。
需要注意的是,这两项 API 是对现有功能的能力补充,不改变 PutRecord 的语义与一致性模型;对于已经在使用 PutRecord 的服务,亦可平滑迁移到批量写法以降低单位写入成本。
