Firestore Pipeline オペレーションは、Firestore Enterprise エディションの中心的な機能です。新しいクエリエンジン上に構築されており、可能なクエリの範囲を大幅に拡大します。Firestore Pipeline オペレーションでは、柔軟なクエリ構文と独自のインデックス登録方法が採用されています。インデックスは省略可能で、自動的に作成されません。これにより、アプリケーションの高度なデータ取得オペレーションが可能になります。
Firestore Pipeline オペレーションの機能
Firestore Enterprise エディションと新しい Pipeline オペレーションでは、Firestore Standard エディションの既存の制限の多くが解消された新しい高度なクエリ エンジンが使用されます。Firestore Pipeline オペレーションには、120 以上の新しいクエリ機能が用意されています。Firestore Pipeline オペレーションには次の機能があります。
ステージベースのコンポーズ可能な構文
Pipeline クエリは、順番に実行される一連の連続したステージを定義することで構築されます。これにより、以前は不可能だった集計結果のフィルタリングなどの複雑なオペレーションが可能になります。
次の例は、過去 1 か月間に閲覧された一意のプロダクト ID の数を取得するパイプライン クエリを示しています。
guard let cutoffDate = Calendar.current.date(byAdding: .month, value: -1, to: Date()) else {
return
}
let snapshot = try await db.pipeline()
.collection("productViews")
.where(Field("viewedAt").greaterThan(cutoffDate.timeIntervalSince1970))
.aggregate([Field("productId").countDistinct().as("uniqueProductViews")])
.execute()
拡張機能
Pipeline クエリには、次のような多くの新機能が導入されています。
- 集計: 新しい集計関数(
sum(...)、min(...)、count_distinct(...)など)と任意のグループ化フィールドの組み合わせをサポート。 - 複雑なフィルタリング:
regex_match(...)、add(...)、str_contains(...)など、任意の複雑なwhere(...)ステートメントを表現するための 120 以上の新しい関数をサポート。すべてハード インデックス要件なし。 - 部分読み取り / 投影:
select(...)、remove_fields(...)、その他の多くのドキュメント操作ステージを使用して、ドキュメントの動的サブセットを取得。
リアルタイムおよびオフライン サポート
リアルタイムとオフラインを利用するために、デベロッパーは Firestore Enterprise エディションで Firestore Core オペレーションを利用できます。
クライアントとツールの統合
Enterprise エディションには、Pipeline クエリを操作して管理するための特別な機能が含まれています。
- クエリの説明とプロファイリング: Query Explain の結果を使用して、クエリが消費する読み取りまたは書き込みのユニットの数を把握し、その実行を分析できます。
- Query Insights: Enterprise エディションは Query Insights をサポートしています。Query Insights は、クエリのパフォーマンス特性を可視化することで、パフォーマンスと費用を改善するには、どこにインデックスを作成すればよいかを特定するのに役立ちます。
- 新しいインデックス タイプ: スパース インデックスなど、Enterprise エディション専用のインデックスを作成できます。また、Enterprise データベースのベクトル検索インデックスを作成、編集することもできます。
Firestore Standard と Firestore Enterprise の違い
Core オペレーションと Pipeline オペレーションの主な運用上の違いは、インデックス作成の管理にあります。これは、パフォーマンスと費用に直接影響します。
| Firestore Standard - Core オペレーション | Firestore Enterprise - Core オペレーションと Pipeline オペレーション | |
| インデックス作成の要件 | クエリにはインデックスが必要です。
個々のフィールドのインデックスは自動的に作成されますが、より複雑なクエリでは、手動で構成する必要がある複合インデックスやコレクション グループ インデックスが使用されます。 |
インデックスは必須ではないため、クエリでは省略可能です。
必要に応じてインデックスを定義します。Enterprise エディションでは、非スパース インデックス、スパース インデックス、一意インデックスなど、より広範なインデックス タイプもサポートしています。 |
| パフォーマンス リスク | インデックス付きクエリ: パフォーマンスと費用は、結果セットのサイズに応じてスケーリングされます。 |
インデックスなしクエリ: パフォーマンスとコストは、データセットのサイズに応じてスケーリングされます。 インデックス付きクエリ: パフォーマンスと費用は、結果セットのサイズに応じてスケーリングされます。 Query Explain ツールと Query Insights ツールを使用してインデックスを作成し、クエリのパフォーマンスと費用を改善することをおすすめします。 |
| ストレージ費用の影響 | 自動インデックスと複合インデックスからストレージ オーバーヘッドが発生します。 | すべてのフィールドに対してインデックスが自動的に作成されないため、ストレージ費用を節約できます。 |
| 費用ベース | ドキュメントの読み取り、書き込み、削除のオペレーションごとに課金されます。 | 読み取りユニット(4 KB トランシェ)と書き込みユニット(1 KB トランシェ)ごとに課金されます。インデックス エントリの書き込みでは、書き込みユニットが消費されます。
例を参考に、新しい料金設定についてご確認ください。 |
| セキュリティ ルール | セキュリティ ルールは、読み取り / 書き込み権限を検証してコレクションを保護します。 | セキュリティ ルールは、読み取り / 書き込み権限を検証してコレクションを保護します。データモデル ガイドで、パイプライン クエリをサポートするようにデータをモデル化する方法を確認します。 |