问题标签 [batch-fetching]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
669 浏览

hibernate - 急切加载使用批量获取

是否可以强制 Hibernate 实现的 JPA 使用批量获取进行预加载?

您可能想知道我为什么要做这么奇怪的事情,所以让我解释一下。

我们有两个实体AB. A从to有一个多对一的关系B

我想通过A搜索加载实体,并且希望在它们从存储库返回之前完全加载它们。

但是由于 's 很多而A's 很少B,所有(相关的)B's 都将在二级缓存中。因此,我想避免B每次都从数据库中获取所有 's。

0 投票
2 回答
1424 浏览

jpa - eclipselink 嵌套批量获取

我建立了一个非常简单的模型,其中包含 3 个实体:

  • Department其中有多个(关系employees
  • Employee其中有多个(relaionship addresses
  • Address

我想批量获取EmployeeAddress从获取中获取Department,所以我有以下 JPL:

我添加了以下提示:

但是我经常收到以下错误:

如果我直接在关系上使用@BatchFetch注释@OneToMany,那么查询就完美了。

我怎样才能在不使用注释的情况下解决这个问题(因为注释会强制对我的所有查询进行批量查询)?

如果您需要更多信息或完整代码,我很乐意提供。

0 投票
0 回答
317 浏览

caching - eclipselink 和 coherence 缓存预热:孩子没有被初始化

我将 eclipselink 与 Coherence 分布式缓存和关系数据库(Toplink Grid - Grid cache configuration)一起使用。现在,我正在尝试尽可能高效地执行缓存预热,以减少未来与数据库的连接数量。

我有一个非常简单的数据模型:与子实体(MagicCard)具有单向一对多关系的父实体(Person)

为了执行缓存预热,我正在使用批量获取进行查询。这样,我避免了 N+1 数据库选择的执行。

在运行时转换为:

此搜索似乎正确地填充了两个实体的 Coherence 缓存。以下日志来自一个有 4 个人的示例(分别有 4、3、1 和 0 张卡片):

接下来,我尝试(使用 EntityManager)查找特定的人或特定的卡片

并且如预期的那样成功执行了缓存搜索:

然而,当我试图找到一个人的卡片时,eclipselink 需要执行一个额外的数据库选择(我想我会通过批处理来避免这些(?)):

我期待它从一致性缓存中获取卡片列表,而不是从数据库中获取卡片列表,因为我之前已经用每个人的卡片填充了前者。我可以让它按我的意愿工作的唯一方法是将@OneToMany FetchType 更改为EAGER,但我想避免这种更改,因为它会对我系统的另一部分产生负面影响。

批处理和加载提示不是应该初始化父对象中的子对象吗?还是我做错了什么?有没有其他/更好的方法来实现这一目标?

提前致谢

0 投票
1 回答
1850 浏览

java - hibernate.jdbc.fetch_size 和批量获取策略@BatchSize 的区别

对于 Hibernate 中的 N+1 查询问题,我添加@BatchSize(size=20)了集合和类级别。它运行得非常好,因为它每次获取 20 条记录。现在我发现有一个hibernate.jdbc.fetch_size配置选项,我认为它与@BatchSize注释相同。但是,当我在项目中配置它时,它对 N+1 查询问题没有影响。

我错了hibernate.jdbc.fetch_size吗?是hibernate.jdbc.fetch_size为了什么?

0 投票
0 回答
248 浏览

java - Hibernate 中的 NamedNativeQuery 生成许多选择语句?如何批量获取引用的实体?

我以为我了解hibernate的获取策略,但似乎我错了。

所以,我有一个 namedNativeQuery:

然后我称之为:

该查询返回数千个实体......好吧,好的,但在查询之后休眠查询数千个其他查询:

好的,这是逻辑,因为 @OneToOne 关系被急切地获取。我不想偷懒,所以我想要一个批量获取策略。

我试图注释 Article 属性,但它不起作用:

那么我该怎么做才能批量获取关系呢?

0 投票
1 回答
234 浏览

eclipselink - eclipselink 批量获取 IN 不适用于多租户

我正在使用 @Multitenant(SINGLE_TABLE) 来支持多租户。为了解决 n+1 问题,我使用了 eclipselink 的批量获取功能。

当我使用以下查询时:

sql和结果日志:

所有这些都完美无缺。但是当我启用多租户时:

当我使用以下查询时:

String boql = "SELECT e FROM TestEntity e order by e.id"; query.setFirstResult(1); // 用于分页 query.setMaxResults(3); // 用于分页

sql和结果日志:

为什么 TESTMULTITENANTENTITYLINE 连接到自身 t0/t1?这会产生许多重复的记录

我尝试获取记录 2、3、4,为什么它会获取 1、5、6?

能否请你帮忙?这是一个错误吗?还是我错过了什么?提前致谢。

0 投票
1 回答
29 浏览

ios - 接收带有查询和键范围的项目

这是简单的结构:

我的问题是如何只获取具有类别的项目: id7-id11 项目之间的运动?/autoid 键由 firebase 管理

0 投票
1 回答
337 浏览

swift - 使用异步显示套件 / cloudkit 批量获取

我正在尝试实现批量获取以与 cloudkit 和异步显示工具包集成。但是,当我尝试滚动时,出现此错误:

[NSOperationQueue addOperation:]:操作已完成,无法入队'

有什么想法会发生吗?谢谢!

这些是我的网络电话:

在我的 TableViewController 中:

0 投票
1 回答
40 浏览

angularjs - 在 Groovy 中编组有效负载非常慢

我目前正在开发一个 Angular/Groovy 应用程序,并且通过在后端(groovy)中编组有效负载而导致性能非常缓慢。它需要很长时间才能完成,将其发送到前端并渲染。

在后端我有:

marshalSteps 看起来像这样:

因为我们为每个请求发送不同的封送处理,所以 marshalMinimalStep 看起来像:

在前端,我使用 ng-repeat 来显示所有步骤。

我有大约 9.000 个步骤,需要大约 150,000 毫秒来执行该 getAll() 方法并在前端渲染这些步骤,这太慢了。

我可以做些什么来提高性能?

我是否必须在 Hibernate 中批量获取,例如 sessionFactory.currentSession.clear()?

我也将 marshalTranslation() 作为问题的一部分。

0 投票
1 回答
579 浏览

jpa - @BatchFetch 类型 JOIN

对于属于另一个实体类型的实体字段,我对此注释感到困惑:

在 EclipseLink for BatchFetch 的文档中,他们解释如下:

例如,考虑具有 EMPLOYEE 和 PHONE 表的对象,其中 PHONE 具有指向 EMPLOYEE 的外键。默认情况下,读取员工地址列表默认需要 n 次查询,针对每个员工的地址。通过批量提取,您可以对所有地址使用一个查询。

但我对指定的含义感到困惑BatchFetchType.JOIN。我的意思是,BatchFetch 在检索与员工关联的记录列表时不会加入吗?地址/电话类型的记录是使用外键检索的,所以它本身就是一个连接,对吧?
BatchFetch 类型是一个可选参数,对于 join 来说:

JOIN – 原始查询的选择条件与批处理查询连接

这是什么意思?批量查询不是连接本身吗?