あなたが言及しているものは、しばしば「キー圧縮」と呼ばれます*。実装されていない理由はいくつかあります。
- やりたい場合は、現在、アプリケーション/ORM/ODM レベルで非常に簡単に実行できます。
- すべてのケースで必ずしもパフォーマンスが向上するわけではありません**。多くのキー名を持つコレクションや、ドキュメント間で大幅に異なるキー名を考えてみてください。
- 何百万ものドキュメントを作成するまでは、測定可能なパフォーマンス** の利点はまったく得られない可能性があります。
- サーバーがそれを行う場合でも、完全なキー名をネットワーク経由で送信する必要があります。
- 圧縮されたキー名がネットワーク経由で送信される場合、javascript コンソールを使用すると読みやすさが大幅に低下します。
- JSON ドキュメント全体を圧縮すると、パフォーマンスがさらに向上する可能性があります
。
すべての機能と同様に、それを実装するための費用便益分析があり、(少なくともこれまでのところ) 他の機能はより多くの「費用対効果」を提供しています。
完全なドキュメント圧縮は、将来の MongoDB バージョンで [検討中][1] です。バージョン 3.0 以降で利用可能 (下記参照)
* キー名のメモリ内ルックアップ テーブルは、基本的に LZW スタイルの圧縮の特殊なケースです。これは、多かれ少なかれ、ほとんどの圧縮アルゴリズムが行うことです。
** 圧縮は、スペースの利点とパフォーマンスの利点の両方を提供します。ドキュメントが小さいということは、IO ごとにより多くのドキュメントを読み取ることができることを意味します。これは、IO が固定されているシステムでは、1 秒あたりにより多くのドキュメントを読み取ることができることを意味します。
アップデート
MongoDB バージョン 3.0 以降には、WiredTigerストレージ エンジンによる完全なドキュメント圧縮機能が搭載されています。
snappyとzlibの2 つの圧縮アルゴリズムを使用できます。その意図は、snappy が総合的なパフォーマンスの最良の選択であり、zlib が最大のストレージ容量の最良の選択であることです。
私の個人的な (非科学的ですが、商用プロジェクトに関連する) 実験では、きびきびした圧縮 (zlib は評価していません) により、顕著な正味のパフォーマンス コストなしでストレージ密度が大幅に向上しました。実際、以前のコメント/予測とほぼ一致して、場合によってはわずかにパフォーマンスが向上しました。