1

デフォルトでキャップ付きコレクションの _id フィールドに自動インデックスを設定する理由は何ですか? ドキュメントには次のことが記載されています。

このインデックス作成のオーバーヘッドがなければ、上限のあるコレクションはより高い挿入スループットをサポートできます。

上限付きコレクションの挿入パフォーマンスに関する投稿があり、私自身のテストでは、挿入の場合、インデックスなしの上限付きコレクションが最速のオプションであり、次に通常のコレクションが行われ、最も遅いオプションはインデックス付きの上限付きコレクションであることが示されています。バージョン 2.2 で _id フィールドと共に自動インデックスが追加されたのはなぜでしょうか? 特定のシナリオで通常のコレクションに代わる高速な代替手段として上限付きコレクションが提案されているのに、パフォーマンスに問題があった場合はどうすればよいでしょうか?

4

1 に答える 1

1

確かに、キャップ付きコレクションでも _id の利点を除外することはできません。それはあなたを助け、実際には複製に必要です.

レプリカ セット構成での MongoDB の展開は現在ではごく普通のことなので、MongoDB はデフォルトで有効にしています。詳細についてはドキュメントを参照してください。autoIndexId を探してください。

遅さの理由は_idフィールド自体ではなく、インデックスにあると思います。そのため、特別なニーズが必要な場合は、いつでも自動インデックスを無効にすることができます。

しかし...

_id フィールドにゼロ (0) 値を指定する必要があります。

たとえば、自動インデックスが無効になっている 2 GB の上限付きコレクション。

db.createCollection("people", { capped: true, size: 2147483648, autoIndexId: false } )

きっとこの裏技で挿入速度が戻るはずです。

于 2016-03-08T13:29:46.230 に答える