2009-12-24 58 views
0

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

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

我是否应该有一个域对象来表示具有自己的DAO的原始字节以执行CRUD并使用单独的JPA DAO来为元数据执行相同的操作?

如果是这种情况,元数据的域对象是否包含对被标记为瞬态的原始字节对象的引用,所以JPA不会尝试保留它?

我是否遵循过于复杂的设计,而不是在数据库中存储原始字节的好处?我使用PostgreSQL 8.x如果有所作为。

非常感谢。

回答

1

我真的不会这样做。你有没有衡量所期望的表现?你将如何保持数据库中的数据与文件系统上的数据之间的事务性。例如你是否要写入文件系统,写入数据库,如果失败,则回滚文件系统更改(这不像简单地删除文件那样容易 - 是否有以前版本的二进制数据?)。你如何管理数据库备份等,并保持一切同步?我强烈建议将所有数据保存在一个地方。

由于您正在谈论存储PDF等文件,因此您可能需要document management system

+0

感谢您的意见。是的,我打算将事务保存在事务中,如果发生异常,请删除文件并回滚数据库。你认为我应该将字节存储在数据库中吗? – Stephen 2009-12-24 17:31:29

+0

我会的。如果修改文档会发生什么情况。您必须回滚到以前的文件。我会将所有文档数据存储在数据库中(无论如何都是第一次)。您*可能*想要将元数据和二进制数据分离到不同的表中以实现可管理性或性能 - 这对于更熟悉数据库的人来说是一个不同的问题。 – 2009-12-24 17:36:01