Apollo GraphQL DataLoader DynamoDb

Posted

技术标签:

【中文标题】Apollo GraphQL DataLoader DynamoDb【英文标题】: 【发布时间】:2020-12-14 05:28:23 【问题描述】:

我是 GraphQL 新手,正在阅读 N+1 问题和数据加载器模式以提高性能。我正在考虑使用 DynamoDB 为数据库启动一个新的 GraphQL 项目。我做了一些初步研究,发现了一些用于 dataloader 和 DynamoDb 的小型 NPM 包,但它们似乎没有得到积极支持。因此,在我看来,从我最初的研究来看,DynamoDB 可能不是支持 Apollo GraphQL 应用程序的最佳选择。

是否可以针对 DynamoDb 数据库实现数据加载器模式?

谢谢

【问题讨论】:

【参考方案1】:

Dataloader 不关心你拥有什么样的数据库。真正重要的是有一些方法可以批量处理您的操作。

例如,为了通过 ID 获取单个实体,使用 SQL,您将有一些类似于这样的查询:

select * from product where id = SOME_ID_1

与此等效的批处理可能是in 查询,如下所示:

select * from product where id in [SOME_ID_1, SOME_ID_2, SOME_ID_3]

单次查询和批量查询的实际机制将根据您使用的数据库而有所不同,可能并非总是可行,但通常是可行的。快速搜索显示 DynamoDB 有 BatchGetItem,这可能是您需要的。

批量处理需要额外参数(例如分页或复杂过滤)的查询可能更具挑战性,可能值得投入,也可能不值得投入。但是批处理任何看起来像“通过 ID 获取 X”的东西总是值得的。

在寻找支持 Dataloader 和 DynamoDB 的库方面,我不会担心。您不需要这种级别的工具。只要有某种构造数据库查询的方法,并且您可以将它放在一个函数中,该函数接受一组 ID 并以正确的形状返回结果,您就可以做到——而且这通常还不够复杂证明添加另一个库是合理的。

【讨论】:

以上是关于Apollo GraphQL DataLoader DynamoDb的主要内容,如果未能解决你的问题,请参考以下文章

使用 type-graphql typeorm 和 dataloader 处理一对多的最佳方法

GraphQL,Dataloader,[ORM or not],有很多关系理解

为GraphQL Server自动生成DataLoader!

如何将 Mongoose 与 GraphQL 和 DataLoader 一起使用?

初始化 Graphql 应用程序时出现 org.dataloader.DataLoaderRegistry 错误

在 GraphQL 服务器设置中何时使用 Redis 以及何时使用 DataLoader