graphQL多突变事务

2024-06-16 08:48:21 发布

您现在位置:Python中文网/ 问答频道 /正文

显然graphQL突变是按顺序逐个执行的。在

资料来源:

In GraphQL, mutations are executed as a sequence. Otherwise, it's hard to detect errors like adding the same author again and again.

It's totally up to the GraphQL server implementation to implement mutations like this. Reference NodeJS implementation and other community implementations for Python and Scala follow this.

如果我理解正确,这可以防止:

  • 并行执行请求
  • 在多个事务上使用多个请求

这个设计决策背后的基本原理是什么? 是否有其他项目的做法有所不同?在


Tags: andthetohttps顺序来源thisgraphql
1条回答
网友
1楼 · 发布于 2024-06-16 08:48:21

实际上,GraphQL非常鼓励请求并发。请求可以并行处理。每个请求以串行方式执行该请求的单个突变,但可以同时处理多个请求。在

指出突变和请求之间的区别是很重要的,尤其是在并发性方面。在

同样重要的是,GraphQL没有告诉您如何在单个请求之外应用编辑。这是您的代码抽象,您可以决定是使用SQLBegin…commit来阻止数据库写入,还是直接进行更新调用并掷骰子。在

在数据库设计中,对事务进行串行编辑处理是一种非常常见的做法,在大多数数据库语言中都可以看到用于此目的的一组命令。在

在SQL中,突变通常用BEGIN和COMMIT括起来。 在Redis中,MULTI-EXEC块提供了这种功能。在

这主要是我所看到的。然而,无序的、并行的编辑处理当然是可能的,只要您确保结果是路径无关的,并且您可以找到一种方法来保证所有ACID属性都保持不变。在

在许多语言中都有实现这一点的方法,但是我只能在头脑中想出一个在Redis中实现的例子。在

您可以将编辑映射到一组简短的Lua脚本,这些脚本检查序列化的自身事务键的值,如果找到匹配项,则在应用之前返回。否则,它们将应用编辑,并将序列化编辑附加到事务主体。在

注意:如果您有依赖的编辑(创建表,将条目推到表中),您可以真正地避免串行编辑的执行。在

就多个请求的事务而言?我从来没有真正使用过它们,这条线更适合这个问题。在

Multi-step database transaction split across multiple HTTP requests

相关问题 更多 >