Python graphQL多突变事务

Python graphQL多突变事务,python,database,node.js,scala,graphql,Python,Database,Node.js,Scala,Graphql,显然graphQL突变是一个接一个顺序执行的 资料来源: 在GraphQL中,突变作为序列执行。否则,这很难 检测错误,如反复添加同一作者 完全由GraphQL服务器实现来实现 像这样的突变。参考NodeJS实现和其他 Python和Scala的社区实现遵循这一点 如果我理解正确,这是否会阻止: 并行执行请求 在多个请求上使用事务 此设计决策背后的基本原理是什么? 还有其他项目做得不同吗?实际上,GraphQL非常鼓励请求并发。请求可以并行处理。每个请求都以串行方式执行该请求的各个变化

显然graphQL突变是一个接一个顺序执行的

资料来源:

在GraphQL中,突变作为序列执行。否则,这很难 检测错误,如反复添加同一作者

完全由GraphQL服务器实现来实现 像这样的突变。参考NodeJS实现和其他 Python和Scala的社区实现遵循这一点

如果我理解正确,这是否会阻止:

  • 并行执行请求
  • 在多个请求上使用事务
此设计决策背后的基本原理是什么?
还有其他项目做得不同吗?

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

指出突变和请求之间的差异很重要,特别是在并发性方面

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

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

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

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

在许多语言中都有实现这一点的方法,但我只能在脑海中想到Redis中实现这一点的示例

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

注意:如果您有相关的编辑(创建表、将条目推送到表),您就可以避免串行编辑执行

关于多个请求上的事务?我从来没有真正使用过它们,这个线程更适合这个问题


换句话说,两个包含一个突变的请求可以并行执行,但是当两个突变在一个请求中批处理时,它是串行执行的?很抱歉这么晚才响应,我不太确定。我从来没有在一个请求中批处理过两个突变。如果发生这种情况,我可能只是做一个新的变异来执行两个解析器,但我更愿意这样做。