使用SHA256哈希算法对文档进行去重:在Python中,先读取文件内容计算哈希值,存入集合set中,重复哈希的文件直接删除。代码示例:import hashlib; def get_hash(file_path): with open(file_path, 'rb') as f: return hashlib.sha256(f.read()).hexdigest(); hashes = set(); for file in files: h = get_hash(file); if h in hashes: os.remove(file); else: hashes.add(h)。数据库定期清理:删除重复行SQL语句DELETE FROM table WHERE id NOT IN (SELECT MIN(id) FROM table GROUP BY column1, column2)。
方法一:哈希去重法
对文档内容计算MD5或SHA1哈希值作为唯一标识,相同哈希的文件视为重复。将哈希值存入数据库或Redis,查询时直接比对,避免全文本比较。适用于海量文档,速度快,误判率低。
数据库优化技巧
建立唯一索引:ALTER TABLE docs ADD UNIQUE INDEX idx_hash (hash_value); 插入前查重:INSERT IGNORE INTO docs (hash_value, content) VALUES (?, ?); 定期归档旧数据到冷存储,保持主库整洁。使用分区表,按时间分区自动清理过期数据。
高效去重工具
使用fdupes命令行工具:fdupes -r -d /path/to/docs,自动删除重复文件。Python库duplicates:pip install dupes; dupes.remove_duplicates(directory)。数据库用EXISTS子查询:IF NOT EXISTS (SELECT 1 FROM docs WHERE hash=? ) THEN INSERT。
数据清理最佳实践
1. 分类去重:按文件类型分别处理文本、图片。2. 模糊去重:用Levenshtein距离处理相似文档。3. 定时任务:cron job每周运行去重脚本。4. 备份前清理:避免备份重复数据浪费空间。
SQL批量去重
创建临时表存唯一记录:CREATE TEMPORARY TABLE temp AS SELECT DISTINCT * FROM docs; TRUNCATE TABLE docs; INSERT INTO docs SELECT * FROM temp; DROP TEMPORARY TABLE temp; 这能瞬间清理百万级重复行。
内存优化管理
大数据集分批处理:while循环,每次读1000条记录去重,避免内存溢出。使用InnoDB引擎,开启事务批量提交。监控查询:EXPLAIN SELECT * FROM docs WHERE hash IN (...);
自动化脚本示例
#!/bin/bash; find /docs -type f -exec md5sum {} + | sort | uniq -d -w32 | xargs rm -f; 这行命令一键删除所有重复文件。
FAQ
Q: 去重会丢失数据吗?
A: 使用哈希法精确匹配,不会误删不同文件;先备份再操作。
Q: 数据库去重影响性能吗?
A: 加索引后很快,定期运行不影响在线服务。
Q: 怎么处理相似但不完全相同的文档?
A: 用diff库或TF-IDF相似度计算,阈值设0.95。
Q: 推荐什么工具给Windows用户?
A: Duplicate Cleaner软件或Python脚本跨平台通用。