簡體   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