Reseed-backend icon indicating copy to clipboard operation
Reseed-backend copied to clipboard

一些问题和建议 2

Open Rhilip opened this issue 4 years ago • 2 comments

  • [x] 1. Redis键值均没有设置过期时间 https://github.com/tongyifan/Reseed-backend/blob/master/utils/torrent_compare.py#L17 ,此项可能导致 如果新增同名种子(例如某些站的剧集分集种子均使用同一文件夹名),因为cache-hit,导致不能对比到新种子,此外也在Redis中放置了过多的key。
[db2] => Array
        (
            [keys] => 55020
            [expires] => 0
            [avg_ttl] => 0
        )
  • [ ] 2. 临时文件/文件夹(例如 $RECYCLE.BIN ._ 开头文件夹)被索引并进入对比环节,但需考虑到某些不规范种子可能确实存在这些目录(例如 .DS_Store),且部分站点并没有布置file-filter。对这些的处理还需要慎重考虑。
  • [ ] 3. 同1,在数据库未命中的情况下,还是会set一个空的string(实际是空array),造成redis空间浪费,是否可以考虑使用set或者使用过期策略(过期时间戳为scroe)的zset替代,伪代码如下
# compare_torrents
torrents_exist = redis.sismember()
if not torrents_exist:  # 未纪录
  torrents = redis.get()
    if not torrents:
      torrents = mysql.select()
      if not torrents:
        redis.sadd()
      else:
        ....

# after_request
redis.zrembyscore()
  • [x] 4. 已讨论 现有的 torrent_record表 能替代torrents表的sites_existed列,且现有实现( https://github.com/tongyifan/Reseed-backend/blob/master/utils/torrent_compare.py#L63 )还需对torrent_record列再次检查,过于繁琐。torrent_record表可以在redis中使用hash形式存储。
  • [x] 5. 已讨论 现有的history表记录信息过少,且无价值,建议加一列 uid 纪录用户id,将现有的tid列改成json格式的tids,这样每次用户上传json格式后,均只插入一行即可。
  • [ ] 6. 已讨论 将下载操作和种子解析入库操作剥离开,目前种子解析入库脚本我已经写好放在机器上。下载操作和入库剥离的原因是因为不将下载仅局限在脚本运行上,可以托管给ptboard或者go-rss、flexget等较为专业的rss软件,只要约定好种子文件暂存方式,解析脚本就可以放在crontab中定时运行,并如果不鸽的话,可以与tgbot相联系,往频道推送每日更新情况。
  • [ ] 7. 已讨论 torrents表 改成innodb,然后files列可以改成json类型。
  • [ ] 8. 增加recheck,使用crontab脚本定时少量检查某种子在站点时候存在,根据httpcode或content判定。(有些站点提供删种日志似乎也可以从中获得信息,或者增加用户report??
  • [ ] 9. 数据库外键关联
  • [x] 10. 对用户相近时上传相同json文件,后端程序会多次计算,考虑使用cache(计算json的MD5值对比结果并存入redis hash,对相同json快速返回)或者limit(1分钟内只能上传一次)。此外目前,所有上传json均会入库,导致history库膨胀较为厉害。
  • [x] 11. torrent_records 表加一列info_hash用来记录种子的info_hash情况,并修改爬取脚本以及补上现有库内种子infohash值情况

Rhilip avatar Sep 17 '19 03:09 Rhilip

  1. 可以考虑增加一个忽略列表,把常见的系统文件或目录排除掉。

ronggang avatar Sep 20 '19 15:09 ronggang

4 使用hash形式存储的话没法对单个tid做缓存过期,所以还是用普通的kv存了

tongyifan avatar Dec 04 '19 07:12 tongyifan