現在、埋め込み可能なデータベース (C++、Win32) を探していて、SQLite が非常に魅力的であることがわかりました。ただし、ファイル パスをファイル プロパティと共に SQL データベースに保存することに意味があるのかどうかさえ疑問に思っています。ファイルの数は、サーバー システム上で数百または数千から数百万または数十億に及ぶ可能性があります。これは、ディスクの内容を探索するソフトウェア用です (ただし、ファイル自体の内容ではありません)。
私が考えていたのは、完全なディレクトリ部分を格納するテーブルと、ファイルのプロパティ (名前を含む) を格納する別のテーブルです。後者には、「親」フォルダーへの後方参照が含まれます。
私が検討していることの 1 つは、ディレクトリ テーブルに各ディレクトリのフル パスを格納する必要があるかどうかです。これにより、次のような冗長な情報が格納されることになります。
ID | Name
0 | C:
1 | C:\Windows
2 | C:\Windows\System32
3 | C:\Windows\System32\config
それ以外の:
ID | Name | Parent
0 | C: | NULL
1 | Windows | 0
2 | System32 | 1
3 | config | 2
もちろん、ある種のプルーニングまたは参照カウントがない限り、ストレージ/メモリの節約について「貪欲」になり、各文字列(各パスコンポーネント)の単一のインスタンスを保存することはできません...
どちらが優れていると思いますか?その理由は? 2 番目の方法では、パフォーマンスが低下しませんか?
また、 FLOSSであり、同様のもの (プロパティと共に階層パス名を格納する) を実装しているプロジェクトはありますか?
私が考えているスキーマでは、ファイルC:\Windows\System32\config\SOFTWARE
は次のように表されます。
ID | Name | Folder | Size | Attributes | ...
42 | SYSTEM | 3 | 1024000 | 0x00000301 | ...