-1

mongodb と標準の C++ ツリーを使用した場合の速度比較を見た人がいるかどうか疑問に思っています。現在、ツリー構造を使用してデータを RAM に保存するプロジェクトを構築しています。私が理解しているように、JSON には、ツリーのノードが JSON オブジェクト内にあるような、同様の種類の構造があります。

my_tree : {
    node1 : [
        innerNode1: {},
        innerNode2: {},
        innerNode3: {}
    ],
    node2 : [
    ... data
    ],
}

これは、私が実装しているツリーのようなデータ構造に非常に似ています。

4

3 に答える 3

1

インコア ツリーは常に高速です。通常、ノードをフェッチすると、キャッシュ ミスが 1 回 (場合によってはそれ以上) 発生します。それは数ナノ秒です。ディスクベースのツリー ノードの場合、磁気ディスクのレイテンシは 5 ~ 10 ミリ秒です (さらに 1 つまたは複数のシステム コールのコストがかかります)。ネットワークベースのストレージの場合、リモート ストレージの場合は 100 ミリ秒以上になることさえあります。

ツリーをたどる場合、事態はさらに悪化します。すべてのノードで、ディスクまたはネットワーク ストレージのラウンド トリップ、またはメモリ内オブジェクトのキャッシュ ミスが発生します。

ディスクベースのオブジェクト ストレージの技術は、この行ごとの処理を回避することです。現在の SQL データベースでは、再帰クエリがある程度サポートされています。しかし、残念ながら、noSQL DBMS にはそれがありません。

于 2013-05-11T11:41:14.037 に答える
1

純粋な C++ ツリーの実装は、アトミック性、ジャーナル、同時実行性、IPC、ドライバー メッセージの解析など、DB の世界からのものを処理する必要がないため、高速であり、オーバーヘッドがはるかに少ない可能性があります (これは、 IPC)...

ただし、ツリーのような実装には、MongoDB が提供するすべてのタイプのクエリが含まれているとは限りません。また、実装が完全に RAM ベースである場合もあります。つまり、大量のドキュメントを処理することはできません。

于 2013-05-11T06:03:00.583 に答える