我正在研究Scala數據庫框架/包裝,並在Twitter上遇到了Gizzard。雖然我一開始印象深刻,但當我讀到限制時,我冷靜下來。他們說你所做的所有數據庫操作必須是冪等性的和交換。如果我理解正確,基本上幾乎沒有遺漏。作爲一個例子,如果我有一個整數計數器的實體,它必須增加。我可以使用「增量」操作或「設置」操作。但增量不會是冪等的(如果你運行它兩次,你會得到一個不同的結果,然後運行一次),並設置不會交換(設置前5,然後2給出不同的結果,然後設置前兩個,然後5)。那麼,「插入 - 如果不存在」還有什麼不同,對於大多數使用情況來說這不是很有用。分佈式數據庫框架的特點是什麼,它如此受到限制,基本上不能對它做任何有用的事情?我必須錯過重要的事情。除了「insert-if-absent」(和「delete-if-present」)之外,我認爲「compare-timestamp-and-set」將是冪等和交換的,如果更改是排隊而不是丟棄,當「以前的變化」仍然缺失。但我不知道是否有任何數據庫實現這一點。什麼樣的數據庫操作同時是「冪等和可交換」的?
5
A
回答
3
交換操作只是導致值單調增長的操作。冪等例子說操作是:
- 插接件爲一組,
- 設置的值是最大的一個數字,它以前的價值,
6
通常,冪等動作必須在動作之前檢查狀態。當應用於數據庫更新的上下文時,這意味着在更新之前檢查要更改的數據的狀態。例如:
update some_table set
some_column = 'some_new_value'
where id = 123
and some_column = 'its_current_value'; -- idempotent check
如果這是兩次運行,第二次調用將什麼也不做。
爲了可交換,兩個更新將需要影響數據狀態的不同方面(不同的列/行)。也就是說,每個冪等檢查的有效性都不能受其他命令的更新操作的影響。
相關問題
- 1. 爲什麼mongodb oplog是冪等的?即使插入操作?
- 2. Opengl - 爲什麼normalize()不是冪等的?
- 3. 操作可交換不平等=在C++
- 4. 什麼是最好的Http代碼來識別冪等操作衝突
- 5. IronPython - 什麼樣的數據庫可用
- 6. Java的等式操作符是否可交換?
- 7. 什麼樣的數據庫是領域?
- 8. 數據庫的交換(操作轉換)差異
- 9. 什麼樣的服務器用於操作轉換操作?
- 10. 在數據庫/ linq查詢過濾和排序交換操作?
- 11. 如何使寫操作冪等?
- 12. 什麼Git操作鎖定數據庫?
- 13. sklearn轉換操作的數據是什麼?
- 14. 操作JPEG元數據的最佳庫是什麼?
- 15. 使用phpmyadmin同步兩個數據庫 - 此操作的「套接字」是什麼?
- 16. HTTP冪等和非冪等方法?
- 17. 這是PUT冪等性的正確實現,應該是什麼?
- 18. 什麼是高交易數據庫
- 19. GAE交易失敗和冪等
- 20. 基於操作轉換的數據庫
- 21. Azure數據庫上的「等待操作超時」故障排除
- 22. Java中的可計算和可操作接口是什麼?
- 23. RESTful Web服務中PUT方法冪等的含義是什麼?
- 24. RestFul WebApi中的冪等概念是什麼?
- 25. 重新編碼JPEG圖像是冪等操作嗎?
- 26. 什麼樣的數據類型支持這種操作?
- 27. 精益證明助理中的交換環的冪等問題
- 28. 使用什麼樣的數據庫?
- 29. 嘗試還原數據庫時,mysqldump會執行什麼操作?
- 30. 什麼是AWS等效於Firebase實時數據庫?
所以,你可以更新一列,通過檢查舊狀態是否具有期望值,但不能兩次更新它,因爲如果更新以錯誤的順序到達,它們都將被丟棄。因此,只有在兩次更新之間有足夠的時間才能正常工作,以確保它們以正確的順序到達。 –