Docs Menu
Docs Home
/ /

Feast와 MongoDB 통합

Feast는 기능 및 기능 그룹( 기능 뷰), 온라인 및 오프라인 저장 , 오프라인에서 온라인 저장 로 데이터를 동적으로 이동하는 기능(materialization)을 정의할 수 있는 고급 FeatureStore API제공합니다. MongoDB 통합을 통해 MongoDB Feast의 온라인 및 오프라인 저장 로 모두 사용할 수 있으므로 별도의 저장 시스템을 유지 관리하지 않고도 기능을 한 번만 정의하면 모델 교육 및 온라인 추론 전반에서 일관되게 제공 할 수 있습니다.

MongoDB의 유연한 문서 모델 과 MQL 사용하면 오프라인 저장 에 필요한 복잡한 쿼리 패턴을 처리하다 할 수 있습니다. 온라인 저장 의 경우, MongoDB 빠른 읽기/쓰기, 수평적 확장 , 조인과 왕복을 최소화하는 유연한 스키마와 같은 웹 스케일 액세스 패턴에 최적화되어 있습니다.

이 통합 개요에서는 다음을 확인할 수 있습니다.

  • Feast의 온라인 및 오프라인 저장 인 MongoDB 소개합니다.

  • Feast 개념이 MongoDB 에 매핑되는 방법.

  • MongoDB 오프라인 및 온라인 저장 디자인에 대한 자세한 설명입니다.

  • Feast에서 MongoDB 스토어를 설정하기 위한 구성 예제입니다.

  • 온라인 저장 는 단일 MongoDB 컬렉션 으로 지원되는 키-값 저장 로, 온라인 추론 중에 엔터티별 최신 기능을 짧은 지연 시간으로 검색할 수 있도록 최적화되어 있습니다.

  • 오프라인 저장 는 교육 데이터 세트, 점수 산정 및 구체화(데이터를 온라인 저장 로 승격)를 위해 MongoDB 컬렉션 (일반적으로 이라고 함)에 저장된 기록 기능 데이터 행을 쿼리하는 컴퓨팅 및 번역 계층입니다.feature_history

일반적인 엔드 투 엔드 워크플로는 다음과 같습니다.

  1. MongoDB 지원 컬렉션을 점 엔터티, 기능 뷰 및 데이터 소스를 정의합니다.

  2. offline_write_batch를 통해 오프라인 저장 에 기능 데이터를 수집하면 PyArrow 테이블을 입력으로 받고 오프라인 저장 스키마 에 따라 데이터를 feature_history MongoDB 컬렉션 에 삽입합니다.

  3. get_historical_features을(를) 사용하여 교육 데이터를 생성하면 MongoDB 에 저장된 기록 기능 행에 대해 효율적인 특정 시점 조인을 실행합니다.

  4. pull_latest_from_table_or_queryonline_write_batch를 사용하여 오프라인 저장 의 최신 기능 값을 온라인 저장 로 구체화합니다.

  5. 직렬화된 엔터티 키로 입력되는 단일 MongoDB 컬렉션 에서 읽는 Feast의 온라인 API를 통해 온라인 기능을 제공합니다.

MongoDB 통합은 Feast의 표준 개념 모델을 따르지만 이러한 추상화를 엔터티 중심 온라인 문서 및 추가 전용 기록 이벤트를 위해 설계된 MongoDB 스키마 에 매핑합니다.

Feast 개념
잔치에서의 역할
MongoDB 표현

실재

기능이 설명하는 도메인 객체 입니다(예: 운전자, 사용자).

직렬화된 엔터티 키로 인코딩됩니다. 온라인 저장 에서는 _id , 오프라인 저장 에서는 entity_id 로 저장됩니다.

조인 키

데이터 프레임에서 엔터티 행을 식별하는 데 사용되는 열입니다.

serialize_entity_key에 공급됨, 결과 바이트는 MongoDB 에서 엔터티 식별자로 사용됩니다.

직렬화된 엔터티 키

조인 키 이름과 값의 결정론적 바이너리 인코딩.

