【发布时间】:2016-11-08 10:10:41
【问题描述】:
我有一个用 ORMlite 映射的数据库表,它包含一些数据(18 列),还包含ForeignCollectionField(eager = true)。
问题是从这个表中加载所有数据时...... ORMlite 正在为每个项目创建查询,而不是使用连接。这会导致 67124 次查询,并且需要永远加载该表中的所有对象。
这可以在几秒钟内在右连接查询中完成吗?为什么要生成数千个查询?
如何加快速度?我是否必须编写原始查询然后 RawRowMapper ,这使得使用 ORM 毫无意义..
如何处理在 ormlite 中加载急切的集合?因为queryForAll不是办法..
【问题讨论】:
-
为什么要加载所有数据以及如何加载? ORM 不适用于报告或 ETL,这是“加载所有数据”的唯一正当理由。为此使用存储过程或视图。您描述的是
N+1问题,应该通过使用急切加载来解决。您如何进行查询以及如何定义映射? -
PS ORM 真的,真的 不适用于报告或 ETL。这只是学术讨论。当您不打算对它们应用任何域逻辑时,将行和值转换为对象不会获得任何收益。
-
在这种情况下,我需要加载所有数据,这些数据稍后将全部显示在3D图形中并用于模拟......这背后有很大的领域逻辑。这个表有更多的列,整个数据库有更多的表..但是这次我需要加载所有并且它很慢..无论如何即使不会有大的域逻辑并且你在开始时加载所有数据,数据库仍然是个好方法保存这些数据,因为它的列可以在运行时更新,而不是重写整个 xml 文件..
标签: java performance sqlite ormlite foreign-collection