什么时候应该使用批次,什么时候应该使用事务?我可以在一批中嵌入交易吗?交易中的批次?在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中的事件进行交互?
你应该标记为答案您的回复,这将是非常有帮助 –