온라인: _id: serialized_entity_key (기본 키). 오프라인: feature_history 문서의 entity_id: Binary(...) 필드 .

기능

특정 점 의 명명되고 입력된 측정값입니다.

features 하위 문서(오프라인) 또는 features.<feature_view>.<feature_name> ( 온라인 ) 내의 필드 .

FeatureView

기능을 엔터티, 데이터 소스 및 TTL 에 바인딩합니다. 조직 단위.

오프라인: 각 기록 문서 의 feature_view 판별자 문자열입니다. 온라인: features.<feature_view>event_timestamps의 FV별 타임스탬프 아래에 중첩된 그룹입니다.

DataSource

기록 기능이 있는 위치에 대한 메타데이터 포인터입니다.

MongoDBSource MongoDB 컬렉션 (database, collection, connection_string)과 타임스탬프를 가리킵니다.

OfflineStore

기록 기능 및 PIT 조인을 위한 읽기/ 쓰기 (write) 인터페이스입니다.

MongoDBOfflineStore 복합 인덱스 있는 공유 feature_history 컬렉션 통해 MQL 애그리게이션을 실행 구현 .

OnlineStore

엔티티당 최신 기능 값의 지연 시간이 짧은 저장 .

중첩된 featuresevent_timestamps 하위 문서가 있는 _id = serialized_entity_key 키가 있는 엔터티 문서의 단일 MongoDB 컬렉션 .

TTL

FeatureView 수준의 최신 상태 창.

기록 기능을 계산할 때 오프라인 쿼리 및 Python 사후 필터링에 적용됩니다. 인덱스에서 created_timestamp 또는 updated_at 와 결합할 수도 있습니다.

FeatureService

모델에 대한 기능 참조의 명명된 목록입니다.

직접적인 MongoDB 표현이 없습니다. Feast에서 온라인 저장 에서 읽을 features.<feature_view>.<feature_name> 경로를 결정하는 데 사용됩니다.

레지스트리

엔터티, 기능 보기 및 서비스에 대한 메타데이터 저장 .

변경되지 않음. MongoDB 통합은 Feast 레지스트리를 대체하지 않습니다.

RetrievalJob

기능 테이블을 반환하는 지연 실행 래퍼입니다.

MongoDB 오프라인 저장 의 경우 MQL 집계 캡슐화하고 커서에서 화살표로 변환을 지원하는 화살표 내보내기를 노출합니다.

구체화

최신 오프라인 기능을 온라인 저장 에 정기적으로 배포합니다.

feature_history 를 통해 pull_latest_from_table_or_query 을(를) 통해 구현된 다음 online_write_batch 을(를) 통해 온라인 MongoDB 컬렉션 에 구현됩니다.

MongoDB 오프라인 저장 모든 기능 보기에 대한 추가 전용 기록 기능 행을 저장하는 단일 공유 컬렉션 ( 기본값 으로 feature_history)을 사용합니다.

각 문서 특정 이벤트 타임스탬프에서 하나의 FeatureView에 대한 하나의 엔터티에 대한 하나의 관찰을 나타냅니다.

{
"entity_id": "Binary(...)",
"feature_view": "driver_stats",
"event_timestamp": "ISODate(2024-01-15T12:00:00Z)",
"created_at": "ISODate(2024-01-15T12:01:00Z)",
"features": {
"conv_rate": 0.72,
"acc_rate": 0.91,
"avg_daily_trips": 14
}
}

주요 속성:

  • 추가 전용: 기록 데이터는 변경할 수 없는 것으로 처리됩니다. 수정 사항은 현재 위치 업데이트가 아닌 최신 created_at 타임스탬프가 있는 새 행으로 기록됩니다.

  • Time Series 친숙한: event_timestamp 은 기능 값이 관찰된 시점을 나타냅니다. created_at 은(는) 여러 관찰이 동일한 이벤트 타임스탬프를 주식 경우 타이 브레이커(tie-breaker)로 사용됩니다.

  • FeatureView별 기능 그룹화: feature_view 는 행이 속한 FeatureView를 식별하므로 단일 컬렉션 여러 FV를 호스팅하다 할 수 있습니다.

