Docs Menu
Docs Home
/
データベース マニュアル
/ / / / /

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

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

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

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

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

  • 少なくとも、ローカル ルールはサーバー上のリモートスキーマと同じフィールドを暗号化する必要があります。

  • 接続 encryptedFieldsMapオブジェクトに指定されたコレクションのキーが含まれている場合、クライアントはリモートスキーマではなく、そのオブジェクトを使用して自動Queryable Encryption を実行します。

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

    重要

    リモート スキーマの動作

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

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

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

コレクションを作成する 前に、どのフィールドを暗号化したり、クエリ可能にしたりするかを決定してください。どのフィールドが暗号化されているか、またはクエリ可能であるかを変更するには、コレクションの暗号化スキーマを再構築し、コレクションを再作成する 必要があります。

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

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

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

min, max

クエリタイプ: range

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

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

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

警告

プレフィックス、サフィックス、サブストリング クエリはパブリック プレビュー段階です。

Queryable Encryption のプレフィックス、サフィックス、サブストリング クエリは、 MongoDB 8.2 でpublic previewで利用できます。これらのクエリ タイプは本番環境では有効にしないでください。パブリック プレビュー機能は GA 機能と互換性がなくなるため、これらのクエリを有効にするコレクションはすべて削除する必要があります。

strMaxLength

クエリタイプ: substringPreview

タイプ: 1から60までの整数(両端を含む)

部分文字列インデックスのフィールドに許可される最大長。さらに長い文字列を挿入しようとすると、 エラーが返されます。

重要

fleDisableSubstringPreviewParameterLimits を設定することで文字数制限を上書きできますが、長い文字列に対して部分文字列クエリを実行中とパフォーマンスに大きな影響が生じます。

strMinQueryLength

クエリタイプ: prefixPreviewsuffixPreviewsubstringPreview

タイプ: 正の整数。

  • prefixPreview または suffixPreview クエリでは >= 1 である必要があります。

  • substringPreview クエリでは >= 2 である必要があります。

クエリに許可されるプレフィックス/サフィックス/サブストリングの最小長。より短い文字列をクエリしようとすると、エラーが返されます。

strMaxQueryLength

クエリタイプ: prefixPreviewsuffixPreviewsubstringPreview

タイプ: 正の整数。prefixPreview クエリまたは suffixPreview クエリでは >=1 である必要があります。- substringPreview クエリでは 2-10 である必要があります。

クエリに許可されるプレフィックス、サフィックス、サブストリングの最大長。より長い文字列をクエリしようとすると、 エラーが返されます。

重要

この設定はクエリのパフォーマンスに大きく影響します。可能な場合は常に最大クエリ長を制限します。

caseSensitive

クエリタイプ: prefixPreviewsuffixPreviewsubstringPreview

タイプ: ブール値

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

プレフィックス/サフィックス/サブストリング クエリが大文字と小文字を区別するかどうか。大文字と小文字を区別しない一致には、 を false に設定します。

diacriticSensitive

クエリタイプ: prefixPreviewsuffixPreviewsubstringPreview

タイプ: ブール値

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

プレフィックス/サフィックス/サブストリングのクエリが発音区別符号と一致する必要があるかどうか。発音区別符号を区別しないマッチングには、 を false に設定します。

警告

これらのパラメーターは上級ユーザーのみを対象としたものです。デフォルト値は過半数のユースケースに適しており、ユースケースで必要な場合にのみ変更してください。

sparsity

クエリタイプ: range

タイプ: 1 - 4の整数。

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

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

precision

クエリタイプ: range

タイプ: 整数。

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

double または decimalフィールドをクエリするときに考慮される点以降の桁数を制限します。追加の桁は丸められずに削除されます。例、1 の precision はクエリで 10.1810.1 として扱います。暗号化された値は引き続き 10.18 として保存されます。

precision を指定し、可能な場合は制限します。数字が 関係 のようにストレージのオーバーヘッドが増加するため、検索可能な範囲とインデックス生成に大きな影響が生じます。

trimFactor

クエリタイプ: range

タイプ: 整数。

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

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

contention

クエリタイプ: equalityrangeprefixPreviewsuffixPreviewsubstringPreview

タイプ: 整数。

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

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

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

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

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

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

戻る

Fundamentals

項目一覧