首页 > 解决方案 > 如何在大量数据上使用双向关系

问题描述

我们有一个数据库,其中包含大约 15m 条基于文本的记录(我们称它们为父记录),每个记录的大小约为 10kb。父对象与其他对象(所有者、标签、公司)等有许多单向关系。这很有效,因为当我们加载单个父对象时,我们不会无意中加载数据库的其余部分。

但是我们有一个问题,当相关记录(例如公司)更新时,此更改不会反映在父索引中。通过阅读其他问题,我发现这是一个常见问题,我们只需要添加一个双向关系,我们已经这样做了。例如,在公司中,我们现在与父记录建立了多对一关系。这样做的问题是,如果我们延迟加载,我们会在尝试更新父列表时收到错误,因为它还没有被实例化。如果我们急切地突然加载,我们会加载大部分数据库,这非常慢并且容易出现内存不足的异常。

我们应该如何构建它来避免这些问题。是否有另一种方法可以使用 / 替代 containsin 注释?如果不是,我们如何在不影响性能的情况下保持双向关系?

标签: hibernatehibernate-search

解决方案


目前最好的解决方案是保持关联单向并禁用与Company实体关联的自动索引。当您的应用程序更改此类“参考”数据时,在某处交换标志,并计划在一夜之间重新索引受影响的实体,例如使用质量索引器甚至手动批处理

文档的这一部分是相关的。

将来,有计划在 Hibernate Search 中引入异步索引,这样它就可以在没有您帮助的情况下执行这种“延迟”的重新索引。不过,我们还没有。


推荐阅读