【问题标题】:Good design for persisting a JPA domain object持久化 JPA 域对象的良好设计
【发布时间】:2010-12-29 20:49:52
【问题描述】:

我有一个存储一些元数据和一些原始字节的域对象。这用于存储二进制对象,例如 PDF 文档和图像。

我想将元数据保存在数据库中,以便轻松查询,但出于性能原因,我想将原始字节存储在文件系统中。实现这一目标的好设计是什么?

我是否应该有一个表示原始字节的域对象,它有自己的 DAO 来执行 CRUD 和一个单独的 JPA DAO 来为元数据做同样的事情?

如果是这种情况,元数据的域对象是否会包含对标记为瞬态的原始字节对象的引用,因此 JPA 不会尝试持久化它?

我是否遵循了一个过于复杂的设计,而在数据库中存储原始字节却没有什么好处?如果有区别,我正在使用 PostgreSQL 8.x。

非常感谢。

【问题讨论】:

    标签: java database design-patterns postgresql jpa


    【解决方案1】:

    我真的不会这样做。您是否测量了假定的性能影响?您将如何维护数据库中的数据和文件系统中的数据之间的事务性。例如您是否要写入文件系统,写入数据库,如果失败则回滚您的文件系统更改(这不像简单地删除文件那么容易 - 您是否有以前版本的二进制数据?)。您如何管理数据库备份等并使所有内容保持同步?我强烈建议将所有数据保存在一个地方。

    既然您在谈论存储 PDF 等文件,也许您需要 document management system

    【讨论】:

    • 感谢您的 cmets。是的,我打算将保存包装在事务中,如果出现异常,请删除文件并回滚数据库。你认为我应该将字节存储在数据库中吗?
    • 我愿意。如果修改文档会发生什么。您必须回滚到以前的文件。我会将所有文档数据存储在数据库中(无论如何都是在第一个实例中)。您可能希望将元数据和二进制数据分离到不同的表中以提高可管理性或性能 - 这是一个不同的问题,对于更了解数据库的人来说也是一个问题。
    猜你喜欢
    • 2017-10-10
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多