- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用DataLoader将请求/查询一起批处理。
在我的加载器函数中,我需要知道请求的字段,以避免产生SELECT * FROM query
而不是SELECT field1, field2, ... FROM query
...
使用DataLoader传递所需的resolveInfo
的最佳方法是什么? (我使用resolveInfo.fieldNodes
获取请求的字段)
目前,我正在执行以下操作:
await someDataLoader.load({ ids, args, context, info });
然后在实际的loaderFn中:
const loadFn = async options => {
const ids = [];
let args;
let context;
let info;
options.forEach(a => {
ids.push(a.ids);
if (!args && !context && !info) {
args = a.args;
context = a.context;
info = a.info;
}
});
return Promise.resolve(await new DataProvider().get({ ...args, ids}, context, info));};
但是如您所见,它很笨拙,感觉并不好...
最佳答案
我不确定这个问题是否有一个很好的答案,仅仅是因为没有为该用例创建Dataloader,而是我与Dataloader进行了广泛的合作,编写了类似的实现并在其他编程语言上探讨了类似的概念。
让我们理解为什么不为该用例创建Dataloader,以及如何使它仍然有效(大致与您的示例类似)。
Dataloader并非用于获取字段的子集
数据加载器用于简单的键值查找。这意味着给定像ID这样的键,它将在其后加载一个值。为此,它假定ID后面的对象在失效之前始终是相同的。这是启用数据加载器功能的单一假设。没有它,Dataloader 的三个关键功能将不再起作用:
1
以及字段id
和name
的用户。稍后(或同时),我们希望向用户加载ID 1
以及字段id
和email
。从技术上讲,这是两个不同的实体,它们需要具有不同的密钥。1
且字段id
和name
的用户应与ID为1
且字段name
和id
的用户相同(请注意顺序)。await someDataLoader.load({ ids, args, context, info });
// This function creates unique cache keys for different selected
// fields
function cacheKeyFn({ id, fields }) {
const sortedFields = [...(new Set(fields))].sort().join(';');
return `${id}[${sortedFields}]`;
}
function createLoaders(db) {
const userLoader = new Dataloader(async keys => {
// Create a set with all requested fields
const fields = keys.reduce((acc, key) => {
key.fields.forEach(field => acc.add(field));
return acc;
}, new Set());
// Get all our ids for the DB query
const ids = keys.map(key => key.id);
// Please be aware of possible SQL injection, don't copy + paste
const result = await db.query(`
SELECT
${fields.entries().join()}
FROM
user
WHERE
id IN (${ids.join()})
`);
}, { cacheKeyFn });
return { userLoader };
}
// now in a resolver
resolve(parent, args, ctx, info) {
// https://www.npmjs.com/package/graphql-fields
return ctx.userLoader.load({ id: args.id, fields: Object.keys(graphqlFields(info)) });
}
1[id,name]
的实体,我们也可以使用该对象来回答(至少在JavaScript中)键1[id]
和1[name]
。在这里,我们可以构建一个可以提供给Dataloader的自定义 map 实现。知道有关缓存的这些知识将足够聪明。关于javascript - 使用Facebook的DataLoader传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46352168/
我目前遇到以下情况,我想使用 DataLoader 批处理 numpy 数组: import numpy as np import torch import torch.utils.data as d
我现在正在使用 Pytorch 运行 Python 程序。我使用我自己的数据集,而不是 torch.data.dataset .我从从特征提取中提取的泡菜文件下载数据。但是出现以下错误: Traceb
问题 我有以下问题: 我想使用 pytorchs DataLoader(以类似于 here 的方式)但我的设置有点不同: 在我的数据文件夹中,我有不同街道情况的图像(让我们称它们为 image_tot
我已经通过这个 pytorch api 通过设置 download=True 下载了 ImageNet 数据集。但我无法遍历数据加载器。 错误说“'DataLoader' 对象不支持索引” train
我了解 dataLoader 如何使用简单的键工作: import DataLoader from 'dataloader'; import myService from './services/se
当遍历 PyTorch 数据加载器时,例如 # define dataset, dataloader train_data = datasets.ImageFolder(data_dir + '/tr
当遍历 PyTorch 数据加载器时,例如 # define dataset, dataloader train_data = datasets.ImageFolder(data_dir + '/tr
我正在使用 graphql 和 mongodb (mongoose) 构建一个快速 JS 应用程序。我正在使用 facebooks Dataloader 来批处理和缓存请求。 除了这个用例,它工作得很
查看 DataLoader library ,它是如何缓存和批处理请求的? 指令以下列方式指定用法: var DataLoader = require('dataloader') var userLo
shuffle = False时,不打乱数据顺序 shuffle = True,随机打乱 ?
关于Pytorch中怎么自定义Dataset数据集类、怎样使用DataLoader迭代加载数据,这篇官方文档已经说得很清楚了,这里就不在赘述。 现在的问题:有的时候,特别对于NLP任务来说,输入的
最近在学pytorch,在使用数据分批训练时在导入数据是使用了 DataLoader 在参数 num_workers的设置上使程序出现运行没有任何响应的结果 ,看看代码
有一个bug在 PyTorch/Numpy 中,当使用 DataLoader 并行加载批处理时(即设置 num_workers > 1),每个 worker 使用相同的 NumPy 随机种子,导致任何
我有以下错误。 Expected: /home/ubuntu/.pycharm_helpers/pydev/pydevd_attach_to_process/attach_linux_amd64.so
有一个bug在 PyTorch/Numpy 中,当与 DataLoader 并行加载批次时(即设置 num_workers > 1 ),每个 worker 使用相同的 NumPy 随机种子,导致应用的
我有一个 GraphQL api,使用传统的解析函数可以很好地工作。我的目标是消除 N+1 问题。 为此,我决定使用 Dataloader。我已经完成了这些步骤,据说可以让应用程序运行: 我将这两个函
当我创建一个 PyTorch DataLoader 并开始迭代时——我得到了一个非常慢的第一个纪元(x10--x30 比所有下一个纪元都慢)。此外,此问题仅出现在来自 Kaggle 的 Google
我有非常常见的 GraphQL 架构,如下所示(伪代码): Post { commentsPage(skip: Int, limit: Int) { total: Int item
有没有办法将DataLoader作为列表处理?我的想法是,我想对隐式图像对进行洗牌,而不将洗牌设置为 True 基本上,我有 10 个场景,每个场景包含 100 个序列,因此它们在目录中表示为 '1_
我需要用我训练的卷积神经网络的数据测试结果编写一个文件。数据包括语音数据采集。文件格式需要是“文件名,预测”,但我很难提取文件名。我这样加载数据: import torchvision from to
我是一名优秀的程序员,十分优秀!