Docs Menu
Docs Home
/
MongoDBマニュアル
/ / / / /

暗号化されたフィールドと有効なクエリ

項目一覧

  • サポートされているクエリの種類と動作
  • クライアントとサーバーのスキーマバリデーション
  • クエリを有効にする際の考慮事項
  • 最適な検索とストレージのための暗号化フィールドの設定

Queryable Encryptionを使用する場合は、暗号化スキーマを使用してコレクションレベルで暗号化されたフィールドを定義します。 フィールドを暗号化してクエリを有効にすると、ストレージ要件が増加し、クエリのパフォーマンスに影響します。 暗号化されたフィールドは、等価クエリまたは範囲クエリのいずれかに構成できますが、両方を構成することはできません。 予想されるクエリタイプのフィールドを設定します。

暗号化スキーマの作成とクエリの構成の詳細については、「 暗号化スキーマの作成 」を参照してください。

サポートされているクエリ演算子のリストと暗号化されたフィールドの動作については、サポートされているクエリ演算子 を参照してください。

MongoDB は、コレクション内の特定のフィールドの暗号化を強制するために、スキーマ検証を使用することをサポートしています。 自動 Queryable Encryption を使用するクライアントの動作は、データベース接続構成によって異なります。

  • 接続 encryptedFieldsMapオブジェクトに指定されたコレクションのキーが含まれている場合、クライアントは リモートスキーマではなく、そのオブジェクトを使用して自動Queryable Encryptionを実行します。 少なくとも、ローカル ルールはリモートスキーマが行うすべてのフィールドを暗号化する必要があります。

  • 接続encryptedFieldsMapオブジェクトに指定されたコレクションのキーが含まれていない場合、クライアントはコレクションのサーバー側リモート スキーマをダウンロードし、代わりにそれを使用します。

    重要

    リモート スキーマの動作

    リモート スキーマを使用する場合:

    • クライアントはサーバーが有効な スキーマ があることを信頼している

    • クライアントはリモート スキーマを使用して自動 Queryable Encryption のみを実行します。 クライアントは、スキーマで指定された他の検証ルールを強制しません。

暗号化されたフィールドをクエリ可能にすることができます。 暗号化される、またはクエリ可能なフィールドを変更するには、コレクションの暗号化スキーマを再ビルドし、コレクションを再作成します 。

暗号化されたフィールドをクエリする必要がない場合は、そのフィールドでクエリを有効にする必要がない場合があります。 クエリ可能なフィールドや暗号化されていない他のフィールドをクエリすることで、ドキュメントを検索することもできます。

MongoDBは 暗号化されたコレクションごとに2 つのメタデータのコレクションを作成し、ストレージ容量を増やします。 MongoDBは 暗号化されたフィールドごとにインデックスを作成し、そのフィールドの書込み (write) 操作の期間を増やします。 書込み操作によってインデックス付きフィールドが更新されると、 MongoDBは関連するインデックスを更新します。

MongoDBは、デバッグやパフォーマンスの調整を容易にするために次のパラメーターを提供します。

min, max

クエリ タイプ: 範囲クエリのみ。

タイプ: フィールドのbsonTypeと一致する必要があります。

bsonTypedecimalまたはdoubleの場合は必須です。 任意ですが、 intlong 、またはdateの場合は強く推奨します。 デフォルトはbsonTypeの最小値と最大値です。

限界が小さいとクエリの効率が向上するため、可能な場合はフィールドのクエリ可能な最小値と最大値(この値を含む)を指定します。 これらの範囲外の値をクエリすると、 MongoDBはエラーを返します。

重要

スパース 性精度rimFactor競合パラメーターは上級ユーザーのみを対象としたものです。 これらのオプションのデフォルト値は過半数のユースケースに適しており、ユースユースケースで必要な場合にのみ変更する必要があります。

sparsity

クエリ タイプ: 範囲クエリのみ。

タイプ: 1 - 4の整数。

任意。デフォルトは 2 です。

MongoDBが範囲値を十分にインデックス化するかに影響します。 スパース度が低いほど(高密度のインデックスを作成)クエリのパフォーマンスは向上しますが、挿入またはアップデートの操作ごとに暗号化されたメタデータコレクションに保存されるドキュメントが増え、ストレージのオーバーヘッドが大きくなります。 スパース度が高い場合は、その逆も発生します。

precision

クエリ タイプ: 範囲クエリのみ。

タイプ: 整数。

任意。 bsonTypedouble または decimal の場合にのみ許可されます。設定されていない場合、 MongoDBは bsonType と同じ最大精度(double または decimal のいずれか)を使用します。

double または decimalフィールドをクエリするときに考慮される桁数を決定します。数字を追加するたびにストレージのオーバーヘッドが増加し、検索可能な範囲とインデックス生成に大きな影響を与えます。 このパラメーターは、範囲クエリの精度を制限します。 precision の値が異なる場合はクエリ出力に影響しますが、暗号化された値は引き続き完全な精度で保存されます。

trimFactor

クエリ タイプ: 範囲クエリのみ。

タイプ: 整数。

任意。デフォルトは 6 です。

trimFactor は、同時挿入および更新のスループットを制御します。trimFactor が大きいと、同時挿入および更新のスループットは向上しコストが、範囲読み取り操作は遅くなります。値が低い trimFactor は、その逆を行います。

contention

クエリ タイプ: 等価クエリと範囲クエリ

タイプ: 整数。

任意。デフォルトは 8 です。

同じフィールドと値のペアを連続して複数のドキュメントに挿入するなどの同時書込み操作では、競合(競合)が発生し、操作が遅延する可能性があります。

Queryable Encryptionを使用すると、 MongoDBは内部カウンターを使用して、暗号化されたコレクション内の各フィールドと値のペアの発生を追跡します。 競合係数は、配列のようにこのカウンターを分割します。 これにより、 insertupdate 、またはfindAndModifyを使用して、同じフィールドと値のペアが連続して含まれる暗号化されたフィールドを追加または変更するときに、カウンターの増加に関する問題を最小限に抑えられフィールド。 contention = 0はインデックス0に 1 つの要素を含む配列を作成します。 contention = 4は、インデックス0 - 4に5要素を含む配列を作成します。 MongoDBは、挿入中にランダムな配列要素を増加させます。

設定されていない場合、 contentionはデフォルトで8になり、ほとんどのワークロードで高パフォーマンスが提供されます。 コンテンツが大きいと、濃度の低いフィールドで挿入およびアップデート操作のパフォーマンスは向上しますが、検索パフォーマンスは低下します。

オプションで、クエリ可能なフィールドに contention を含めて、値をデフォルトの 8 から変更できます。

競合係数とその暗号化への影響の詳細については、9 MongoDBQueryable EncryptionMongoDBのQueryable Encryptionテクニカル ペーパー の 「セクション: ガイドライン」 を参照してください。

戻る

Fundamentals