我们有一个数据库,其中包含大约1500万条基于文本的记录(我们称之为父记录),每条记录的大小约为10 kb。父记录与其他对象(所有者、标签、公司)等有许多单向关系。这一点非常有效,因为当我们加载单个父记录时,不会无意中加载数据库的其余部分。
但是我们有个问题当相关记录(比如公司)更新了,这个变化并没有反映在上级的指标上,我阅读其他的问题,这是一个常见的问题,我们只需要添加一个双向的关系,我们已经做到了。例如,在公司上,我们现在与父记录有一个多对一的关系。这样做的问题是,如果我们延迟加载,我们会在尝试更新父节点列表时得到一个错误,因为它还没有被示例化;如果我们急切地加载,我们会加载数据库的很大一部分,这是非常缓慢的,并且容易发生内存不足异常。
我们应该如何构造它来避免这些问题。有没有其他方法来使用/ alternative来代替containedin注解?如果没有,我们如何在不影响性能的情况下保持双向关系?
1条答案
按热度按时间5ssjco0h1#
目前,最好的解决方案是保持单向关联,并禁用与
Company
实体关联的自动索引,当应用程序更改此类“引用”数据时,在某处设置一个标志,并计划在夜间重新索引受影响的实体,例如使用批量索引器或手动批处理。文档的这一部分是相关的。
在未来,有计划将异步索引引入到Hibernate搜索中,这样它就可以在没有你帮助的情况下执行这种“延迟的”重新索引。