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

问题描述 投票:3回答:1

示例场景:

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

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


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

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

java multithreading postgresql thread-safety connection-pooling
1个回答
1
投票

只要数据库本身符合ACID,你就可以了(虽然偶尔会有人在一些非常奇怪的情况下发现错误)。

对于奖励问题:对于PostgreSQL,只要你有时间收集并发事务(增加commit_delay的值),它就完全有意义,然后可以帮助将磁盘I / O组合成批量。还有其他用于事务吞吐量调整的参数,如果持久性是您主要关注的问题之一,则大多数参数都非常危险。

另外,请记住,数据库客户端还需要在数据库调用之间进行一些工作,这些调用在按顺序执行时只会为数据库添加空闲时间。所以即使在这里,并行性也有帮助(只要你有实际的资源(CPU,......)。

© www.soinside.com 2019 - 2024. All rights reserved.