Multithreading with PostgreSQL JDBC



我仍然是一名学生,对多线程和数据库没有那么多经验,所以我可能错过了一些明显的东西-希望在更初级的水平上得到答案。我正忙着创建一个虚拟Java应用程序,它允许用户提交地铁站位置,然后查找离他们位置最近的车站。这一切都是通过HTTP进行的。这个应用程序的后端是PostgreSQL(带有PostGis),我通过PostgreSQL JDBC连接到数据库。我希望我的应用程序是尽可能多线程。每次接收到新的HTTP连接时,我都会启动一个新线程并为用户的请求提供服务。但我不确定有多少点有这一点,如果读取和写入数据库本身不能并行。由此可见,PostgreSQL JDBC不是线程安全的。但这到底是什么意思呢?这是否意味着在单个连接内的读写不是线程安全的(即在DriverManager.getConnection()的每个实例中)?但如果每次HTTP请求都建立新连接呢?这两个并行做安全吗?这会严重影响性能吗?还有其他建议吗?

JDBC通常不是线程安全的,不仅仅是Postgres驱动程序。

这意味着你不能同时在多个线程中运行从同一个Connection实例创建的多条语句。

如果你想并行运行两个语句,你需要创建两个不同的物理连接到数据库。

由于创建连接不是免费的,通常的方法是使用一个连接池(例如通过ConnectionPoolDataSource)来保持一组连接打开。然后,应用程序从池中获取连接,并在查询(或事务)完成时将它们放回池中。

最新更新