【问题标题】:Is there a better way to store this database?有没有更好的方法来存储这个数据库?
【发布时间】:2009-03-09 03:25:19
【问题描述】:

我想做的是扫描磁盘或驱动器(usb、主硬盘等)以查找文件并将其信息存储在数据库中。然后我会将数据库搜索到特定文件以找到它的存储位置。或者,我可以搜索出于存档原因的副本有多旧,或者如果我有某些东西的副本并且不需要重新存档,或者在我故意备份它多次并且我的一张光盘被划伤或驱动器损坏的情况下寻找副本.

这就是我的想法

os + fs 标志(1 个字节?) st_mode (即使不在 Linux 中) 2bytes win32_attr(即使不在 Windows 上)4 字节(这包括隐藏、目录与文件、锁定等) 文件大小(64 位) a/m/c 时间,64 位。 索引/唯一键作为文件ID

我是否应该在其自己的表中将名称作为可变长度,通过其匹配的文件 ID 查找?或者我应该在 db 中有一个 260 长度的文件名,还是应该在 db 中有一个可变长度的文件名?

然后,在由 fileID 查找的校验和/哈希表中,我的校验和(md5、sha1、sha512 等,每个一个 blob)需要 XYZ 位的 blob。

我在想我的哈希表应该有 fileID(与索引长度相同的 int?)、hashType (int)、hashValue(varchar)。

【问题讨论】:

    标签: database filesystems


    【解决方案1】:

    将文件名作为 varchar 放入文件表中,至少 varchar[1024],windows 在某些 OS 组合中对总路径长度有限制,类似于 ISO CD/DVD。

    将哈希值放入关联表中,例如:

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

    因此您可以稍后添加新的哈希类型,并且允许您不支持所有文件的所有哈希类型。

    【讨论】:

    • 什么是PK,什么是索引?为什么我需要它们?我正在将我想到的哈希表添加到我的问题中,以便您更好地解释它有什么问题。
    • PK === fileId和hash_type的主键,index是fileID上的另一个索引。
    • 您将通过 fileId 链接到文件表。
    • 你是说我链接到我的文件表中的哈希索引?
    • fileId是Hash中的外键,是Hash中复合主键的一部分。文件的主键是 fileId。
    猜你喜欢
    • 2021-08-22
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多