如何使用 sql 数据库中的列表有效地加载对象
How to efficiently load objects with lists from sql-databases
假设我有以下 class:
class Example {
List<ObjectA> objectsOfA;
List<ObjectB> objectsOfB;
List<ObjectC> objectsOfC;
....
}
我通常会有这些 table:
Example
(Id, other-attributes)
ObjectA
(部分属性,ExampleId)
ObjectB
(部分属性,ExampleId)
ObjectC
(部分属性,ExampleId)
如果我想恢复一个 Example
-object,我想我有两个选择:
- 将每个 table 连接在一起,产生大量条目并将其组织在哈希图中以重新组合对象
- 加载每个
Example
和每个示例,对 ObjectA
、ObjectB
、ObjectC
. 的列表进行单个请求
如果 Example
项的数量很少,选项 2 可能是最好的。但是对于 Example
中的每个条目,我需要再执行 x 个请求,其中 x 是 class.
中 table 的数量
否则,将所有内容都放在一个连接中需要我自己重新组织所有数据 - 创建散列图,遍历数据和其他东西,这通常是代码中的大量工作。
我还可以使用选项 2 进行延迟加载。
我还有其他选择吗?我错过了什么? (当然我知道 ORM,但我决定不在 Android 上使用它们)
如果我理解正确,你的问题是,从主 table 和相关的 table 加载数据时,哪种方法更好:
- 加载主要 table 和相关 tables
的 JOIN
- 分别加载主table和相关table的数据,并加入Java
- 其他
除非您的带宽非常受限,
我会说选项 1 很简单,我会接受它。
让数据库进行连接更容易,在 Java 中只需将记录映射到对象。
如果节省数据库带宽很重要,
那么选项2更好,
因为每条数据只会被取一次,不会重复,
因为选项中的 JOIN 的结果本质上是非规范化数据。
无论如何,我建议遵循Occam's razor:最简单的解决方案往往是最好的。
假设我有以下 class:
class Example {
List<ObjectA> objectsOfA;
List<ObjectB> objectsOfB;
List<ObjectC> objectsOfC;
....
}
我通常会有这些 table:
Example
(Id, other-attributes)ObjectA
(部分属性,ExampleId)ObjectB
(部分属性,ExampleId)ObjectC
(部分属性,ExampleId)
如果我想恢复一个 Example
-object,我想我有两个选择:
- 将每个 table 连接在一起,产生大量条目并将其组织在哈希图中以重新组合对象
- 加载每个
Example
和每个示例,对ObjectA
、ObjectB
、ObjectC
. 的列表进行单个请求
如果 Example
项的数量很少,选项 2 可能是最好的。但是对于 Example
中的每个条目,我需要再执行 x 个请求,其中 x 是 class.
否则,将所有内容都放在一个连接中需要我自己重新组织所有数据 - 创建散列图,遍历数据和其他东西,这通常是代码中的大量工作。
我还可以使用选项 2 进行延迟加载。
我还有其他选择吗?我错过了什么? (当然我知道 ORM,但我决定不在 Android 上使用它们)
如果我理解正确,你的问题是,从主 table 和相关的 table 加载数据时,哪种方法更好:
- 加载主要 table 和相关 tables 的 JOIN
- 分别加载主table和相关table的数据,并加入Java
- 其他
除非您的带宽非常受限, 我会说选项 1 很简单,我会接受它。 让数据库进行连接更容易,在 Java 中只需将记录映射到对象。
如果节省数据库带宽很重要, 那么选项2更好, 因为每条数据只会被取一次,不会重复, 因为选项中的 JOIN 的结果本质上是非规范化数据。
无论如何,我建议遵循Occam's razor:最简单的解决方案往往是最好的。