我有一个ftp存储库,目前有2761个文件(PDF文件)。 我有一个MySQL表(这些文件的列表)实际上是29k +文件(自最近的升级以来它没有被解析)。 我想为管理员提供一键式脚本,该脚本将执行以下操作:
这通常由AppleScript / FolderAction / Perl脚本方法处理,但它并不完美(有时在一次添加大量文件时会窒息 - 就像在重大新闻之夜一样)。
从FTP存储库构建文件列表大约需要10-20秒(使用$file_list = ftp_nlist($conn_id,$target_dir) )
,我不确定如何最好地与数据库表进行比较(我很肯定是WHERE NOT IN (big_fat_list)
将成为一个噩梦般的查询。
有什么建议吗?
答案 0 :(得分:1)
将文件名列表加载到另一个表中,然后执行几个满足您要求的查询。
答案 1 :(得分:0)
你必须检查mysql站点中的最大值列表。
答案 2 :(得分:0)
我通常将带有日期和文件大小的递归目录列表转储到临时表中。然后我删除未找到的项目:
delete
from A
where not exists (
select null as nothing
from temp b
where a.key = b.key )
然后我更新已存在的项目(对于文件大小,CRC):
update a set nonkeyfield1 = b.nonkeyfield1, nonkeyfield2 = b.nonkeyfield2
from a join temp b on a.key = b.key
然后我添加了找到的项目:
insert into A ( field, list)
select field, list
from temp b
where not exists (
select null as nothing
from A
where b.key = a.key )
这是来自记忆,所以在飞行前先测试一下。选择null as as会阻止你在检查时浪费RAM。