什麼時候應該使用批次,什麼時候應該使用事務?我可以在一批中嵌入交易嗎?交易中的批次?在CockroachDB中,批處理和事務如何進行交互?
6
A
回答
8
A 批次是爲了提高效率而作爲單個單元發送到服務器的操作的集合。它相當於發送與來自不同線程的單個請求相同的操作。批處理中的請求可能無序執行,批處理中的某些操作可能成功,而其他操作可能會失敗。
在Go中,使用批處理對象DB.B
創建批次,並且必須傳遞給DB.Run()
。例如:
err := db.Run(db.B.Put("a", "1").Put("b", "2"))
相當於:
_, err1 := db.Put("a", "1")
_, err2 := db.Put("b", "2")
甲交易限定操作的一致的和原子序列。事務處理保證系統中所有其他操作的一致性:除非事務處理完成,否則事務處理的結果將不可見。由於事務可能需要重試,所以事務由可能被多次調用的函數對象(通常是閉包)定義。
在Go中,使用DB.Tx方法創建交易。閉包的參數*client.Tx
實現了與DB
類似的接口;在事務內部,您必須對此對象執行所有操作,而不是原始數據庫。如果你的函數返回一個錯誤,事務將被中止;否則它會提交。下面是前面的例子的事務版本(但請參閱下面的更高效的版本):
err := db.Tx(func(tx *client.Tx) error {
err := tx.Put("a", "1")
if err != nil {
return err
}
return tx.Put("b", "2")
})
前面的例子等待「」寫起了「B」寫入前完成,然後等待在提交事務之前「b」寫入完成。通過在事務中使用批處理可以使這更高效。 Tx.B
是批處理對象,就像DB.B
一樣。在交易中,您可以使用Tx.Run
或Tx.Commit
運行批次。當且僅當批處理中的所有其他操作成功時,Tx.Commit
纔會提交事務,並且比在閉包返回時讓事務自動提交更高效。這是一個很好的做法,總是在事務的批處理由Tx.Commit
執行最後一個操作:
err := db.Tx(func(tx *client.Tx) error {
return tx.Commit(tx.B.Put("a", "1").Put("b", "2"))
})
相關問題
- 1. VBScript和批處理交互
- 2. 如何在MSBuild中進行批處理?
- 3. 如何在influxdb的shell中進行交互處理
- 4. 在Visual Studio後期構建事件中運行交互式批處理
- 5. 如何在Tensorflow服務中進行批處理?
- 6. 域對象和服務如何在DDD中進行交互?
- 7. 用戶CMD批處理交互
- 8. Perl DBI begin_work和嵌套事務處理與SQL Server 2008交互
- 9. 批處理作業事務處理
- 10. 如何同時處理用戶交互和套接字事件?
- 11. Hibernate Spring事務處理沒有事務處理正在進行中
- 12. 如何使用Apex進行批處理?
- 13. 彈出批處理提交間隔外的事務提交
- 14. 如何在沒有用戶交互的情況下運行批處理文件?
- 15. 使用PHP,jQuery和Ajax進行交互式文件處理
- 16. 批處理程序,何時提交事務?
- 17. 如何在批處理腳本中運行powershell腳本和批處理腳本?
- 18. mule:批處理中的事務
- 19. Spring批處理事務管理
- 20. 用Spring批處理事務管理
- 21. 用批處理調用運行交互式Matlab.m文件
- 22. 如何在Spring社交中執行Facebook批處理請求處理
- 23. 如何根據共享屬性在Esper中對事件進行批處理
- 24. R交互式和批處理模式以及heIp瀏覽器
- 25. Spring批處理無法打開JPA EntityManager進行事務處理;嵌套異常是java.lang.IllegalStateException:事務已經激活
- 26. 如何從批處理腳本中運行批處理腳本?
- 27. 使用C編寫shell如何區分交互模式和批處理模式
- 28. 如何在類之間進行交互
- 29. 如何在BigQuery中進行批處理操作poll_job?
- 30. 如何與Slack API中的事件進行交互?
你應該標記爲答案您的回覆,這將是非常有幫助 –