sql >> データベース >  >> NoSQL >> MongoDB

JSONドキュメントデータベースのキーのコスト(mongodb、elasticsearch)

    ドキュメントのサイズが異なることに正しく気づきました。したがって、少なくとも15 bytesを節約できます ドキュメントごと(60% 同様のドキュメントの場合)2番目のスキーマを採用することにした場合。これは、140MBのようなものになります あなたの10 millionのために 記録。これにより、次の利点が得られます。

    • HDDの節約。 唯一の問題は、現在のHDDの価格を見ると、これはほとんど役に立たないということです。
    • RAMの節約。 ハードディスクと比較すると、これはインデックス作成に役立ちます。 のmongodbワーキングセットでは、インデックスをRAMに収めて、優れたパフォーマンスを実現する必要があります。パフォーマンス 。したがって、これら2つのフィールドにインデックスを付ける場合は、140MBを節約するだけではありません。 HDDスペースだけでなく140MB 潜在的なRAMスペース(実​​際には注目に値する)の。
    • I / O 。入出力システムの制限により、多くのボトルネックが発生します(ディスクからの読み取り/書き込みの速度が制限されます)。ドキュメントの場合、これは、スキーマ2を使用すると、twice as many documentsの読み取り/書き込みが可能になる可能性があることを意味します。 1秒あたり。
    • ネットワーク 。多くの場合、ネットワークはIOよりもはるかに低速であり、DBサーバーが別のマシン上にある場合は、アプリケーションサーバーにデータをネットワーク経由で送信する必要があります。また、2倍のデータを送信することもできます。

    利点について説明した後、小さなキーの欠点について説明する必要があります。

    • データベースの読みやすさ。 db.coll.findOne()を実行する場合 {_id: 1, t: 13423, a: 3, b:0.2}が表示されます ここに正確に何が保存されているかを理解するのはかなり難しいです。
    • アプリケーションの読みやすさ データベースと似ていますが、少なくともここで解決策を得ることができます。 currentDateを変換するマッピングロジックを使用 cへ およびprice pへ クリーンなコードを記述して、短いスキーマを作成できます。



    1. MongoDBネストされたオブジェクトの集計カウント

    2. Mongo$existsクエリは正しいドキュメントを返しません

    3. $andとMultiple$orを使用してMongoDBをクエリします

    4. パンダを使用してmongoDBに新しいフィールド(列)を挿入する