단일 복합 인덱스 모든 주요 쿼리 패턴을 지원합니다.

(entity_id ASC, feature_view ASC, event_timestamp DESC, created_at DESC)

이 인덱스 사용하면 엔티티 및 기능 뷰에 대한 범위 스캔을 효율적으로 수행할 수 있으며 집계 중에 (entity_id, feature_view) 당 가장 최근의 관찰이 먼저 표시됩니다.

MongoDB 오프라인 저장 표준 Feast 오프라인 저장 인터페이스를 구현합니다.

  • offline_write_batch - 구성된 MongoDBSource 메타데이터 사용하여 connection_string, databasecollection를 결정하여 기능 데이터의 pyarrow.Table 를 기본 MongoDB 컬렉션 에 기록합니다.

  • get_historical_features - 엔티티 및 이벤트 타임스탬프의 entity_df 와 FeatureViews 설정하다 가 주어지면 각 행 기능 특정 시점의 올바른 기능 값이 포함된 확장된 테이블을 반환합니다: 각 (entity_id, event_timestamp) 쌍에 대해 event_timestamp <= entity_event_timestamp 그리고 into TTL 이 선택되었습니다.

  • pull_latest_from_table_or_query - Feast의 구체화 엔진 이 온라인 저장 시드하는 데 사용하는 시간 창 최신 기능 값을 포함하는 엔터티당 하나의 행을 반환합니다.

  • pull_all_from_table_or_query - 동일한 feature_history 스키마 및 인덱스 기반으로 내보내기 또는 검사를 위해 지정된 날짜 범위 의 데이터 소스 에서 모든 행을 검색합니다.

  • persist (RetrievalJob.persist을(를) 통해) - 기록 기능 쿼리 의 결과를 feature_history와(과) 별개인 SavedDatasetStorage을(를) 통해 별도의 컬렉션 또는 외부 싱크에 씁니다.

권장되는 오프라인 구현 MongoDBOfflineStore이라는 애그리게이션 기반 MongoDB 오프라인 저장 입니다.

주요 특성:

  • feature_view(으)로 구별되는 모든 FeatureView에서 공유하는 단일 feature_history 컬렉션 사용합니다.

  • 모든 쿼리에 대해 복합 인덱스 (entity_id, feature_view, event_timestamp, created_at) 에 의존하여 전체 컬렉션 스캔을 방지합니다.

  • 서버 측 $group $first 을(를) 워크로드 "점수"(엔터티당 하나의 행)에 사용하고, 엔터티 ID가 반복되는 "교육" 워크로드에는 pd.merge_asof 을(를) 사용하여 정확성과 성능의 균형을 맞춥니다.

  • 청킹을 통한 메모리 사용량이 제한되므로 RAM 소진하지 않고 큰 entity_df 값을 처리할 수 있습니다.

벤치마크에 따르면 이 구현 대체 MongoDB 오프라인 접근 방식에 비해 처리량 과 메모리 효율성 의 최상의 조합을 제공합니다.

기능
지원되나요?
참고 사항

get_historical_features (PIT 조인)

인덱싱된 애그리게이션 및 Pandas merge-asof를 사용하여 MongoDBOfflineStore 를 통해 구현됩니다.

pull_latest_from_table_or_query

(entity_id, feature_view, event_timestamp, created_at)보다 $match + $sort + $group $first 를 사용합니다.

pull_all_from_table_or_query

feature_history에 대한 시간 필터가 포함된 전체 기록 스캔입니다.

offline_write_batch

구성된 MongoDBSource를 통해 화살표 테이블을 MongoDB 에 씁니다.

persist

SavedDatasetStorage를 사용하여 기록 쿼리 결과를 별도의 컬렉션 으로 내보냅니다.

데이터 레이크 또는 웨어하우스로 직접 내보내기와 같은 추가 편의는 특정 RetrievalJob 구현 에 따라 달라지며 오프라인 스토어에 대한 Feast의 표준 패턴을 따를 것으로 예상됩니다.

