NoSQLタイプのデータベース、特にMongoDBについて質問がありますが、一般的に、ほとんどのKey-Valueまたはドキュメントベースのストレージに適用されます。NoSQLのセールスポイントのいくつかは速度とスケーラビリティですが、リレーショナルデータベースと比較してかなりのオーバーヘッドがあるように思われます。
(ほとんど)すべてが正規化されていないため、重複がたくさんあります。これはそのようなデータベースの一種のポイントであるため、それについて多くを行うことはできません。私は次のものについてもっと心配しています:
JSONドキュメントがある場合は、各ドキュメントにすべてのキー(およびすべての構造情報)を保存する必要があるため、多くのオーバーヘッドがあります。したがって、10000行の場合、文字列'age'、'name'、...を10000回保存する必要があります。
データベースは、インデックスやバイナリツリーの作成(時間を節約するため)や整数のコンパクトな保存(自由形式のドキュメントの1つに文字列が含まれ、他のすべてのドキュメントにintが含まれる可能性があるため)など、多くの巧妙な処理を実行できません。等。)
独自のビューまたはmap/reduceアルゴリズムを記述して、インデックスのようなものを取得できることは知っていますが、一般的なケースでは、NoSQLはスペースとCPUの面で非常に非効率的である必要があります。
本当にそんなに悪いの?NoSQLデータベース(MongoDBなど)ではどのような最適化が行われていますか?リレーショナルデータベースを使用する場合と比較して、同一の複雑なJSONドキュメントを多数保存する場合のオーバーヘッドはどれくらいですか?