Mongodb 如何使用Redis优化Graphql
目前我使用mongodb的graphql,现在我想添加redis层来优化服务器响应时间 假设我有这样的模式:Mongodb 如何使用Redis优化Graphql,mongodb,redis,graphql,Mongodb,Redis,Graphql,目前我使用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 wi
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) 数据库中的字符串化原始文档,由ID键入
2) 将每个计算字段放入redis的哈希值中,每个字段使用redis的HGET
以下是我对上述方案的担忧:
1) 字段ABC/XYZ应该可以,但LMN将导致额外的数据库访问
2) 当查询Book的所有字段时,每个字段都会有一个HGET,其中大多数只是简单的值,可能会在启动太多请求时浪费时间 通常,缓存的想法是以您希望的方式将数据取出。然而,Redis在内存中,内存并不便宜——所以我不会在序列化开销上浪费内存。也就是说,只需将这些值放入Redis散列(每个字段一个值) 至于在请求上浪费时间(我想你是指Redis),这不是一个大问题。Redis的底层协议非常高效,您可以(给定图书ID为'book1234'):
获取所有信息HGETALL book1234
(或您选择的字段)。HGET是可变的(因为Redis 4),所以您可以只提供所需的字段HGET book1234 A B C X Y Z L M N
最后,如果您有能力安装Redis模块,您可能想看看,它允许对JSON数据进行本机处理,允许您从结构中挑选数据。这可能是两全其美。您是否在GraphQL解析器方法中使用批处理和缓存?如果不是的话,那就是你需要开始的地方——你可以使用Facebook的DataLoader库。下面是一个示例:请参见
src/Context.js
——数据加载器列表,可以在解析函数中使用,如:ctx.bookById.load(123)