MongoDB 온라인 저장 직렬화된 엔터티 키로 키로 지정되는 모든 FeatureViews에 대해 단일 컬렉션 사용합니다.

  • _id: serialized_entity_key(entity_key), 엔터티 이름과 값을 정렬하고 바이트로 인코딩하는 Feast의 안정적인 인코딩 함수에서 생성합니다.

  • features: 각 FeatureView가 자체 기능 네임스페이스 유지 관리하는 중첩된 하위 문서입니다.

  • event_timestamps: 해당 FeatureView의 최신 값이 작성된 시점을 나타내는 FeatureView별 타임스탬프입니다.

  • created_timestamp 또는 updated_at: TTL 인덱싱 및 진단에 유용한 부기 필드입니다.

예시(간체):

{
"_id": "b\"<serialized_entity_key>\"",
"features": {
"driver_stats": {
"rating": 4.91,
"trips_last_7d": 132
},
"pricing": {
"surge_multiplier": 1.2
}
},
"event_timestamps": {
"driver_stats": "ISODate(2026-01-01T12:00:00Z)",
"pricing": "ISODate(2026-01-21T12:00:00Z)"
},
"created_timestamp": "ISODate(2026-01-21T12:00:00Z)"
}

설계 근거:

  • 단일 컬렉션 각 엔터티의 상태 하나의 문서 에 보관하며, 이는 키 기반 조회에 대한 Feast의 기대치에 부합하고 FeatureView별 컬렉션에서 상태 조각화되는 것을 방지합니다.

  • 직렬화된 엔터티 키를 _id 로 사용하면 Feast의 결정론적 인코딩을 재사용하고, 컬렉션 전체에서 프라이머리 키가 중복되는 것을 방지하고, 엔터티당 단일 키 조회로 계속 검색합니다.

MongoDB 온라인 저장 Feast의 표준 온라인 저장 API 구현합니다.

  • online_write_batch - 구체화하는 동안 Feast는 각 엔터티의 최신 기능 값을 MongoDB 문서에 씁니다. 각 배치 업서트 중첩된 관련 features.<feature_view> 하위 문서와 event_timestamps 의 해당 항목만 업데이트하여 엔터티 문서를 원자적이고 일관적인 유지합니다.

  • online_readget_online_features - 온라인 검색은 오프라인과 동일한 직렬화 로직을 사용하여 엔터티 키를 _id 값으로 해석한 다음 키 조회를 수행합니다. 각 조회는 중첩된 features 구조를 활용하여 엔터티에 대해 요청된 모든 기능을 한 번의 왕복으로 반환합니다.

  • TTL 및 최신 상태 - 기능 TTL FeatureView에서 구성되며 주로 오프라인 PIT 조인에 사용됩니다. 온라인 TTL updated_at 또는 유사한 타임스탬프에 대한 인덱스 사용하여 구현할 수 있으며, 이는 오프라인 스토어는 추가 전용이고 온라인 스토어는 최신 상태 보유한다는 Feast의 개념과 일관적인 .

오프라인 저장 MongoDBOfflineStoreConfig을 사용하여 구성됩니다.

class MongoDBOfflineStoreConfig(FeastConfigBaseModel):
type: str = "...MongoDBOfflineStore"
connection_string: str = "mongodb://localhost:27017"
database: str = "feast"
collection: str = "feature_history"

feature_store.yaml :

offline_store:
type: feast.infra.offline_stores.contrib.mongodb_offline_store.mongodb.MongoDBOfflineStore
connection_string: "mongodb+srv://user:pass@cluster.mongodb.net"
database: feast
collection: feature_history

MongoDBSource 는 해당 DataSource 입니다. 해당 name 필드 는 feature_view 모든 문서 에 저장된 판별자가 됩니다. 전체 구성 옵션은 Feast 문서에서 MongoDB 데이터 소스 참조를 참조하세요.

source = MongoDBSource(
name="driver_stats",
timestamp_field="event_timestamp",
created_timestamp_column="created_at",
)

돌아가기

AI 에이전트 빌드

이 페이지의 내용