3

B+ツリーなどのファイルベースのデータ構造があるとします。私の理解では、データはディスクに保存されることが期待されていますが、インデックスは通常メモリにロードされます。インデックスでさえメモリに収まらないほど大きなファイルがある場合はどうなりますか?それは通常どのように処理されますか?次に、インデックスはデータの線形セットではなくツリーであるため、通常、ディスク上にどのように配置されますか?

私は基本的に、実際のプロジェクト(Berkeley DBなど)でどのように行われるのかについて興味があります。明らかに、私は幅広いストロークに興味があります。私はアイデアを得たいと思っているので、データベースブックのBツリーセクションを掘り下げるとき(または数年前のCS XYZから私の記憶をジョギングするとき)にいくつかのコンテキストがあります

4

3 に答える 3

2

Bツリーは、特定のノードがページに収まるページベースのシステムを対象としています。Bツリーでエントリを見つけるには、一度に1ページずつロードするだけでよいので、それを行うことができます。

それらを更新する場合でも、同時に多数のページをメモリに保存する必要はありません。最も難しい操作は、ノードが再編成されているときの削除だと思いますが、慎重に実装すれば、比較的少ないページで実行できます。メモリー。

于 2009-04-18T21:15:15.130 に答える
1

SQLiteをご覧になることをお勧めします。コードベースはBerkeleyDBよりもはるかに小さく、パブリックドメインであり、非常に明確に整理され、コメントが付けられており、ソース外のドキュメントは優れています。実世界のbtreeについてたくさん教えてくれました

于 2009-04-18T21:27:46.190 に答える
1

最初の質問に答えるために、メモリに収まらないほど大きいデータ構造は通常「ページ」に分割されます。通常、すべてのページは同じサイズであり、各ページにはデータ構造の一部が含まれており、ロードおよびアンロードするデータを使用します。ページ。

もう1つの一般的なオプション(RDBMSでは一般的に使用されませんが、XMLやメディアファイルなどで一般的です)はストリーミングです。このオプションでは、次のセクションをロードして前のセクションを破棄することにより、データを順番に処理します。

また、2番目の質問にも答えます。ファイル構造が同じサイズのページのシーケンスであるよりもページングを使用する場合、ストリーミングを使用する場合は、使用する順序でデータを配置する必要があります(ツリーの場合、アプリケーションに応じて、DFSまたはBFSのいずれかの順序になる可能性があります)。

于 2009-04-18T21:28:51.133 に答える