pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
许多 JDBC 驱动的一个问题是,同一时刻只能有一个线程使用一个 Connection —— 否则一个线程可能在另一个线程接收结果时发送查询,这可能造成严重的混乱。
PostgreSQL JDBC 驱动是线程安全的。因此,如果你的应用程序使用多个线程,你不必担心用复杂的算法来确保同一时刻只有一个线程使用数据库。
如果一个线程在另一个线程正在使用连接时尝试使用它,它会等到另一个线程完成其当前操作。如果该操作是一条常规的 SQL 语句,那么该操作由发送语句和检索任何 ResultSet(完整地)组成。如果它是一次 fast-path 调用(例如从一个大对象读取一个块),那么它由发送和检索相应的数据组成。
这对应用程序和 applet 来说没有问题,但对 servlet 可能造成性能问题。如果你有多个线程执行查询,那么除一个之外每个线程都会暂停。为了解决这个问题,建议你创建一个连接池。每当一个线程需要使用数据库时,它向一个管理器类请求一个 Connection 对象。管理器把一个空闲的连接交给该线程并把它标记为忙。如果没有空闲连接可用,它就打开一个。一旦该线程用完连接,就把它归还给管理器,管理器随后可以关闭它或者把它加入池中。管理器还会检查连接是否仍然存活,如果已经死掉就把它从池中移除。连接池的缺点是它增加了服务器的负载,因为每个 Connection 对象都会创建一个新会话。这取决于你和你的应用程序的需求。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。