Apollo GraphQL 数据加载器 DynamoDb

Apollo GraphQL DataLoader DynamoDb

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

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

谢谢

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 数组和 returns 一个正确形状的结果,您就可以做到——这通常是'不够复杂,不足以证明添加另一个库是合理的。