我应该或可以为父级中的子解析器获取数据吗?
Should or can I fetch data for a child resolver in the parent?
我刚开始使用 graphql,所以这可能是一个愚蠢的问题,但我有以下情况:我有一个对象,我们称它为汽车,它具有各种属性,其中包括驱动程序日志或任何。当我查询特定汽车并且我也想要日志时,解析器 运行s 和 returns 使用父 ID 从数据库中获取日志条目。但是当我查询多辆汽车时,日志条目的解析器将为返回的每辆汽车 运行。
在 graphql 之外,我会一次获取所有必需的日志条目并将它们分配给每辆汽车,因此我只需要查询一次数据库。
有什么方法可以在 graphql 中完成这个吗?我认为 运行 一个查询并过滤结果比 运行 对每个查询对象进行一个查询更有效。还是我想太多了,我应该只查询数据库中的每条记录?我想,我需要知道的是:如果我需要在子解析器中解析数据以及我是否可以在父解析器中获取这些数据并将其传递给子解析器,是否有办法从父解析器中获知=10=]
从那以后,我找到了我一直在寻找的东西:前瞻性数据获取和预取。您可以从第四个解析参数中获取字段。从那里您可以确定是否查询了可以预取的任何字段。
不确定性能,但我认为最好一次预取所有必需的行,而不是 运行对结果中的每个对象进行大量查询。
无论如何,是的,预取是可能的,不确定性能,但我现在至少可以 运行 一些基准测试来了解它的性能。
编辑:结束使用数据加载器。没有意识到它会自动批处理您的请求,因此您实际上不需要任何逻辑来预取或先行。
我刚开始使用 graphql,所以这可能是一个愚蠢的问题,但我有以下情况:我有一个对象,我们称它为汽车,它具有各种属性,其中包括驱动程序日志或任何。当我查询特定汽车并且我也想要日志时,解析器 运行s 和 returns 使用父 ID 从数据库中获取日志条目。但是当我查询多辆汽车时,日志条目的解析器将为返回的每辆汽车 运行。
在 graphql 之外,我会一次获取所有必需的日志条目并将它们分配给每辆汽车,因此我只需要查询一次数据库。
有什么方法可以在 graphql 中完成这个吗?我认为 运行 一个查询并过滤结果比 运行 对每个查询对象进行一个查询更有效。还是我想太多了,我应该只查询数据库中的每条记录?我想,我需要知道的是:如果我需要在子解析器中解析数据以及我是否可以在父解析器中获取这些数据并将其传递给子解析器,是否有办法从父解析器中获知=10=]
从那以后,我找到了我一直在寻找的东西:前瞻性数据获取和预取。您可以从第四个解析参数中获取字段。从那里您可以确定是否查询了可以预取的任何字段。
不确定性能,但我认为最好一次预取所有必需的行,而不是 运行对结果中的每个对象进行大量查询。
无论如何,是的,预取是可能的,不确定性能,但我现在至少可以 运行 一些基准测试来了解它的性能。
编辑:结束使用数据加载器。没有意识到它会自动批处理您的请求,因此您实际上不需要任何逻辑来预取或先行。