试图找出如何管理/使用长期数据库连接。我没有这种经验,因为我只使用数据库与小型系统(最多约150个并发用户,每个用户都有自己的数据库用户/通行证,因此任何时候都有多达150个长期数据库连接)或网页(每个页面请求都有自己的数据库连接,持续时间不到一秒,因此并发数据库的数量并不大)。
这次将有一个Java服务器和Flash客户端。 Java连接到PostgreSQL。预计连接将是长期存在的,即,当Flash客户端连接到Java服务器并且当Flash客户端断开连接时,它们预计会启动。在所有用户(客户端)之间共享单个连接或为每个客户端建立专用连接会更好吗?或者其他一些解决方案会更好?
*)单一/共享连接:
*)私人连接:
一种解决方案是引入超时,即如果DB连接未用于15/60/900(?)秒,则会断开连接。当用户再次需要DB时,它会重新连接。这对我来说似乎是一个很好的解决方案,但我想知道对此可能是合理的限制,例如,可能是并发数据库连接的最大数量,应该使用什么超时等等。
另一个解决方案是将查询分组为两个“类型” - 一种可以安全地使用单个共享长生命连接的类型(例如,“更新用户设置last_visit = now(),其中id =:user_id”),另一种需要私人短生活联系的类型(例如,可能会做一些繁重工作或使用交易的东西)。这个解决方案对我来说似乎并不吸引人,但如果这是应该做的,我可以尝试这样做......
那么......其他开发者在这种情况下做了什么?还有其他合理的解决方案吗?
答案 0 :(得分:8)
我不使用长期连接。我使用连接池来管理连接,并且只在执行操作时保留它们:获取连接,执行我的SQL操作,返回到池的连接。它更具可扩展性,不会遇到交易问题。
让容器为您管理池 - 这就是它的用途。
答案 1 :(得分:2)
通过使用单一连接,您的性能也会非常低,因为数据库服务器只会为您分配一个连接。
你肯定需要一个连接池。如果应用程序在应用程序服务器内运行,请使用容器池。或者您可以使用连接池库,如c3p0。