首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >graphQL多突变事务

graphQL多突变事务
EN

Stack Overflow用户
提问于 2015-10-15 08:38:07
回答 1查看 2.9K关注 0票数 5

显然,graphQL突变是一个接一个地执行。

资料来源:

在GraphQL中,突变作为序列执行。否则,很难检测到错误,比如一次又一次地添加相同的作者。 实现这样的突变完全取决于GraphQL服务器实现。参考NodeJS实现和其他用于Python和Scala的社区实现,如下所示。

如果我理解得对,这会防止:

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

这个设计决策背后的理由是什么?是否还有其他不同的项目?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-04 07:19:50

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

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

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

事务上的串行编辑处理是数据库设计中非常常见的一种做法,在大多数数据库语言中都可以看到这方面的一组命令。

在SQL中,突变通常由开始和提交括起来。在Redis中,多个EXEC块提供了此功能。

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

在许多语言中都有这样做的方法,但我只能想到一个在Redis中实现这个方法的例子。

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

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

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

Multi-step database transaction split across multiple HTTP requests

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33143704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档