Feast は高レベルの FeatureStore APIを提供しており、機能と機能のグループ(機能ビュー)、オンライン ストレージとオフラインストレージを定義し、オフラインからオンラインストレージにデータを動的に移動する能力(マテリアライズド)を定義できます。MongoDB統合により、MongoDB をFeast のオンラインとオフラインの両方のストアとして使用できるため、個別のストレージシステムを維持することなく、機能を一度定義して、モデル訓練やオンライン推論で一貫して提供できます。
MongoDB の柔軟な document model とMQLにより、オフライン ストアに必要な複雑なクエリ パターンを処理できます。オンライン ストアでは、 MongoDBはウェブスケールのアクセス パターン(高速読み取り/書込み、水平スケーリング、結合やラウンド トリップを最小限に抑える柔軟なスキーマ)に最適化されています。
この統合の概要では、次の項目が見つかります。
Feast のオンラインおよびオフライン ストアとしてのMongoDBの紹介。
Feast の概念がMongoDBにどのようにマッピングされるか。
MongoDB のオフラインとオンライン ストアのデザインの詳細な説明。
Feast にMongoDBストアを設定するための構成例。
重要な概念
オンラインストアとオフラインストア
一般的なワークフロー パターン
一般的なエンドツーエンドのワークフローは次のようになります。
MongoDBベースのコレクションを点エンティティ、機能ビュー、データソースを定義します。
offline_write_batch経由で機能データをオフライン ストアに取り込みます。PyArrow テーブルを input として受け入れ、オフライン ストアスキーマに従ってfeature_historyMongoDBコレクションにデータを挿入します。get_historical_featuresを使用して訓練データを生成します。これにより、 MongoDBに保存されている履歴機能行に対して効率的なポイントインタイム結合が実行されます。pull_latest_from_table_or_queryとonline_write_batchを使用して、オフライン ストアの最新の機能値をオンライン ストアに具体化します。Feast のオンライン API 経由で機能をオンラインで提供します。この API は、シリアル化されたエンティティ キーでキー付けされた単一のMongoDBコレクションから読み取ります。
Feast の概念がMongoDBにどのようにマッピングされるか
MongoDB の統合は Feast の標準概念modelに従いますが、それらの抽象化をエンティティ中心のオンライン documentと追加のみの履歴イベント用に設計されたMongoDBスキーマにマッピングします。
概念マッピング
フィーストの概念 | Feast でのロール | MongoDB表現 |
|---|---|---|
エンティティ | 説明する機能を持つドメインオブジェクト(例:ドライバー、ユーザー)。 | シリアル化されたエンティティキーにエンコードされます。オンライン ストアでは |
結合キー | データフレーム内のエンティティ行を識別するために使用される列。 |
|
直列化された EntityKey | 結合キー名と値の決定的なbinaryエンコーディング。 | オンライン: |
機能 | 特定の点における型指定された測定値。 |
|
FeatureView | 機能をエンティティ、データソース、 TTL にバインドします。組織の単位。 | オフライン: 各履歴 document の |
DataSource | 履歴機能が存在する場所へのメタデータ ポインター。 |
|
OFFlineStore | 履歴機能と PIT 結合用の読み取り/書込みインターフェース。 |
|
OnlineStore | エンティティごとの最新機能値の低レイテンシ ストア。 | ネストされた |
TTL | FeatureView レベルの リフレッシュウィンドウ。 | 履歴機能を計算するときにオフライン クエリとPython後フィルタリングで強制されます。は、インデックスの |
FeatureService | modelの機能参照の名前付きリスト。 | MongoDB の直接表現ではありません。 Feast は、オンライン ストアから読み取る |
レジストリ | エンティティ、機能ビュー、サービスのメタデータ ストア。 | 変更されていない。 MongoDB統合は Feast レジストリを置き換えるものではありません。 |
RetrievalJob | 機能テーブルを返す延期された実行ラッパー。 | MongoDBオフライン ストアの場合、 はMQL集計をカプセル化し、カーソルから Arrow への変換を基盤とした Arrow のエクスポートを公開します。 |
マテリアライズド | 最新のオフライン機能をオンライン ストアに提供する予定です。 |
|
MongoDBオフライン ストア
データモデル
MongoDBオフライン ストアは、すべての機能ビューに対する追加のみの履歴機能行を保存する単一の共有コレクション(デフォルトでは feature_history)を使用します。
各documentは、特定のイベントタイムスタンプにおける 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_string、database、collectionを決定し、基礎の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スキーマとインデックスに基づき、エクスポートまたは検査のために指定された日付範囲内のすべての行をデータソースから取得します。persist(RetrievalJob.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オフライン アプローチと比較して、スループットとメモリ効率の最高の組み合わせを提供することを示しています。
オフライン ストアの機能
機能 | サポートされていますか? | ノート |
|---|---|---|
| はい | インデックス付き集計と Ppanda のマージを使用して |
| はい |
|
| はい |
|
| はい | 構成された |
| はい |
|
データレイクや倉庫に直接エクスポートするような追加のオプションは、特定の RetrievalJob実装によって異なります。また、オフライン ストアでは、Feast の標準パターンに従うことが予想されます。
MongoDBオンラインストア
データモデル
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 つのdocumentで保持するため、キーベースの検索に関する Feast の予想と一致し、FeatureView ごとのコレクション間での状態の断片化を回避します。
シリアル化されたエンティティキーを
_idとして使用すると、Feast の決定的エンコーディングが再利用され、コレクション間で重複するプライマリキーが回避され、エンティティごとに単一のキー検索が取得されます。
主要オンライン操作
MongoDBオンライン ストアには、Feast の標準オンライン ストアAPIが実装されています。
online_write_batch- マテリアライズ中に、Feast は各エンティティの最新の機能値をMongoDB documentに書き込みます。各バッチするアップサートでは、関連するネストされたfeatures.<feature_view>サブdocumentと、event_timestamps内の対応するエントリのみが更新され、エンティティ documentはアトミックでコンシステントに保たれます。online_readとget_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_historyMongoDBSource は、対応する DataSource です。Its nameフィールドは、すべてのdocumentに保存される feature_view 弁別子になります。完全な構成オプションについては、Feast ドキュメントのMongoDB データソース参照を参照してください。
source = MongoDBSource( name="driver_stats", timestamp_field="event_timestamp", created_timestamp_column="created_at",)次のステップ
Feast クイックスタート に従ってローカル機能ストアを設定し、このページの構成例を使用してMongoDB をオンラインおよびオフライン ストアとしてスワップします。
構成オプション、非同期サポート、完全な機能マトリックスについては、Feast ドキュメントのMongoDB Online Store参照を確認してください。
MongoDBSourceオプションとスキーマの詳細については、MongoDB Data Sourceの参照を確認してください。「Feast 概念ガイド」では、エンティティ、機能ビュー、マテリアライズドなどの主要な概念を学びます。