我遇到了一个问题,需要帮助。
我正在设计一个简单的文件服务(Http),用户可以使用该服务上载/下载文件以及删除文件服务器中的文件。
文件服务会将文件存储在单个Linux计算机的父文件夹(例如/data/fileserver/
)下。上载的文件(例如xxx.mp4
)可以与/data/fileserver/demo/1/xxx.mp4
之类的计算机中的路径一起保存。
问题是: 如何避免此文件服务中的并发操作(保存/删除)?
例如
用户A正在上载文件xxx.mp4,文件服务正在使用路径/data/fileserver/demo/1/xxx.mp4
保存(尚未完成)。
同时,用户B调用此文件服务的delete api
以删除文件夹/data/fileserver/demo
。此删除操作将影响用户A的保存操作。
我希望在这种情况下,用户B的删除操作将失败。
该模型似乎锁定了树的分支,但我不知道该如何处理。
文件服务器基于Java语言。
谢谢。
答案 0 :(得分:0)
由于HTTP可能是异步的,所以我将使用一种设计模式方法。
例如,您可以实现一个单例,该单例在确定的路径上处理操作。
假设您不希望'fileserver'文件夹在完成任何类型的操作之前进行任何更改。
使用键作为文件夹名,并将值设置为true或false(表示是否操作)来实现地图
似乎是一个简单的解决方案。