为连接到服务器应用程序的每个客户端打开新的数据库连接?

jav*_*uns 4 java database sockets client-server object

我正在构建客户端 - 服务器应用程序,我真的想建议如何设计服务器 - 数据库连接部分.我们说基本思路如下:

  1. 客户端在服务器上验证自己.
  2. 客户端向服务器发送请求.
  3. 服务器将客户端的请求存储到本地数据库.

就我们拥有的Java对象而言

  • 客户对象
  • 服务器对象
  • 数据库对象

因此,当客户端连接到服务器时,会在它们之间创建会话,通过该会话交换所有数据.现在困扰我的是我是否应该为每个客户端会话创建一个数据库对象/连接,或者我是否应该创建一个将处理所有请求的数据库对象.

因此这两个概念是

  1. 创建一个处理所有客户端请求的数据库对象
  2. 对于每个客户端 - 服务器会话,创建专门用于客户端的数据库对象.

使用选项1,我猜所有方法都应该同步,以避免一个客户端线程不覆盖另一个的变量.但是,在大量并发请求的情况下使其同步将是耗时的,因为每个请求将被放入队列中,直到完成一个运行.

使用选项2,似乎是一个更合适的解决方案,但为每个客户端 - 服务器会话创建一个数据库对象是一个消耗内存的任务,而且当并发连接用户的数量很大时,为每个客户端创建数据库连接可能会再次导致问题.

这些只是我的想法,所以请添加任何可能对决定有帮助的评论.

谢谢

JB *_*zet 7

选项3:使用连接池.每次要连接到数据库时,都会从池中获得连接.完成后,关闭连接以将其返回池中.

那样,你可以

  • 有几个客户端同时访问数据库(您的选项1不允许)
  • 打开了合理数量的连接,避免使数据库陷入困境或用完可用连接(您的选项2不允许)
  • 避免一直打开新的数据库连接(您的选项2不允许这样做).打开连接是一项昂贵的操作.

基本上所有服务器应用都使用此策略.所有Java EE服务器都带有连接池.您还可以在Java SE应用程序中使用它,将池用作库(HikariCP,Tomcat连接池等)