[英]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.