MongoDB 7.0 では、複数のプレビュー機能が一般提供に移行され、シャーディング、暗号化、集約に関する新しい機能が導入されました。このページでは、ApsaraDB for MongoDB ユーザー向けのハイライトを説明します。
完全なアップストリームの変更ログについては、「MongoDB 7.0 のリリースノート」をご参照ください。
新機能の概要
| カテゴリ | 機能または変更点 |
|---|---|
| 新機能 | Queryable Encryption (GA) |
シャードメタデータ整合性チェック (checkMetadataConsistency) | |
シャードキー分析 (analyzeShardKey) | |
| AutoMerger | |
| シャーディング | rangeDeleterHighPriority パラメーター、リシャーディングメトリック、バランサーポリシーの更新 |
| セキュリティ | Key Management Interoperability Protocol (KMIP) V1.0 および V1.1、OpenSSL 3.0 および OpenSSL FIPS |
| 集計 | ビット演算子、$median、$percentile |
| 時系列 | DELETE 制限の緩和、COMPACT サポート |
| その他 | 複合ワイルドカードインデックス; $changeStreamSplitLargeEvent; スロットベース実行(SBE)のパフォーマンス向上 |
クエリ可能暗号化
MongoDB 6.0 でプレビュー版だった Queryable Encryption は、MongoDB 7.0 で一般提供が開始されました。
実装の詳細については、「Queryable Encryption」をご参照ください。
シャードメタデータ整合性チェック
シャード間のメタデータ整合性の不一致は、後から診断することが困難な微妙なルーティングエラーを引き起こす可能性があります。MongoDB 7.0 で追加された checkMetadataConsistency コマンドを使用すると、本番トラフィックに影響を与える前にこれらの不一致を事前に検出できます。
データベースレベルでコマンドを実行します。
// Check metadata consistency for the current database
db.runCommand({
checkMetadataConsistency: 1,
checkIndexes: true
})または、mongosh ヘルパーを使用して、異なるスコープでチェックします。
// Check the current database
db.checkMetadataConsistency()
// Check a specific collection
db.collection.checkMetadataConsistency()
// Check all databases in the sharded cluster
sh.checkMetadataConsistency()不一致を早期に検出するために、このチェックを日常の運用・保守 (O&M) スケジュールに含めてください。完全なコマンドリファレンスについては、「checkMetadataConsistency」をご参照ください。
シャードキー分析 (analyzeShardKey)
誤ったシャードキーを選択すると、ホットスポット、不均一なデータ分散、クエリパフォーマンスの低下につながり、コレクションがシャーディングされた後に修正するにはコストがかかります。analyzeShardKey コマンドは、候補となるシャードキーをサンプリングされた実際のクエリに対して評価し、コミットする前に情報に基づいた決定を下せるようにします。
db.adminCommand({
analyzeShardKey: "<db>.<collection>",
key: <shardKey>,
keyCharacteristics: <bool>,
readWriteDistribution: <bool>,
sampleRate: <double>,
sampleSize: <int>
})| パラメーター | 説明 |
|---|---|
analyzeShardKey | 分析するコレクションの名前空間。<db>.<collection> 形式です。 |
key | 評価する候補シャードキー。 |
keyCharacteristics | true の場合、シャードキーのカーディナリティと頻度分布をレポートします。 |
readWriteDistribution | true の場合、読み取りと書き込みがシャード間でどのように分散されているかをレポートします。 |
sampleRate | サンプリングするドキュメントの割合 (0 から 1 の間の値)。 |
sampleSize | サンプリングするドキュメントの数。 |
このコマンドは、コレクションに対する読み取りまたは書き込みをブロックしません。本番ワークロードへの影響を最小限に抑えるには、secondary または secondaryPreferred の読み取りプリファレンスで使用してください。シャードクラスターでは、mongos が読み取りプリファレンスを自動的に secondaryPreferred に設定します。
分析を実行する前にクエリサンプリングを設定するには、「configureQueryAnalyzer」をご参照ください。完全なコマンドリファレンスについては、「analyzeShardKey」をご参照ください。
AutoMerger
シャードクラスターがデータ移行、範囲削除、継続的な書き込みによって進化するにつれて、チャンクの数が不必要に増加し、データ分散の不均一化やバランサーの速度低下を引き起こす可能性があります。MongoDB 7.0 で導入された AutoMerger は、データまたはインデックスの分散が不均衡な場合、チャンクが多すぎる場合、またはデータ移行中にチャンクを自動的にマージすることで、この問題に対処します。
AutoMerger は、MongoDB 7.0 でデフォルトで有効になっています。以前のバージョンの MongoDB でシャードコレクションのバランサー設定を構成するために導入された configureCollectionBalancing コマンドも AutoMerger をサポートしています。
db.adminCommand({
configureCollectionBalancing: "<db>.<collection>",
chunkSize: <num>,
defragmentCollection: <bool>,
enableAutoMerger: <bool>
})特定のシャード上のすべてのマージ可能なチャンクの手動マージをトリガーするには、以下を実行します。
db.adminCommand({ mergeAllChunksOnShard: "db.coll", shard: "Shard0" })シャーディングの最適化
AutoMerger に加えて、MongoDB 7.0 には以下のシャーディングの変更点が含まれます。
rangeDeleterHighPriority パラメーター: 孤立したドキュメントの削除がビジネス削除操作よりも優先されるかどうかを制御します。
falseがデフォルトで、ビジネス操作が優先されることを意味します。operationsBlockedByRefresh の削除:
operationsBlockedByRefreshドキュメントはserverStatusから削除されました。カタログキャッシュのリフレッシュが発生していない場合でも、コレクションルーティング情報を使用したすべての操作に対してmongosノードでカウンターが増分されていたため、メトリックが誤解を招くものでした。リシャーディングメトリック: リシャーディング操作の新しい監視メトリックが追加されました。
addShard コマンド:
maxSizeオプションはサポートされなくなりました。チャンクサイズ検証:
config.settingsコレクションでチャンクサイズを調整すると、MongoDB は値がサポートされている範囲 (1 から 1,024) 内にあることを検証するようになりました。バランサーポリシーの更新 (MongoDB 6.0.3 から): バランサーは、チャンク数ではなくデータ量に基づいてデータを分散するようになりました。パーティショニングはチャンクではなく範囲によって実行され、自動分割はデータがシャード間で移行される場合にのみ発生します。
セキュリティ
KMIP サポート: Key Management Interoperability Protocol (KMIP) V1.0 および V1.1 が、外部キー管理でサポートされるようになりました。
OpenSSL: OpenSSL 3.0 および OpenSSL FIPS がサポートされるようになりました。
集約
MongoDB 7.0 では、6 つの新しい集約演算子が追加されました。
ビット演算子
4 つの演算子が int および long 値に対してビット演算を実行します。
| 演算子 | 説明 |
|---|---|
$bitAnd | ビット単位 AND |
$bitNot | ビット単位 NOT (ビット単位反転) |
$bitOr | ビット単位 OR |
$bitXor | ビット単位 XOR |
パーセンタイル演算子
2 つの演算子が、グループ化された値全体で統計パーセンタイルを計算します。
| オペレーター | 説明 |
|---|---|
$median | 50 パーセンタイル (近似中央値) を返します。 |
$percentile | 指定されたパーセンタイルを返します。 |
例 — カテゴリごとの中央値と 90 パーセンタイルを計算:
db.sales.aggregate([
{
$group: {
_id: "$category",
medianRevenue: { $median: { input: "$revenue", method: "approximate" } },
p90Revenue: { $percentile: { input: "$revenue", p: [0.90], method: "approximate" } }
}
}
])時系列コレクション
DELETE 制限の緩和:
DELETEコマンドは、以前のバージョンに適用されていたほとんどの制限なしに、時系列コレクションで使用できるようになりました。残りの唯一の制限は、DELETEを複数ドキュメントトランザクション内で使用できないことです。COMPACT サポート:
COMPACTコマンドが時系列コレクションで動作するようになりました。
その他の変更
スロークエリログフィールド:
catalogCacheIndexLookupDurationMillisを含む新しいフィールドがスロークエリログエントリに追加されました。詳細については、「スロー操作のログ記録」をご参照ください。ストレージエンジンの自動同時実行性: WiredTiger ストレージエンジンのトランザクション同時実行性が自動的に調整されるようになりました。自動調整前のデフォルト値は 128 チケットです。詳細については、「ストレージエンジンの同時実行トランザクション (読み取りおよび書き込みチケット)」をご参照ください。
currentOp のクエリサンプリングメトリック: クエリサンプリングに関連するフィールドが
currentOp出力に含まれるようになりました。詳細については、「currentOp メトリック」をご参照ください。複合ワイルドカードインデックス: MongoDB 7.0 は、ワイルドカードフィールドと 1 つ以上の標準フィールドを組み合わせた複合ワイルドカードインデックスをサポートしています。詳細については、「複合ワイルドカードインデックス」をご参照ください。
$changeStreamSplitLargeEvent 演算子: 16 MB の BSON ドキュメント制限を超える変更ストリームイベントを、複数の小さなイベントに分割します。詳細については、「大規模な変更ストリームイベント」をご参照ください。
Slot-Based Execution (SBE) エンジンの改善: SBE クエリ実行エンジンは、クエリパフォーマンスを向上させるために最適化されました。
チャンク移行メトリック: チャンク移行の新しいシャーディング統計が追加されました。詳細については、「チャンク移行の新しいシャーディング統計」をご参照ください。
USER_ROLES システム変数: 現在のユーザーに割り当てられているロールを返します。
新しいグローバルパラメーター:
analyzeShardKey、balancer、およびqueryAnalyzersのパラメーターが追加されました。serverStatus 出力の変更:
serverStatus出力にフィールドが追加されました。詳細については、「serverStatus 出力の変更」をご参照ください。