1

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

我知道Java提供的FileChannel类有一个lock方法在一定程度上解决了这个问题,但是它与guava IO框架不太适合。在我摆脱 guava 并使用 FileChannel 和 InputStream 重写我的代码之前,我想知道是否有任何其他方法可以做到这一点,而无需完全切换到另一个 IO 包。

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

4

1 回答 1

3

使用数据库。文件系统非常适合存储实际文件内容——但对于存储和管理用户、文件详细信息、共享以及编辑和版本历史等,数据库是绝对需要的。

为了避免上传失败导致信息丢失,上传和编辑(例如)需要转到一个新文件——不要覆盖现有文件,并且可能会丢弃它。

编辑和共享也可能是针对可能具有连续版本(磁盘上的实际文件)的实体(可能是“文档”表中的一行)。

因此,至少出于两个原因,“文件系统文件”不同于您需要跟踪的实体以及您的用户希望使用的实体。

如果您假定的用户群确实变大了,他们可能会期待一个真正的应用程序。凭借可靠的数据库,记录用户访问、文档版本、共享以及磁盘上基础文件的位置和锁定状态,变得简单而可靠。

没有这样的数据库,就不可能可靠地工作。

于 2013-04-02T00:55:29.730 回答