如何有效地加载数百万个域对象



我遇到了问题,因为我在一个表中有数百万个域对象。当我尝试在几分钟后使用 Domain.findAllBy() 获取所有对象时,我得到 OutOfMemoryError。我想知道是否有一种有效的方法来加载所有这些而不会再次出现此错误?

我应该分页结果并只加载必需品吗?

请告诉我我是否也做错了..

感谢您的帮助,新年快乐;)

真正的解决方案不是尝试一次性检索所有域对象到内存中。无论您购买多少内存,都无法保证域对象的增长速度不会超过RAM。

接下来,即使您可以将所有对象存储在内存中,检索所有对象也需要花费大量时间。要对对象执行的任何操作(修改属性、调用方法)都需要更长的时间。

我无法想象人类用户希望在网页上看到数百万个业务对象的场景 - 即使分页浏览它们也没有意义。

因此,如果要检索对象以修改它们,请在数据库中执行此操作。如果要检索它们以在业务对象上运行方法,请使用分页,或者考虑是否可以将该方法实现为数据库调用。如果要检索它们进行显示,则需要允许用户筛选其请求并提供分页。

最新更新