在我们的应用程序中围绕每个服务方法放置数据库会增加开销吗?
我们目前只在明确/明显需要的情况下使用数据库事务。我最近建议事务围绕所有服务方法,但其他一些开发人员问了一个谨慎的问题:这会增加开销吗?
我的感觉不是 - 从数据库的角度来看,自动提交与事务相同。但这准确吗?
数据库:MySQL
最佳答案
你是对的,使用自动提交,每条语句都包含在事务中。如果你的服务方法正在执行多个sql语句,最好将它们包装成一个事务。看看this回答更多细节,和here是一篇关于该主题的精彩博文。
回答你的问题,是的,事务确实增加了性能开销,但在你的具体情况下,你不会注意到差异,因为你已经启用了自动提交,除非你在服务方法中有长时间运行的语句,这会导致更长的时间锁定参与事务的表。如果您只是将多个语句包装在一个事务中,您将得到一个事务(而不是每个单独语句的事务),如所指出的here (“启用了自动提交的 session 可以通过使用显式 START TRANSACTION 或 BEGIN 语句启动它并以 COMMIT 或 ROLLBACK 语句结束它来执行多语句事务”)并且您将在服务方法级别上实现原子性......
最后,如果从实现服务方法级别的原子性(我认为您想要实现)的角度来看这有意义的话,我会采用您的解决方案,但是对性能有 + 和 - 的影响,取决于您的查询、请求等...
关于mysql - 事务是否会增加数据库的开销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9271497/