1

私は Java で B+ ツリーの実装を行いましたが、いつものように、それは完全にメイン メモリにあります。B+ ツリーをディスクに保存するにはどうすればよいですか? Btree の各ノードには、その子へのポインター (メイン メモリ アドレスまたはオブジェクトへの参照) が含まれています。b+ ツリーがディスク上にあるシナリオで、b+ ツリー ノードのメイン メモリ アドレスを置き換えるものは何ですか?

ここに投稿された同様の質問がすでにあります: JavaでのB + Tree on-disk implementation

しかし、私は答えを完全には理解していません。

あなたの意見を共有してください?

4

2 に答える 2

0

githubのJDBM3のコードを見てください。このプロジェクトは、B +ツリーと同様のデータ構造をディスクに保持し、そこに間違いなく答えが見つかります。

于 2012-04-24T05:21:57.717 に答える
0

最も単純な形式:現在のノードが読み書きされるファイル オフセット (ファイルの先頭からのバイト数) を追跡する必要があります。したがって、メモリ アドレスの代わりに、ファイル ベースの DB ではオフセットを保存します。

次に、ファイルから読み取られるときに、メモリに「キャッシュ」して、指定されたノードのメモリ アドレスを保存するか、オフセットのみを操作するかを決定できます。

これは、通常、ファイルベースの DB はこれよりも複雑であり、ノードをページ (通常はディスク上のページと同じサイズ) に書き込むことによってディスク アクセスを最適化することを付け加えなければなりません。このようにして、1 回のディスク シーク操作 (コストのかかる操作と見なされます) で複数のノードを読み取ることができます。

于 2013-01-31T07:57:10.267 に答える