gpt4 book ai didi

java - 共享数据库连接与私有(private)数据库连接

转载 作者:搜寻专家 更新时间:2023-10-31 19:31:19 24 4
gpt4 key购买 nike

试图弄清楚如何管理/使用长期存在的数据库连接。我在这方面的经验太少了,因为我只在小型系统上使用过数据库(最多约 150 个并发用户,每个用户都有自己的数据库用户/密码,因此随时有多达 150 个长期存在的数据库连接) 或网页(每个页面请求都有自己的数据库连接,持续时间不到一秒,因此并发数据库连接的数量并不大)。

这次会有Java服务器和Flash客户端。 Java 连接到 PostgreSQL。连接应该是长期存在的,即,它们应该在 Flash 客户端连接到 Java 服务器时开始,并在 Flash 客户端断开连接时结束。在所有用户(客户端)之间共享单个连接或为每个客户端建立专用连接会更好吗?或者其他一些解决方案会更好?

*) 单一/共享连接:

  • (+) 专业人士
    • 整个系统只有一个数据库连接
  • (-) 缺点:
    • 不能使用事务(例如,“user1.startTransaction(); user1.updateBooks(); user2.updateBooks(); user1.rollback();”)到单个共享连接会回滚由用户2)
    • 一个用户的长查询可能会影响其他用户(虽然不确定)

*) 私有(private)连接:

  • (+) 专业人士
    • 交易没有问题:)
  • (-) 缺点:
    • 可能需要大量的并发连接,也就是说,如果有 10000 个在线用户,则需要 10000 个数据库连接,这似乎是一个太大的数字 :) 不过我对预期的用户数量一无所知,因为我们仍在研究和规划中。

一种解决方案是引入超时,即,如果数据库连接在 15/60/900(?)秒内未使用,则会断开连接。当用户再次需要数据库时,它会重新连接。这对我来说似乎是一个很好的解决方案,但我想知道对此的合理限制是什么,例如,并发数据库连接的最大数量是多少,应该使用什么超时等。

另一种解决方案是将查询分为两种“类型”——一种可以安全地使用单一共享长期连接的类型(例如,“update user set last_visit = now() where id = :user_id”),另一种需要私有(private)短期连接的类型(例如,可能会做一些繁重的工作或使用事务的东西)。这个解决方案似乎对我没有吸引力,但如果这是应该的方式,我可以尝试这样做......

那么...其他开发人员在这种情况下会怎么做?还有其他合理的解决方案吗?

最佳答案

我不使用长期连接。我使用连接池来管理连接,并且只在执行操作所需的时间内保留它们:获取连接、执行我的 SQL 操作、将连接返回到池中。它的可扩展性更高,并且不会遇到事务问题。

让容器为您管理池 - 这就是它的用途。

关于java - 共享数据库连接与私有(private)数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3360954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com