【发布时间】:2018-05-24 03:47:14
【问题描述】:
目前我有 mongodb 的 graphql,现在我想添加 redis 层来优化服务器响应时间。
假设我有这样的架构:
type Query{
book(id: ID):Book
}
type Book{
# simple fields direct come from mongodb collection Book
A
B
C
# fields with values generated from simple fields
X
Y
Z
# fields with aggregated data from other db collections e.g avg/min/max
L
M
N
}
问题来了:我应该在 Redis 中存储什么样的数据?
1) 来自 db 的字符串化原始文档,以 ID 为键
2) 将每个计算字段放入redis的hash值中,每个字段使用redis中的HGET
以下是我对上述选项的担忧:
1) ABC/XYZ 字段应该没问题,但 LMN 会导致额外的数据库访问
2) 查询 Book 的所有字段时,每个字段都会有一个 HGET,而且大多数只是简单的值,可能会浪费时间发起太多请求?
【问题讨论】:
-
您是否在 GraphQL 解析器方法中使用批处理和缓存?如果没有,那么您需要从那里开始 - 您将为此使用 Facebook 的 DataLoader 库。这是一个示例:github.com/kriasoft/nodejs-api-starter 请参阅
src/Context.js- 数据加载器列表,可以在解析函数中使用,如下所示:ctx.bookById.load(123)