鉴于任何文件,我想识别具有相同校验和的重复文件。我只是想将重复项的文本列表打印到我的终端,因此运行完整的桌面搜索索引器绝对有点过分。
为了做我想做的事,我需要以关联方式存储两条信息:
" [此文件]具有< XYZ 校验和>",对于任何文件
" [以下是所有文件]< XYZ 校验和>",任何校验和
< / LI> 醇>问题在于我需要数据库是可编辑的,这样当我移动数据时 - 并通知管理数据库的脚本 - 它可以跟上变化。我有两种方法可以做到这一点。
一种方法是使用基于偏移量的flatfile索引,但我需要实现一个碎片方案,这样我可以在数据移动时用新文件扩展目录表示,而不必经常向前和向后移位整个文件适应数据重组 虽然我不是不可能做到这一点,但这对于我对数据库的一致性和完整性感到担忧是非常重要的,因为我决定是否从这些信息的背面删除数据我就是这样做的。在我决定使用它之前,暂时玩这样的实现。
我没有使用传统数据库的经验,但是我想象SQL可能比我自己实现整个存储框架更容易实现我想要做的事情。如果这是一个选项,哪里是一个好的起点?我暂时推断我可以创建两个表:第一个列出第一个(主)列中的每个校验和,以及第二列中该校验和匹配的每个文件的NUL分隔字符串;第二个表将列出第一个/主要列中文件的完整路径,以及第二个表中的校验和。对这个系统的更新需要我简单地修改两个表中的列,并且比上面建议的方法更简单/更容易。
答案 0 :(得分:1)
您需要一个包含2列的数据库表:File
和ChecSum
。文件(显示为完整路径)本质上为UNIQUE
,可用作UNIQUE INDEX
。您可能仍希望将ID
字段(整数代码)添加为PRIMARY KEY
,特别是如果您要将moving
或renaming
视为单个操作而不是将其拆分为delete
后跟create
。
在MySQL(用作示例)中,您将有类似的内容(没有ID
列):
<强> DDL and DML 强>:
CREATE TABLE Files
(`File` varchar(16), `CheckSum` int)
;
ALTER TABLE Files ADD UNIQUE INDEX (File), ADD INDEX (CheckSum);
INSERT INTO Files
(`File`, `CheckSum`)
VALUES
('\dir1\file1', 56789),
('\dir2\file2', 77777),
('\dir3\dir4\file9', 56789),
('\dirA\file1', 12345)
;
<强> DOL 强>:
-- All files
SELECT *
FROM Files;
-- All files with checksum = 56789
SELECT *
FROM Files
WHERE checksum = 56789;
-- File name '\dirA\file1'
SELECT *
FROM Files
WHERE file = '\dirA\file1';