引文|
文件服务器在删除大文件夹时,往往会比较耗时。如果在原有线程中同步等待删除结果,那么会阻塞原有线程的运行;如果在其它线程中异步删除文件夹,则虽不阻塞原有线程的运行,但对于那些关注删除结果的用户,仍需等待异步操作结果,从而在用户的角度上,删除操作还是较为缓慢。
一、如何改善这种现状?
注意到文件服务器中的文件夹对于用户而言,只要用户不可见了,就在用户端达到了已被删除的效果。因此如果我们能够在确保服务器成功删除文件夹的前提下,首先隐藏对该文件夹的显示,然后立即响应用户的删除请求,最后再完成实际的删除操作,那么在用户眼中,服务器的删除速度就有了很大的提升。
二、改善思路
如前所述,我们可以在实际删除文件夹前,先对其进行重命名,并加入一个特定的待删标识(可以是一串既定的字符串),再在服务器端隐藏对含有该待删标识文件夹的显示。不同于实际的删除操作,文件夹的重命名是非常迅速的,因此在用户眼中,我们快速的删除了目标对象。
而后为了确保文件夹能够被正确删除,我们可以建立一个数据库,将重命名后文件夹的实际路径记录下来,随后在特定的线程中实际删除对象。
三、镭速文件传输系统的做法
镭速文件传输系统是一个基于自研的Raysync传输协议的文件系统,它亦在为用户提供一套安全、高效的文件传输及文件同步方案。在针对用户删除服务端大文件夹耗时的问题,镭速文件传输系统很好的将上述思想进行了实践,其做法如下:
1) 在接收到用户端的删除请求后,服务器端首先重命名目标文件夹,加上一串以.delete开头的特定字符串作为待删标识
2) 屏蔽用户端对含有待删标识的文件夹的显示
3) 响应用户端的删除请求
4) 将待删除文件夹的实际路径记录进专门的数据库中
5) 在专用线程中,定时读取数据库记录,完成对待删除文件夹的实际删除操作
6) 针对每个删除成功的文件夹,从数据库中删除对应记录;对于删除失败的文件夹,保留记录,等待下次删除
通过这种全异步的文件夹删除方式,镭速传输能够在确保服务器正确删除文件夹的前提下,快速响应用户的删除请求,做到既能不占用服务器的原有线程资源,又在用户角度实现文件夹被快速删除的效果。