猿问

多线程数据库事务通过连接池线程安全吗?

示例场景:

在java中使用线程池,其中每个线程从连接池中获取一个新连接,然后所有线程继续并行执行一些数据库事务。例如将 100 个值插入到同一个表中。

这会以某种方式混淆表/数据库,还是完全安全而无需在线程之间进行任何同步?


我发现很难找到关于这个主题的可靠信息。从我收集的资料来看,数据库引擎自己处理这个/如果有的话(显然是从 9.X 版开始的 PostgresQL)。有没有写得好的文章进一步解释这一点?

额外的问题:当数据库在单个硬盘上运行时,是否有必要使用并行事务?


哔哔one
浏览 145回答 1
1回答

一只萌萌小番薯

只要数据库本身符合ACID就可以了(尽管有时有人会在一些非常奇怪的情况下发现错误)。对于额外的问题:对于 PostgreSQL,只要您有时间收集并发事务(增加commit_delay的值),它就完全有意义,这有助于将磁盘 I/O 组合成批处理。还有其他用于事务吞吐量调整的参数,如果D urability 是您的主要关注点之一,则其中大多数参数可能非常危险。另外,请记住,数据库客户端还需要在数据库调用之间做一些工作,当按顺序执行时,只会增加数据库的空闲时间。因此,即使在这里,并行性也会有所帮助(只要您有实际资源(CPU,...)。
随时随地看视频慕课网APP

相关分类

Java
我要回答