mongodb - 如何使用 Redis 优化 Graphql

标签 mongodb redis graphql

目前我有 graphql 和 mongodb,现在我想添加 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) 来自数据库的字符串化原始文档,按 ID 键控

2)将每个计算出的字段放入redis的哈希值中,每个字段使用来自redis的HGET

这是我对上述选项的担忧:

1) 字段 ABC/XYZ 应该没问题,但 LMN 将导致额外的数据库访问

2)查询Book的所有字段时,每个字段都会有一个HGET,而且大部分只是简单的值,可能浪费时间发起太多的请求?

最佳答案

一般来说,缓存的想法是以您想要的方式放置数据。然而,Redis 是在内存中的,而且内存并不便宜——所以我不会在序列化开销上浪费内存。话虽这么说,只需将值放入 Redis 哈希(每个字段一个值)即可。

关于在请求上浪费时间(我假设您指的是 Redis),这并不是一个大问题。 Redis 的底层协议(protocol)非常高效,您可以这样做(给定图书 ID 'book1234'):

  • HGETALL book1234 获取所有内容
  • HGET book1234 A B C X Y Z L M N(或您选择的字段)。 HGET 是可变参数的(从 Redis 4 开始),因此您可以只提供所需的字段。

最后,如果您有能力安装 Redis 模块,您可能需要查看 ReJSON ,它允许对 JSON 数据进行 native 处理 - 允许您从结构中挑选数据。这可能是两全其美的。

关于mongodb - 如何使用 Redis 优化 Graphql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47739064/

相关文章:

mongodb - 找不到针对Option [reactivemongo.bson.BSONObjectID]类型的Json解串器

javascript - 异步等待和可共享的 MongoDB 连接

node.js - npm 安装redis 问题

reactjs - TypeError : Cannot read property 'getPosts' of undefined - useQuery hook, react 功能组件

node.js - postgreSQL 的 prisma 部署命令

node.js - 在 Heroku 上开发时,使用 GraphQL 的 Shopify 应用程序无法运行

mongodb - Grails/MongoDB 删除所有

mongodb - NoSQL 最佳实践

spring - 使用消息系统的 2 个应用程序之间的交互

redis - 如何在 Redis 2.6.11 中使用 UNSUBSCRIBE 命令