问题标签 [eager-loading]

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 投票
2 回答
831 浏览

ruby-on-rails - Rails:如何在此处最小化 DB 命中?急切加载不适用

这个问题可能有点具体,但我认为从一般 pov 来看也很有趣。

在 Rails App 中,用户可以订阅其他用户。当我显示用户列表时,我必须检查当前用户是否订阅了列表中的用户。如果他订阅了,我会显示取消订阅按钮,反之亦然。

因为整个事情取决于当前用户,所以我不能使用急切加载。因此,当我在列表中显示 20 个用户时,我在 DB 上生成了 20 个额外的命中,这在我看来是不好的做法。

我正在考虑解决这个问题的好方法。到目前为止,我想出的最佳解决方案是在登录期间加载 current_user 在会话中订阅的用户的 id,然后检查每个 user.id 与会话中的 id。但是,当用户订阅了很多人时,这可能会导致其他问题。此外,我不确定这是否是加载所有订阅的最佳方式,即使用户在此会话期间可能永远不会查看用户列表。

我想到的下一个最好的事情是做同样的事情,但不是在登录期间,而是在加载用户列表时。

你怎么看?

0 投票
2 回答
1124 浏览

ruby-on-rails - Rails 急切加载,可能的错误

在我的 Rails 2.3.2 应用程序中

我有 2 个模型:

出于某种原因,当我尝试急切加载我的评论时,我收到了一个错误

来自 Association_preload.rb 第 228 行

这是一个已知问题,还是我做错了什么或不受支持?

我似乎在以下位置找到了一些关于此的讨论:http ://groups.google.com/group/maine-ruby-users-group/browse_thread/thread/796cf58b62f9bc52

0 投票
1 回答
666 浏览

php - 渴望加载与使用 PHP、SQLite 的许多查询

我有一个有 n+1 查询问题的应用程序,但是当我实现一种急切加载数据的方法时,我发现绝对没有性能提升。我确实使用身份映射,所以对象只创​​建一次。

这是约 3000 个对象的基准。

这是我使用急切加载时的一个。

所以我的问题是

  1. 当涉及到小查询时,SQLite 是否神奇地快如闪电?(我习惯于使用 MySQL。)
  2. 这对任何人来说都是错误的吗?急切加载不应该提供更好的性能吗?
0 投票
4 回答
940 浏览

java - 为什么在 Struts 1.2.7 中延迟实例化 MessageResourcesFactory?

由于存在双重检查锁定问题,因此我们必须使用同步来保证对以下方法(org.apache.struts.util.MessageResources 类)的并发访问:

惰性实例化

为什么不使用:

渴望实例化

进而:

它将允许对方法 getMessageResources 的并发访问,至少在我的情况下,它可能会被调用很多次。

不使用同步的含义在这里:

http://en.wikipedia.org/wiki/Double-checked_locking

0 投票
3 回答
5560 浏览

c# - 在自引用表中急切加载 Linq 到 SQL 实体

我有 2 个相关的 Linq to SQL 问题。请看下图,看看我的模型是什么样子的。

问题 1

我想弄清楚如何在我的 类/表上急切地加载该User.AddedByUser字段。User该字段是根据User.AddedByUserId字段上的关系生成的。该表是自引用的,我试图弄清楚如何让 Linq to SQLUser.AddedByUser急切地加载属性,即,每当User加载/获取任何实体时,它还必须获取 User.AddedByUser 和 User.ChangedByUser。但是,我知道这可能会成为一个递归问题......

更新 1.1:

我尝试按如下方式使用 DataLoadOptions:

但这不起作用,我在第 2 行得到以下异常:

例外是不言自明的——对象图不允许是循环的。另外,假设第 2 行没有抛出异常,我很确定第 3 行会,因为它们是重复的键。

更新 1.2

以下内容也不起作用(不与上面的更新 1.1结合使用):

它抛出以下不言自明的异常:

我现在真的不知道如何解决这个问题。请帮忙!

问题2

在我的数据库中的每个其他表上,因此 Linq to SQL 模型,我有两个字段,Entity.ChangedByUser(链接到Entity.ChangedByUserId外键/关系)和Entity.AddedByUser(链接到Entity.AddedByUserId外键/关系)

如何让 Linq to SQL 急切地为我加载这些字段?我需要对我的查询进行简单的连接吗?还是有其他方法?

Linq to SQL 急切加载自引用表 http://img245.imageshack.us/img245/5631/linqtosql.jpg

0 投票
1 回答
795 浏览

ruby - Datamapper中多对多关系的战略渴望加载?

我正在使用DataMapper,一个用于 ruby​​ 的开源 ORM,我很想从头开始。目前,DataMapper 可以将战略渴望加载(SEL)用于一对多关系,但不能使用 N+1 查询发生的多对多关系。我想设法使这项工作正常工作,但我找不到在哪里做。所以两部分问题:

  1. 如何运行测试套件以使其显示失败(注意,现在所有应该失败的规范都标记为待处理)?
  2. SEL 在哪里以及如何为一对多关系实施?
0 投票
1 回答
2116 浏览

c# - 在 NHibernate 中急切地加载子集合和子集合

我遇到了 NHibernate 试图加载一个小的数据层次结构的问题。我的域模型如下所示:

我想为给定的 GrandParent 加载所有父母和孩子。此 Linq-to-NH 查询创建正确的 SQL 并按预期加载 GrandParent:(该示例假设祖父母有 2 个父母,每个父母有 2 个子对象 - 所以总共有 4 个子对象)。

grandparent.Parents 集合包含 4 个项目,其中 2 个是重复项。似乎 DistinctRootEntityResultTransformer 仅适用于 1 级深度的集合,因此 Parent 集合的复制取决于每个父对象有多少子对象。

是否可以让 NH 仅包含不同的 Parent 对象?

非常感谢。

0 投票
2 回答
2040 浏览

grails - 多对多关系的急切加载 - Grails (GORM)

每本书可以有很多作者。每个作者都可以写很多本书。

现在我什么时候可以做:

现在我想我应该能够带走每个作者并获得与他相关的书籍:

你现在看到它会递归(导致stackoverflow)。有谁知道它是如何工作的,当它进行急切的获取时?

0 投票
7 回答
24663 浏览

ruby-on-rails - 如何确定 Rails 关联是否是急切加载的?

有谁知道确定 Rails 关联是否已被急切加载的方法?

我的情况:我有一个结果集,有时其中一个关联是渴望加载的,有时不是。如果它不是预先加载的,那么我想使用 ActiveRecord 的查找来查找关联。如果它是急切加载的,我想使用检测。

例如,假设我的商品模型中有一个 shipping_info 对象的“has_many”数组。然后:

如果项目是预先加载的,最有效的加载是:

如果项目不是急切加载的,最有效的加载是:

但是除非我知道它是否被急切加载,否则我不知道调用哪个代码来有效地获取记录。如果我在没有急切加载的情况下使用第一种方法,那么我必须查找比必要更多的数据库记录。如果我在急切加载时使用第二种方法,那么我急切加载的对象将被忽略。

0 投票
1 回答
1439 浏览

entity-framework - 实体框架中的急切加载在复杂查询中失败

以下查询在我执行时无法加载表:

我找到了一些与该问题相关的文章,即Alex James 的文章“如何使 Include 真正包含”。该解决方案附带一个警告:

为此,您的最终选择必须是实体,即选择帖子而不是选择新{...}

这显然是上述代码块的问题。对于这个问题,是否有任何其他已知的解决方法不会破坏急切加载?