0

我们有两种保存文件的方法——数据库或文件系统。

所以我有 EJB,它可以从 servlet 和 java 应用程序连接。问题在于使用二进制文件。我在 这里发现它是 EJB(不适用于其他 JAVA EE 容器)向/从文件系统写入/读取文件的限制。他们说保留在数据库中。

好的。我说。但是这里这里的每个人都说这是一个非常糟糕的主意。我完全同意。

另一个解决方案是 Apache Jackrabbit 实现中的 JCR。但我认为这是两种方式。这里它说它也将文件保存在文件系统中。

那么最佳实践是什么?为什么我们不能在没有 JCR 的情况下将文件写入文件系统?

4

2 回答 2

2

您可以使用 JCA 连接器从 EJB 访问文件系统。因此,文件系统将是一个资源http://code.google.com/p/txfs/用于基本文件系统访问。XADisk 用于更完整和事务性的访问。Nuxeo 不再使用 JCR,并且在 Infinispan 之上还有 Modeshape(JBoss/RedHat 实现)作为数据网格。

于 2013-10-31T11:19:10.533 回答
1

将二进制文件保存在文件系统上对整体性能的影响最小,这是最合适的方法(管理大量二进制内容的应用程序,如 Alfresco 使用文件系统,这对他们来说很好用)。如果您需要从多个服务器访问您的文件,您可以将它们存储在单个服务器上并在网络上共享目录或仅使用NAS。但是,使用文件系统不是事务性的,但如果这很关键,您可以使用XADisk等支持文件系统级别事务的工具。

JCR 也是一个不错的方法,但它并不意味着只存储二进制文件,它意味着以分层方式存储“内容”(二进制数据 + 描述二进制数据的元数据)。但是,使用 JCR 您正在添加另一个抽象级别,这可能会对性能产生影响。由于最流行的 JCR 实现(如 Apache Jackrabbit、Alfresco 和 Nuxeo)在后台使用文件系统,如果您真的需要 JCR 提供的其他功能(如元数据、版本控制、缩略图、文档预览等)但会降低性能,您应该考虑一下和集成成本,或者如果它满足您的需求,您可以使用文件系统。

于 2013-10-31T06:34:53.133 回答