Docs Menu
Docs Home
/ /

MongoDBと Feast の統合

Feast は高レベルの 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. Feast のオンライン API 経由で機能をオンラインで提供します。この API は、シリアル化されたエンティティ キーでキー付けされた単一のMongoDBコレクションから読み取ります。

MongoDB の統合は Feast の標準概念モデルに従いますが、それらの抽象化をエンティティ中心のオンライン ドキュメントと追加のみの履歴イベント用に設計されたMongoDBスキーマにマッピングします。

フィーストの概念
Feast でのロール
MongoDB表現

エンティティ

説明する機能を持つドメインオブジェクト(例:ドライバー、ユーザー)。

シリアル化されたエンティティキーにエンコードされます。オンライン ストアでは _id として保存され、オフライン ストアでは entity_id として保存されます。

結合キー

データフレーム内のエンティティ行を識別するために使用される列。

serialize_entity_key に準拠しました。結果のバイトは、 MongoDBのエンティティ識別子として使用されます。

直列化された EntityKey

結合キー名と値の決定的なバイナリ エンコーディング。

オンライン: _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コレクション(databasecollectionconnection_string)とタイムスタンプを指定します。

OFFlineStore

履歴機能と PIT 結合用の読み取り/書込みインターフェース。

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集計をカプセル化し、カーソルから Arrow への変換を基盤とした Arrow のエクスポートを公開します。

マテリアライズド

最新のオフライン機能をオンライン ストアに提供する予定です。

feature_history 経由で pull_latest_from_table_or_query 経由で実装し、その後 online_write_batch をオンラインMongoDBコレクションに実装します。

MongoDBオフライン ストアは、すべての機能ビューに対する追加のみの履歴機能行を保存する単一の共有コレクション(デフォルトでは feature_history)を使用します。

各ドキュメントは、特定のイベントタイムスタンプにおける 1 つの FeatureView の 1 つのエンティティの 1 つの観察を表します。

{
"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 履歴データは不変として扱われます。修正は、インプレース アップデートではなく、新しい行として書き込まれます。

  • 時系列に適しています: event_timestamp は機能値が観察された時間を表します。 created_at は、複数の観察が同じイベントタイムスタンプを共有する場合に、タイブレークとして使用されます。

  • 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_stringdatabasecollection を決定し、基礎のMongoDBコレクションに機能データの pyarrow.Table を書き込みます。

  • get_historical_features - エンティティとイベントタイムスタンプの entity_df と FeatureView のセットを指定すると、 は、各行に特定の時点の正しい機能値が含まれる拡大テーブルを返します。それぞれの (entity_id, event_timestamp) ペアについて、event_timestamp <= entity_event_timestamp を持つ最新の機能値TTL 内の と が選択されます。

  • pull_latest_from_table_or_query - オンライン ストアをシードするために Feast のマテリアライズドエンジンによって使用される 時間ウィンドウの最新の機能値を含むエンティティごとに 1 行を返します。

  • pull_all_from_table_or_query - 同じ feature_historyスキーマとインデックスに基づき、エクスポートまたは検査のために指定された日付範囲内のすべての行をデータソースから取得します。

  • persistRetrievalJob.persist経由)- 履歴機能クエリの結果を、SavedDatasetStorage経由で別のコレクションまたは外部シンクに書き込みます。feature_history とは異なります。

推奨されるオフライン実装は、MongoDBOfflineStore という名前の集計ベースのMongoDBオフライン ストアです。

主な特徴:

  • すべての FeatureView で共有される単一の feature_historyコレクションを使用します(feature_view で区別されます)。

  • すべてのクエリで複合インデックス(entity_id, feature_view, event_timestamp, created_at) に依存し、コレクションのフル スキャンを回避します。

  • 「スコアリング」ワークロード(エンティティごとに 1 行)にはサーバーサイドの $group $first を使用し、エンティティ ID が繰り返されるワークロードを「訓練」するには pd.merge_asof を使用し、正確性とパフォーマンスのバランスをとります。

  • チャンク化によるメモリ使用量の限界が設定されているため、 RAM を枯渇することなく、大きな entity_df 値を処理できます。

ベンチマークは、この実装が代替のMongoDBオフライン アプローチと比較して、スループットとメモリ効率の最高の組み合わせを提供することを示しています。

機能
サポートされていますか?
ノート

get_historical_features (PIT 結合)

はい

インデックス付き集計と Ppanda のマージを使用して 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に Arrow テーブルを書込みます。

persist

はい

SavedDatasetStorage を使用して履歴クエリ結果を別のコレクションにエクスポートします。

データレイクや倉庫に直接エクスポートするような追加のオプションは、特定の RetrievalJob実装によって異なります。また、オフライン ストアでは、Feast の標準パターンに従うことが予想されます。

MongoDBオンライン ストアでは、シリアル化されたエンティティ キーをキーとするすべての FeatureView に対して単一のコレクションが使用されます。

  • _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)"
}

設計理由:

  • 単一のコレクションは各エンティティの状態を 1 つのドキュメントで保持するため、キーベースの検索に関する Feast の予想と一致し、FeatureView ごとのコレクション間での状態の断片化を回避します。

  • シリアル化されたエンティティキーを _id として使用すると、Feast の決定的エンコーディングが再利用され、コレクション間で重複するプライマリキーが回避され、エンティティごとに単一のキー検索が取得されます。

MongoDBオンライン ストアには、Feast の標準オンライン ストアAPIが実装されています。

  • online_write_batch - マテリアライズ中に、Feast は各エンティティの最新の機能値をMongoDBドキュメントに書込みます。各バッチするアップサートでは、関連するネストされた features.<feature_view> サブドキュメントと、event_timestamps 内の対応するエントリのみが更新され、エンティティ ドキュメントはアトミックで一貫性が保たれます。

  • online_readget_online_features - オンラインで提供すると、オフラインと同じ直列化ロジックを使用してエンティティキーを _id 値に解決し、キー検索を実行します。各検索は、ネストされた features 構造を活用して、エンティティに要求された機能を 1 回のラウンド トリップですべて返します。

  • 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エージェントの構築