0

在基于 PHP 的网站上,用户将授予 Dropbox 应用程序使用其 Dropbox 文件夹的权限,然后用户将数千个文本文件放入此文件夹中,可能一次,可能连续,我需要处理,保存到数据库并显示如果用户登录到网站,则尽快获得结果(我想几乎实时处理和输出)。用最少的资源做到这一点的最佳技术是什么?首先,我需要为 30 人做这件事,但后来它必须立即与数百个用户一起工作。每个用户将拥有数千个文件,有些文件需要处理不止一次(它们正在增加),而其他文件则不需要。

我坚持我在无限循环中运行命令行 php 脚本,该脚本从 Dropbox 复制并定期为每个用户处理文件,但它似乎太慢了。对 Dropbox 服务器的 API 调用似乎很慢,因此连续调用可能不是最佳选择。
更好的方法可能是用户单击网站上的“导入”按钮,脚本仅获取当前单击该按钮的用户的文件。
你有什么建议?它不一定是 PHP。我有一个专门的服务器,但我也想听听托管友好的解决方案。

也许为我提供另一种简单、安全和快速的方法,将这些文件作为 Dropbox 方法获取到服务器。(我选择这样做,因为 Dropbox 对用户来说非常容易设置、使用,同步非常可靠、安全和快速。)

4

1 回答 1

1

如果你安装了 GNU Parallel http://www.gnu.org/software/parallel/你可以让它继续运行:

inotifywait -q -m -r -e MOVED_TO -e CLOSE_WRITE --format %w%f Dropbox_dir | parallel -u your_program

每次上传到 Dropbox_dir 下的任何目录时,your_program都会在该文件上运行。parallel将确保每个 CPU 核心只运行 1 个作业,因此如果用户一次性上传 10000 个文件,您的服务器不会过载。

对于每个用户,您只需执行以下操作:

mkdir Dropbox_dir/user_folder

并等待 Dropbox 将文件放在那里。

由于 Dropbox 正在使用.dropbox.cache.dropbox它可能需要忽略其路径中的文件:

inotifywait ... | grep -v /.dropbox | parallel ...

这也适用于其他文件传输方法(FTP/Samba/Rsync/scp 可能还有更多)。

您可以通过以下方式安装 GNU Parallel:

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

观看 GNU Parallel 的介绍视频以了解更多信息: https ://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

于 2012-06-02T18:32:51.710 回答