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 一起使用?