【发布时间】:2019-08-12 23:27:30
【问题描述】:
我知道这个问题由来已久——而且它们不是灵丹妙药。但我认为那里可能有一个可靠的模式,我不想发明轮子。
考虑以下两个架构选项:
方法 1) 我的原始实现
type Query {
note(id: ID!): Note
notes(input: NotesQueryInput): [Note!]!
}
方法 2) 我目前的实验方法
type DatedId {
date: DateTime!
id: ID!
}
type Query {
note(id: ID!): Note
notes(input: NotesQueryInput): [DatedId!]!
}
区别在于:
使用方法 1) notes 查询将返回一个可能较大的 Note 对象列表
使用方法 2)notes 查询将返回更轻的有效负载,但随后将需要执行 n 个额外的查询
所以我的问题是带有内存缓存的 Apollo Client / Server 堆栈,这是最好的方法。 实现具有可扩展服务器的响应式客户端。
笔记
使用方法 1 - 我的 500mb dyno(heroku 服务器)内存不足。
我希望无论采用哪种方法,我都会使用 connection / edge pattern 实现分页
graphql 服务器主要是为我自己的前端服务。
【问题讨论】:
-
您的问题有点不清楚...这里的假设是,使用第二种方法,您发出一个请求,查询
notes,然后每个返回的 id 发出一个请求,这次请求note字段? -
还要求“最佳方法”使这个问题变得广泛并受制于意见。提供一些标准会很有帮助。除了您要解决的服务器上的内存不足之外,还有什么问题。与其问“什么是最好的方法”,不如问哪种方法可以帮助我实现 x、y 和 z?
-
@DanielRearden -- 是的方法 2 需要随后每个返回的 id 一个请求。我尝试编辑问题以在其上添加更多参数
标签: node.js graphql apollo apollo-client apollo-server