我正在进行性能测试/优化一个映射项目。
a document <--> Java object tree <--> mysql database
HyperJaxb3被用来协调文档、Java类、数据库模式和映射逻辑。ORM部分使用了Hibernate提供的JPA。
这个应用大约有50种不同类型的实体,它们之间有很多关系。应用程序的一个重要功能是加载文档,然后将数据重新组织成新文档;每个传入文档的所有部分最终都会在一个传出文档中发送出去。虽然我更喜欢不生活在关系世界中,但事务语义非常适合这个应用程序 - 涉及大笔资金和政府监管,因此我们需要确保每件事情都只能交付一次。
从功能上讲,一切都很顺利,性能也还可以(进行了相当程度的调整后)。每个文档由几千个实体组成,最终在数据库中创建了几千行。文档的大小各不相同,插入性能基本上与需要插入的行数成比例(毫不意外)。
我看到了一个重要的优化潜力,这就是我的问题所在。
每个文档都映射到实体树。树的“叶子”部分包含许多详细信息,这些信息对于生成传出文档的决策并不重要。换句话说,我不需要能够查询/过滤许多表的内容。
我想将适当的实体子树映射到二进制大对象(BLOB)中,从而节省我当前处理方式中的大部分行插入/更新/索引的开销。
看起来我的最佳选择是实现一个自定义的EntityPersister并将其与适当的实体相关联。这是正确的方法吗?Hibernate文档并不坏,但它是一个相当复杂的类,需要实现,看了javadoc后我还有很多问题。你能给我指出一个具体但简单的例子,作为起点吗?
对于另一种方法来解决这个优化问题,你有什么想法吗?