FeatureDB は、Alibaba Cloud PAI の FeatureStore (PAI-FeatureStore) プラットフォームが提供するデータベースサービスです。FeatureStore のオンラインストアとして機能し、検索、レコメンデーション、広告などのサービス向けに、高性能なオンライン特徴量ストレージと最適化された読み書き操作を提供します。本トピックでは、FeatureDB の概要、特徴、メリットについて説明します。
FeatureDB とは
FeatureDB は、FeatureStore が提供する高性能な分散ストレージデータベースです。KV および KKV データ形式をサポートし、配列を Array 型、キーと値のペアを Map 型として構造化して格納できます。データを Array 型および Map 型で格納することにより、その後の読み書き操作や推論サービスでより高いパフォーマンスを実現します。FeatureDB は、ユーザー行動シーケンス特徴量を含む、オフラインとリアルタイム両方の特徴量の生成、更新、消費のパイプラインを完全にサポートします。
アクティベーション方法
画面の指示に従い、新しい FeatureDB データソースを作成する際に FeatureDB をアクティベートします。詳細については、「オンラインデータソースの作成:FeatureDB」をご参照ください。
製品の特徴
FeatureDB は、FeatureStore の特徴量データ読み取り特性に合わせて、以下の機能と最適化を実装しています。
-
KV 型および KKV 型の特徴量の読み書きをサポートします。
-
MaxCompute の複合型特徴量 (Array、Map) の読み書きをサポートします。
-
FeatureView 配下のすべての特徴量データの一括プルをサポートします。
-
リアルタイム特徴量データを更新するためのミリ秒レベルのポーリングをサポートします。
-
期限切れデータを自動的にクリーンアップする秒レベルの Time-to-Live (TTL) をサポートします。
-
実際の読み書きデータ量に基づいた従量課金制を採用しています。
FeatureDB は、FeatureView のデータを複数のパーティションにわたってシャード化します。シャード数を調整することで、さまざまなシナリオの読み書きパフォーマンス要件に対応できます。データの安定性と安全性を確保するために、レプリカもサポートされています。シャード数は、選択した [Estimated Data Scale] に基づいて設定されます。
-
[数千万件未満] (デフォルト):5 シャード。
-
[数千万件から数億件]:10 シャード。
-
[数億件超]:20 シャード。
[Create Feature View] ダイアログボックスで、[Estimated Data Scale] ドロップダウンリストから適切なスケールを選択します。
メリット
-
高いコスト効率
小規模な特徴量ストレージを利用するお客様は、FeatureDB を使用してコストを削減できます。
-
高頻度更新要件への対応
リアルタイム統計特徴量を使用する場合、数秒ごとに複数の EasyRec Processor (モデル推論サービス) インスタンスにリアルタイム特徴量を更新する必要があります。高頻度の更新が要求されますが、FeatureDB はこれをサポートします。
-
複合型特徴量のサポート
検索や広告のシナリオでは、Array 型および Map 型の特徴量、長いユーザー行動シーケンス、およびそれらの SideInfo が広く使用されています。複合型特徴量を文字列として保存すると、使用時に Map 型へのデシリアライズが必要となるため、パフォーマンスが低下します。
FeatureDB は、複合型データのネイティブな保存をサポートし、MaxCompute 2.0 の複合型データを FeatureDB に同期することで高性能な読み取りを実現します。
-
弾力的なスケールアウトのサポート
大規模なデータを扱うお客様は、特徴量ビューごとにシャード数を柔軟に増やして、読み書きのパフォーマンスを向上させることができます。
-
監視の死角を排除
サードパーティのデータソースを統合すると、特にリアルタイム特徴量において、エンドツーエンドのデータパイプラインの監視が困難になります。FeatureDB は、読み書きの QPS、RT、データ更新のレイテンシー、ストレージ使用量などの主要なパフォーマンスメトリクスを、ビュー単位で監視します。
製品機能
高速 VPC 接続
FeatureDB は、PrivateLink を介した高速な VPC 接続を提供します。設定が正常に完了すると、FeatureStore は PrivateLink を使用してお使いの VPC を FeatureDB サービスに接続します。その後、FeatureStore SDK を使用して、VPC 内からプライベート接続経由で FeatureDB にアクセスでき、データの読み書きパフォーマンスを向上させ、アクセスレイテンシーを削減できます。
高速 VPC 接続は、次のように設定します。
-
方法 1:FeatureDB データソースをまだ作成していない場合は、[Manage Data Source] をクリックします。[Manage Data Source] ページで、[Create Data Source] をクリックします。FeatureDB データソースを作成する際に、VPC ネットワークの高速接続構成 セクションに VPC と ゾーンと vSwitch を入力します。詳細な手順については、「オンラインデータソースの作成:FeatureDB」をご参照ください。
-
方法 2:すでに FeatureDB データソースを作成している場合は、[Manage Data Source] をクリックします。[Manage Data Source] ページで、既存の [feature_db] データソースをクリックして、その製品ページに移動します。VPC ネットワークの高速接続構成 をクリックし、VPC と ゾーンと vSwitch を入力してから、確認 をクリックします。
注意事項
-
一度設定すると、VPC は変更できません。設定した VPC が FeatureStore オンラインサービスで使用されている VPC と一致していることを確認してください。
-
サービスを推奨ゾーンにデプロイすることで、ゾーン間のネットワークレイテンシーを回避し、アクセスパフォーマンスを最大化できます。
エリア
リージョン
推奨ゾーン
アジア太平洋
中国 (杭州)
ゾーン G
中国 (上海)
ゾーン L
中国 (北京)
ゾーン F
中国 (深セン)
ゾーン F
香港 (中国)
ゾーン B
シンガポール
ゾーン C
インドネシア (ジャカルタ)
ゾーン B
ヨーロッパおよびアメリカ
ドイツ (フランクフルト)
ゾーン A
米国 (シリコンバレー)
ゾーン B
-
ゾーンと vSwitch:オンラインサービスインスタンスと同じゾーンの vSwitch を選択してください。高可用性と安定性を確保するために、少なくとも 2 つのゾーン (オンラインサービスが実行されているゾーンと上記の推奨ゾーンであることが望ましいです) で vSwitch を選択してください。
-
設定が正常に完了した後、他のゾーンの vSwitch は追加のみ可能です。既存の設定を変更または削除することはできません。
特徴量の書き込み
オフライン特徴量の場合、FeatureStore Python SDK を DataWorks と共に使用して、MaxCompute から FeatureDB にデータを同期する日次スケジュールタスクを実行します。
デフォルトでは、リアルタイム特徴量の書き込みは行全体の更新を実行します。書き込まれたデータに一部のフィールドしか含まれていない場合、欠落しているフィールドは空に設定されます。指定されたフィールドのみを更新し、既存のデータにマージするには、次のように設定します。
-
Java SDK を使用して書き込む場合:InsertMode を InsertMode.PartialFieldWrite として指定します。
for (int i = 0; i < 100;i++) { featureView.writeFeatures(writeData, InsertMode.PartialFieldWrite); } -
Flink コネクタを使用して書き込む場合:パラメーター insert_mode を partial_field_write に設定します。
特徴量の読み取り
FeatureStore SDK (Go/Java) または EasyRec Processor を使用して特徴量を読み取ります。
FeatureStore SDK (Go/Java) は、オフライン特徴量とリアルタイム特徴量の KV ポイントインタイム結合をサポートします。特徴量の JoinID (プライマリキー) と特徴量名を指定して KV クエリを実行し、対象の特徴量データをミリ秒単位で取得します。SDK は、行動シーケンス特徴量の KKV クエリもサポートします。UserID を指定して、組み立てられたシーケンス特徴量の結果を取得します。
EasyRec Processor は FeatureStore C++ SDK を統合しており、FeatureDB の特徴量データをすべてメモリに取り込み、ミリ秒レベルのポーリングでメモリ内のリアルタイム特徴量を更新することで、より高い読み取りパフォーマンスを実現します。
監視メトリクス
FeatureDB をオンラインストアとして使用する場合、特徴量ビューを作成した後、対象ビューの横にある データモニタリング をクリックして、読み書きの QPS や RT などのメトリクスを表示できます。(注意:オフライン特徴量ビューのデータ同期からの書き込みは、これらのメトリクスには表示されません。)
リアルタイム特徴量パイプライン
FeatureStore のストレージサービスは、Feature Service (アクセス層) 、メッセージキュー (DataHub) 、FeatureDB の 3 つのコンポーネントで構成されています。
リアルタイム特徴量の場合、FeatureStore Java SDK または Flink コネクタを使用して Feature Service を呼び出し、特徴量データを FeatureDB に書き込むことができます。Feature Service を使用して書き込まれたデータは、MaxCompute テーブルにも同期され、リアルタイム特徴量サンプルのエクスポートやさらなるモデルトレーニングに利用されます。
FeatureDB に保存された特徴量データは、FeatureStore Java/Go SDK を使用して読み取るか、EasyRec Processor を使用してすべての特徴量をローカルキャッシュにプルすることで、より高い読み取りパフォーマンスを実現できます。リアルタイム特徴量は、最新の特徴量情報をミリ秒単位で提供します。
リアルタイム特徴量のデータライフサイクル設定
リアルタイム特徴量ビューを作成する際、[Feature Lifecycle] を使用して FeatureDB テーブルのデータライフサイクルを設定します。行は、ライフサイクル期間に達してから数秒以内に期限切れとなり、自動的にクリーンアップされます。
データの Time-to-Live (TTL) は、現在 2 つの設定方法をサポートしています。
-
方法 1:イベント時間 フィールドを指定しません。この場合、ライフサイクルはデータの書き込み時刻から開始され、行は有効期限が切れると自動的にクリーンアップされます。
-
方法 2:特徴量フィールドを イベント時間 フィールド (単位:ミリ秒) として選択します。event_time を イベント時間 フィールドの値、time_now を現在の時刻、time_ttl = time_now - ttl を有効期限のしきい値とします。FeatureDB は、書き込まれたデータを次のように処理します。
-
PartialFieldWrite モードを使用して部分的なフィールド更新を行う場合、ライフサイクルは実際の書き込み時刻から計算されます。
-
event_time > time_now + 15 分の場合:データは書き込まれません。(これにより、15 分のバッファを設けることで、システム間のタイムスタンプの不一致を防ぎます。)
-
time_ttl < event_time <= time_now + 15 分の場合:データは正常に書き込まれます。ライフサイクルは event_time から開始され、行は有効期限が切れると自動的にクリーンアップされます。
-
0 < event_time < time_ttl の場合:データは書き込まれますが、すぐにクリーンアップされます。注意:event_time はミリ秒単位です。イベント時間 フィールドが秒を使用している場合、データはこの場合に該当し、永続化されません。
-
event_time <= 0 の場合:ライフサイクルは実際の書き込み時刻から計算されます。
-
値が無効な場合 (整数に変換できない場合) :データは書き込まれません。
-
イベント時間 フィールドは登録されているが、イベント時間 フィールドに値が設定されていない場合:データは正常に書き込まれ、そのライフサイクルは実際の書き込み時間に基づいて計算されます。
-
イベント時間 フィールドが登録されていない場合:データは正常に書き込まれ、ライフサイクルは実際の書き込み時刻から計算されます。
-
さらに、FeatureDB は event_time の値をその行のタイムスタンプ (ts) として使用します。特定のキーのデータを更新するには、新しい イベント時間 の値は、以前の値以上である必要があります。新しい event_time が元の値より小さい場合、キーのデータは更新されません。
-
パフォーマンス テスト
以下は、VPC 環境で FeatureStore Go SDK を使用して FeatureDB データを読み取る際のストレステスト結果の例を示します。テストデータは、レコメンデーションシナリオのユーザー側テーブルから取得したもので、総行数は 17,689,586 です。テストは 4 コア、8 GiB のマシンで実行されました。結果はあくまで参考値です。
-
VPC ネットワーク高速接続を設定し、オンラインサービスを推奨ゾーンにデプロイした場合:
特徴量フィールド数 (列数)
読み取りキー数 (行数)
平均レイテンシー
TP95
TP99
260
1
0.89 ms
1.20 ms
1.45 ms
260
10
1.17 ms
1.52 ms
1.87 ms
260
50
1.91 ms
2.56 ms
2.92 ms
260
100
2.87 ms
3.58 ms
3.93 ms
260
200
4.43 ms
5.25 ms
5.80 ms
-
VPC ネットワーク高速接続を設定したが、オンラインサービスを推奨ゾーン以外にデプロイした場合:
特徴量フィールド数 (列数)
読み取りキー数 (行数)
平均レイテンシー
TP95
TP99
260
1
2.54 ms
2.86 ms
3.15 ms
260
10
2.75 ms
3.12 ms
3.56 ms
260
50
3.95 ms
4.75 ms
5.19 ms
260
100
4.82 ms
5.66 ms
6.21 ms
260
200
6.84 ms
7.75 ms
8.25 ms
-
VPC ネットワーク高速接続を設定していない場合:
特徴量フィールド数 (列数)
読み取りキー数 (行数)
平均レイテンシー
TP95
TP99
260
1
3.62 ms
3.83 ms
4.27 ms
260
10
3.82 ms
4.11 ms
4.61 ms
260
50
4.54 ms
5.19 ms
5.60 ms
260
100
5.40 ms
6.13 ms
6.56 ms
260
200
7.15 ms
7.93 ms
8.47 ms
課金
詳細については、「FeatureStore の課金」をご参照ください。