![](/img/trans.png)
[英]mongodb: one getAllData query VS more getSingleField queries
[英]GraphQL: One Big Query vs Lots of Little Queries
我知道这个问题和时间一样古老-他们不是万灵丹。 但是我认为那里可能有一个坚实的模式,我不想发明轮子。
考虑以下两个架构选项:
type Query {
note(id: ID!): Note
notes(input: NotesQueryInput): [Note!]!
}
type DatedId {
date: DateTime!
id: ID!
}
type Query {
note(id: ID!): Note
notes(input: NotesQueryInput): [DatedId!]!
}
不同之处在于:
使用方法1)注释查询将返回可能较大的注释对象的列表
使用方法2)注释查询将返回轻得多的有效负载,但随后需要执行n个其他查询
因此,我的问题是带有内存缓存的Apollo客户端/服务器堆栈,这是最好的方法。 通过可扩展的服务器来实现响应式客户端。
使用方法1-我的500mb dyno(heroku服务器)内存不足。
我希望无论采用哪种方法,我都将使用连接/边缘模式实现分页
graphql服务器主要是为我自己的前端服务。
如果服务器上的内存用完了,可能是时候升级了。 如果现在内存不足,请想象一下,当有多个用户访问端点时会发生什么。
解决该特定问题的唯一其他方法是将查询分解为几个较小的查询。 但是,您提出的方法存在两个问题:
您已经建议添加分页,并且我认为将单个大型查询分解为较小的查询是一种更好的方法。 分页不仅可以带来更好的用户体验,而且可以通过限制页面大小来有效地限制给定查询的大小。
您可能会考虑探索的另一种选择是使用延迟查询 。 此实验功能是专门为增加昂贵的查询而添加的。 通过使“ Note
类型上的一个或多个字段延迟,可以有效地为它们最初返回null,并且在它们最终解析之后,将在第二个“补丁”响应中向下发送它们的值。 这对于解析成本很高的字段非常有用,但对于返回大量数据的字段也可能有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.