我们的代码开发团队正在实施GraphQL应用程序接口,以取代我们网站访问AWS RDS Web Edition SQL Server2017后端的当前方法。我注意到,跨多个表的查询不使用DB原生关系,而是单独加载每个表,并传递每个表所需的行的过滤参数,这些参数是从以前的表键派生的。
TSQL查询示例:
Select c.Name
from a
inner join b on b.b_id = a.b_id
inner join c on c.c_id = b.c_id类似的通过GraphQL生成。位伪codish,因为它是保存SELECTs结果的GraphQL:
Select a.b_id [into a table within GraphQL API. Let's call it *b_ids*]
from a
Select b.c_id [again into a GraphQL table *c_ids*]
from b
where b.id IN([list of ids in *b_ids*])
Select c.Name
from c
WHERE c.id IN ([list of ids in *c_ids*])我们在轨迹上看到的就是:
Select a.b_id
from a
Select b.c_id
from b
where b.id IN(1, 2, 3, 4 etc..)
Select c.Name
from c
WHERE c.id IN (1, 2, 3, 4 etc..)我关心的是这种方法,可能会受到影响的性能,以及级联中可能在1到非常多的行上违反的SQL Server查询阈值(64KB)。我们有有数十万行的连接表。
我会想,如果我的担忧是合理的,那么在网上会有很多东西可以找到,但我什么都没有找到。有没有人一起使用过这些平台,可以给出一些迹象、警告或保证,特别是在使用需要快速响应的网站时。非常感谢你的建议。
发布于 2021-08-02 12:01:34
我对GraphQL一无所知,但是包含大型IN列表的查询的解析和编译成本可能很高,而且不能扩展到任意大小的数据。然而,TSQL查询的limit大小是~65MB而不是64KB,在达到这个限制之前,性能就应该成为一个问题。
作为一种更具伸缩性的替代方法,可以使用表值参数、JSON数组或批量加载临时表来传递数据。
https://stackoverflow.com/questions/68620114
复制相似问题