繁体   English   中英

graphQL多重突变事务

[英]graphQL multiple mutations transaction

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

资源 :

在GraphQL中,突变作为序列执行。 否则,很难检测到一次又一次地添加同一作者的错误。

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

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

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

这个设计决定背后的理由是什么? 还有其他项目以不同的方式进行吗?

实际上,GraphQL强烈鼓励请求并发。 请求可以并行处理。 每个请求都会串行执行该请求的各个突变,但可以同时处理多个请求。

表示突变和请求之间的区别很重要,特别是在并发方面。

同样重要的是,表示GraphQL不会告诉您如何在单个请求之外应用编辑。 这是你的代码抽象,你决定是否使用SQL开始...提交阻止数据库写入或直接进行更新调用并滚动骰子。

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

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

这主要是我见过的。 但是,只要您确保结果与路径无关,并且您可以找到保证所有ACID属性保持的方法,就可以进行无序的并行编辑处理。

有很多方法可以用多种语言来实现这一点,但我只能想到Redis中的一个示例实现。

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

注意:如果您有依赖编辑(创建表格,将表格推入表格),您可以真正拍摄自己的脚,避免连续编辑执行。

至于多个请求的交易? 我从来没有真正使用它们,这个线程更适合这个问题。

跨多个HTTP请求拆分多步骤数据库事务

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM