bitmagnet磁力爬虫数据库结构与优化总结
摘要:本文详细分析了bitmagnet磁力爬虫中torrent_files和torrent_contents表的作用及磁盘占用原因,介绍了如何显示info_hash、过滤数据、获取种子名和文件列表,以及tsv字段的用途与清空影响。
1. 表结构与作用
1.1 torrent_files
存储每个.torrent文件中的文件列表信息,如文件路径、大小、索引等。典型字段包括:
- info_hash(关联到具体的 torrent)
- index(文件在 torrent 中的索引)
- path(文件路径)
- size(文件大小)
- extension(文件扩展名)
1.2 torrent_contents
将.torrent内容与媒体内容关联,提供语义信息并支持搜索功能。典型字段包括:
- info_hash(关联到具体的 torrent)
- content_type, content_source, content_id(关联到媒体内容)
- languages, episodes(多语言或剧集信息)
- video_resolution, video_codec, release_group(视频元数据)
- seeders, leechers, size(种子统计信息)
- tsv(用于全文搜索的向量字段)
2. 磁盘占用原因
2.1 数据量大
每个.torrent文件可能包含大量文件条目,导致torrent_files膨胀;torrent_contents因匹配影视内容而变得庞大。
2.2 字段冗余与索引
torrent_files的path字段为长文本,容易造成存储浪费;torrent_contents使用tsvector全文索引,增加存储开销;JSON类型字段不如关系型字段压缩率高。
2.3 DHT网络特点影响
DHT网络去中心化,节点频繁交换info_hash,导致这两个表持续增长。未设置清理策略会导致历史数据堆积。
3. 清空表的影响
3.1 torrent_files
清空后不影响核心爬虫逻辑,但前端无法展示文件结构,无法根据文件路径判断资源类型。
3.2 torrent_contents
清空后无法将torrent与具体影视内容关联,搜索功能失效,排序筛选功能(如按清晰度、语言)失效。
4. 查询与操作技巧
4.1 显示info_hash为十六进制字符串
SELECT encode(info_hash, 'hex') AS info_hash_hex FROM torrent_files;
4.2 过滤特定info_hash
SELECT * FROM torrent_files WHERE encode(info_hash, 'hex') = 'da7e0de99886a69953ae32bd5e273efd4319babf';
4.3 删除size小于100M的数据
DELETE FROM torrents WHERE size < 100 * 1024 * 1024;
4.4 获取种子名和文件列表
SELECT t.name, tf.path FROM torrents t JOIN torrent_files tf ON t.info_hash = tf.info_hash;
5. tsv字段详解
5.1 tsv字段是什么?
tsv是PostgreSQL的tsvector类型字段,用于全文检索,存储经过分词、标准化处理后的词位集合。
5.2 tsv字段的作用
支持高效地执行自然语言查询,如搜索“matrix & 1080p”,并用于高级筛选功能。
5.3 清空tsv字段的影响
清空后搜索功能失效,高级筛选变慢,但原始数据仍完整。可恢复性取决于原始字段是否保留。
6. 总结建议
6.1 磁盘优化
- 定期归档旧数据
- 对torrent_files进行分区
- 压缩JSON字段或使用更紧凑格式
- 删除冗余字段
6.2 是否能清空
- torrent_files可清空,不影响核心爬虫
- torrent_contents不建议清空,除非有其他方式重建内容映射
6.3 DHT网络优化
- 设置info_hash缓存机制
- 使用Bloom Filter过滤已处理过的info_hash