0

学習課題として、単純な組み込みデータベースを C# で作成しようとしています。すべて順調に進んでいますが、データをディスクに保存するときに行き詰まります。

私の問題の 1 つの例として..データ ファイルの途中にデータを「挿入」する必要がある場合があります。これは、シーケンシャル ファイル アクセスでは明らかに不可能です。挿入があるたびにファイルの後半全体を再書き込みすることは、明らかなパフォーマンス上の理由からオプションではありません。

私が想像できる唯一の解決策は、各テーブルに続いてファイル内の空白スペースを書き込むことです。空のスペースは新しいデータを書き込むために使用され、テーブルが使用可能なスペースを使い果たすたびに、ファイルを再構築/拡張する必要があります。

私の質問は..典型的なDBのデータファイル内のデータは「どのように見える」のですか? 新しいデータはファイルのどこにどのように書き込まれますか?

4

2 に答える 2

2

通常、データベースはBツリーを使用して、データ(キーは行の主キーになり、値は行のコンテンツになります)とインデックスの両方を格納します。このようにして、時間内に任意の場所に行を挿入できますO(log n)

たとえば、 SQLiteデータベースのファイル形式を参照してください。SQLiteがBツリーを使用する方法について説明しています。この場合、内部ノードはポインターのみを格納し、リーフノードはデータのみを格納します。

http://en.wikipedia.org/wiki/B-tree#Insertions_and_deletions_cause_troubleも参照してください。これは、発生している問題に対処しているようです。

于 2011-09-03T17:57:23.920 に答える