gpt4 book ai didi

java - Hibernate 是否支持并发获取数据?

转载 作者:搜寻专家 更新时间:2023-11-01 03:20:23 26 4
gpt4 key购买 nike

我知道这是一个难题,因为它不仅取决于 hibernate,还取决于我们使用它的特定方式。我们在我们的应用程序中使用 hibernate 4,可能以错误的方式使用,但事实就是如此。

所以我们加载了整个类层次结构,在一个大语句中连接了子类表,并获得了我们将其转换为对象的 150K 行的顺序。

由于对象有很多字段要设置(~100),我们希望并行化遍历结果集并获取各个行的循环。这在 Hibernate 中可能吗? Hibernate 是否已经从 DB 接收到所有结果并可以使用数据来混合对象,因此我们可以使用多线程来加快获取大型结果集的速度?

这是否有意义,还是更改数据结构和映射以摆脱多表连接更好?

实际上,加载 150K 个这些对象需要一分钟或 0.3 毫秒/实体。我们有包含更多条目的更简单的表,我们以 0.02 毫秒/实体的速度更快地加载一个数量级。在初始化阶段之后,我们不会加载其他实体,整个数据库需要超过 5 分钟。

如果我们通过不向数据库公开类层次结构来移除连接并切换到基于组合的数据结构,我们可能会获得更简单的表加载而不是复杂的连接,代价是多个表加载而不是一个具有这些负载的连接合二为一。

但问题仍然存在:如果我们有这么多行要加载,因此在为每个对象填写字段时要调用许多 setter ,这可以并行完成吗?

最佳答案

不,Hibernate 中没有这样的东西。

但是,如果您提到的数据集彼此独立,则您可以在不同线程中同时加载不同 session (事务)中的每个数据集(每个数据集一个线程和一个 session )。然后从所有线程中获取结果。

这种方法的额外好处是您还可以并行执行数据集的查询。

关于java - Hibernate 是否支持并发获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32145071/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com