[英]graphQL multiple mutations transaction
显然,graphQL突变是按顺序逐个执行的。
资源 :
在GraphQL中,突变作为序列执行。 否则,很难检测到一次又一次地添加同一作者的错误。
完全由GraphQL服务器实现来实现这样的突变。 参考NodeJS实现和Python和Scala的其他社区实现遵循这一点。
如果我理解正确,这可以防止:
这个设计决定背后的理由是什么? 还有其他项目以不同的方式进行吗?
实际上,GraphQL强烈鼓励请求并发。 请求可以并行处理。 每个请求都会串行执行该请求的各个突变,但可以同时处理多个请求。
表示突变和请求之间的区别很重要,特别是在并发方面。
同样重要的是,表示GraphQL不会告诉您如何在单个请求之外应用编辑。 这是你的代码抽象,你决定是否使用SQL开始...提交阻止数据库写入或直接进行更新调用并滚动骰子。
对事务进行串行编辑处理是数据库设计中非常常见的做法,在大多数数据库语言中都可以看到一组用于此目的的命令。
在SQL中,突变通常被BEGIN和COMMIT括起来。 在Redis中,MULTI EXEC块提供此功能。
这主要是我见过的。 但是,只要您确保结果与路径无关,并且您可以找到保证所有ACID属性保持的方法,就可以进行无序的并行编辑处理。
有很多方法可以用多种语言来实现这一点,但我只能想到Redis中的一个示例实现。
您可以将编辑映射到一组简短的Lua脚本,这些脚本检查其序列化自我的事务键值,如果找到匹配,则在应用之前返回。 否则,他们将应用编辑,并将序列化编辑附加到事务正文。
注意:如果您有依赖编辑(创建表格,将表格推入表格),您可以真正拍摄自己的脚,避免连续编辑执行。
至于多个请求的交易? 我从来没有真正使用它们,这个线程更适合这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.