表示文件系统的可编辑校验和索引的最佳方法是什么?



给定任何文件,我想识别具有相同校验和的重复文件。我只想将重复项的文本列表打印到我的终端,因此运行完整的桌面搜索索引器绝对是矫枉过正。

要做我想做的事情,我需要关联地存储两条信息:

  1. "[此文件] 对任何文件都有<<em>XYZ 校验和>"

  2. "[这里是所有文件] 用于<<em>XYZ 校验和>",用于任何校验和

问题是我需要数据库是可编辑的,以便当我移动数据并通知管理数据库的脚本时,它可以跟上更改。我想到了两种方法。

一种是使用基于偏移量的平面文件索引,但我需要实现一个碎片方案,以便我可以在数据移动时使用新文件扩展目录表示形式,而不必不断地向前和向后位移整个文件以适应数据重组。
虽然对我来说并非不可能做到,但这对我来说足够重要,以至于我会担心数据库的一致性和完整性,并且由于我将决定是否从这些信息后面删除数据,因此在我决定使用它之前,我会玩一段时间这样的实现。

我没有使用传统数据库的经验,但我想象SQL可能比自己实现整个存储框架更容易实现我想要做的事情。如果这是一个选择,那么哪里会是一个好的起点?我初步推测我可以创建两个表:第一个将列出第一列(主)列中的每个校验和,以及该校验和在第二列中匹配的每个文件的 NUL 分隔字符串;第二个表将在第一列/主列中列出文件的完整路径,在第二列中列出其校验和。更新此系统需要我简单地修改两个表中的列,并且比上面建议的方法简单/容易得多。

您需要

一个包含 2 列的数据库表:FileChecSum 。 文件(显示为完整路径)本质上是UNIQUE的,可以用作UNIQUE INDEX。 您可能仍希望添加ID字段(整数代码)作为PRIMARY KEY,特别是如果您想将movingrenaming视为单个操作,而不是将其拆分为delete后跟create

在MySQL(用作示例)中,您将拥有类似以下内容(不带ID列):

DDL 和 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
    ('dir1file1', 56789),
    ('dir2file2', 77777),
    ('dir3dir4file9', 56789),
    ('dirAfile1', 12345)
;

DOL

-- All files
SELECT * 
FROM Files;
-- All files with checksum = 56789
SELECT * 
FROM Files
WHERE checksum = 56789;
-- File name 'dirAfile1'
SELECT *
FROM Files 
WHERE file = 'dirAfile1';

SQL 摆弄上述内容

相关内容

最新更新