AWS представила API UpdateRecord для Amazon SageMaker Feature Store, который позволяет обновлять отдельные признаки в записи без полного перечитывания и перезаписи. Это нововведение доступно для Standard (на базе Amazon DynamoDB) и In-Memory (на базе Amazon ElastiCache) уровней онлайн-хранилища. Для Standard-уровня требуется новый формат хранения Standard_V2, который включается при создании группы признаков.
Amazon SageMaker Feature Store — это полностью управляемое хранилище для ML-признаков, то есть обработанных данных, используемых для обучения моделей и генерации предсказаний. Ранее обновление даже одного значения признака требовало полного цикла чтения-изменения-записи через PutRecord. Например, для обновления risk_score в пайплайне обнаружения мошенничества приложение должно было прочитать всю запись через GetRecord, объединить новое значение в коде и записать запись целиком. Это добавляло задержку, потребляло лишние ресурсы чтения и создавало условия для гонок, когда несколько пайплайнов одновременно обновляли разные признаки одной записи. В худшем случае одна запись могла перезаписать другую, что является классической проблемой потерянных обновлений.
| Параметр | Описание |
|---|---|
| FeatureGroupName | Имя целевой группы признаков |
| RecordIdentifierValueAsString | Первичный ключ записи для обновления |
| Features | Список признаков для обновления (до 100) |
| TtlDuration | Опциональный TTL для записи |
Новый API UpdateRecord устраняет этот цикл. Вы указываете только те признаки, которые хотите изменить, и Feature Store атомарно применяет изменения к существующей записи. Признаки, не включенные в запрос, сохраняются без изменений. Это снижает задержку, уменьшает расходы на операции чтения и исключает конфликты при параллельной записи. Например, несколько пайплайнов (клики, покупки, скоринг) могут независимо обновлять свои признаки в одной записи без координации.
Функция доступна для Standard (DynamoDB) и In-Memory (ElastiCache) уровней онлайн-хранилища.

Запрос к UpdateRecord включает имя группы признаков, идентификатор записи и список изменяемых признаков (до 100 за вызов). Опционально можно задать TTL для записи. Если вы обновляете EventTime, он должен быть новее существующего, иначе запрос будет отклонен с ошибкой HTTP 409. При этом полный снимок записи автоматически реплицируется в офлайн-хранилище, чтобы обучающие данные оставались точными.
Для In-Memory уровня (на базе Redis OSS) новая функция работает сразу на всех существующих группах признаков без изменения формата хранения. Для Standard-уровня необходимо создать группу признаков с новым форматом Standard_V2. Это делается при создании группы признаков через параметр StorageType со значением Standard_V2. что UpdateRecord не является операцией upsert: запись должна уже существовать.
Это обновление особенно актуально для сценариев с высокочастотными обновлениями признаков, таких как персонализация в реальном времени, обнаружение мошенничества и рекомендательные системы. Оно снижает операционные издержки и повышает надежность конвейеров машинного обучения, работающих с большими объемами данных.



