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

BSON文字列(Cstring / enameではない)の後に続く0x00バイトがなぜですか?

    文字列の長さとnullターミネータの両方の理由は、既存のCスタイルの文字列との互換性とパフォーマンスの2つです。

    パフォーマンスのために、MongoDBは、BSON全体を反復処理することなく、ドキュメント内の特定のフィールドにすばやく移動できる必要があります。これは、大きな(たとえば、16 MB)ドキュメントの終わりに近いフィールドを探している場合は特に重要です。文字列型の最初の情報の1つとしてエンコードされた文字列の長さを使用すると、そのバイト数をスキップして次のフィールドに移動できます。それ以外の場合は、文字列の終わりが見つかるまで文字列全体を反復処理する必要があります。

    互換性のために、MongoDBはC ++で記述されており、文字列はnullで終了 されます。 。長さがエンコードされているため、そのnullターミネータを切り取って1バイトを節約できますが、その文字列をBSONからC ++で使用できる形式にするには、そのnullを再度タックする必要があります。これには、1バイトを節約することだけが有利な特殊な文字列処理ルーチンが必要になります。

    全体として、1バイトを「無駄にする」ことは許容できるトレードオフであると判断されました。




    1. mongoidで一意の埋め込みドキュメントを適用する方法

    2. MongoDBレプリカはプライマリを設定していません。新しいプライマリを強制する必要があります

    3. Mgoアグリゲーション:モデルタイプを再利用して、混合結果をクエリおよびアンマーシャリングする方法は?

    4. Node.jsを使用してMongodbからNumberLongデータを抽出する方法は?