2009-03-09 14 views
0

私がしたいのは、ディスクやドライブ(usb、main hddなど)をファイルとしてスキャンし、その情報をdbに保存することです。次に、DBを特定のファイルに検索して、格納先を探します。あるいは、私は何年も前のコピーがアーカイブの理由であるかを調べることができます。もし私が何かを捨ててしまった場合、それを元に戻す必要はありませんか、あるいは私が何回も意図的にバックアップしています。 。ここでこのデータベースを保存するより良い方法はありますか?

は、(これはhiddentをカバーして4バイト私は

OS + fsのフラグ(1バイト?) st_modeの(たとえないLinuxの中)(Windowsの場合でもない) win32_attrを2バイトを考えていますものですファイル、ロックなど) ファイルサイズ(64ビット) a/m/c時間、64ビット。 インデックス/ユニークキーをfileIDとして

自分のテーブル内の可変長の名前は、一致するfileIDで参照する必要がありますか?または私はdbの260の長さのファイル名を持っている必要がありますか、私はdbの可変長のファイル名を持つ必要がありますか?

次に、チェックサム/ハッシュテーブルのチェックサム(md5、sha1、sha512など、それぞれ1つのブロブ)に必要なXYZビットのブロブをfileIDで検索します。

私のハッシュテーブルはfileID(intはインデックスと同じ長さですか?)、hashType(int)、hashValue(varchar)を持つべきだと考えていました。

答えて

0

少なくともvarchar [1024]以上のファイルテーブルにvarcharとしてファイル名を入れます。ウィンドウには、ISO CD/DVDと同様に、一部のOSコンボの合計パス長に制限があります。あなたは、後で新しいハッシュの種類を追加し、すべてのファイルに対して、すべてのハッシュの種類をサポートしていませんことを可能にすることができ

Hash 
{ 
    fileId int, 
    hash_type int,   -- or enum 
    hash varchar[ 255 ], -- or largest hashtype 
    PK (fileId, hash_type), 
    index(fileID), 
} 

は次のように関連付けテーブルにハッシュを置きます。

+0

PKとは何ですか、インデックスとは何ですか?なぜ私はそれらを必要としますか? 私は自分の質問に念頭に置いていたハッシュテーブルを追加していますので、何が間違っているのかをよく説明できます。 –

+0

PK === fileIdとhash_typeの主キー、indexはfileIDの別のインデックスです。 – sfossen

+0

あなたはfileIdによってファイルテーブルにリンクします。 – sfossen