在webapp中并发访问文件的最佳解决方案

时间:2013-04-02 00:22:45

标签: java guava

我正在编写一个webapp(SpringMVC + JSF),允许用户上传他们的文件并与其他人一起编辑/分享。在这个应用程序的服务层,我使用guava来处理所有文件IO,但不幸的是,从参考手册中到目前为止我看到的,guava没有解决并发访问文件的问题。

我知道Java提供的FileChannel类有一个锁定方法可以在某种程度上解决这个问题,但它不适合guava IO框架。在我摆脱guava并使用FileChannel和InputStream重写我的代码之前,我想知道是否有其他方法可以在不完全切换到另一个IO包的情况下执行此操作。

(一个大的哈希表将文件名映射到锁对我来说看起来不是一个好的解决方案。当用户群很大时,存储在内存中的太多了。)

1 个答案:

答案 0 :(得分:3)

使用数据库。文件系统非常适合存储实际的文件内容 - 但是对于存储和放置文件系统来说也是如此。管理用户,文件详细信息,共享和编辑&版本历史等,绝对需要数据库。

为避免上传失败导致信息丢失,请上传&编辑(例如)需要转到一个新文件 - 不要覆盖现有文件,也可能将其删除。

编辑&共享也可能是一个实体(可能是'DOCUMENT'表中的一行),它可能有连续的版本(磁盘上的实际文件)。

因此,至少有两个原因,'文件系统文件'与您需要跟踪的实体不同。您的用户希望与之合作。

如果你假设的用户群 变得越来越大,他们可能会期待一个真正的应用程序。拥有可靠的数据库,记录用户访问权限,文档版本,共享和位置&锁定磁盘上底层文件的状态,很简单&可靠。

没有这样的数据库,就不可能做到可靠。