Hibernate java中的连接池

Hibernate java中的连接池,hibernate,application-server,pooling,Hibernate,Application Server,Pooling,我正在研究数据库连接池。我可以看到使用应用服务器端创建连接池的各种选项,然后查看JNDI、hibernate连接池,我可以在配置文件中设置属性 我有两个问题 我已经设置了如下属性 hibernate.c3p0.max_size=20 (Max number of database connections to open) 如果有100个用户访问我的网站,而我只指定了20个连接对象,会发生什么。剩下的80个用户是否将等待20个用户完成其事务,或者剩下的80个用户如何连接到应用程序 使用hibe

我正在研究数据库连接池。我可以看到使用应用服务器端创建连接池的各种选项,然后查看JNDI、hibernate连接池,我可以在配置文件中设置属性

我有两个问题

  • 我已经设置了如下属性

    hibernate.c3p0.max_size=20  (Max number of database connections to open)
    
    如果有100个用户访问我的网站,而我只指定了20个连接对象,会发生什么。剩下的80个用户是否将等待20个用户完成其事务,或者剩下的80个用户如何连接到应用程序

  • 使用hibernate配置还是通过应用服务器端进行连接池,哪种方法更好


  • 提前感谢。

    连接创建部分在创建连接时进行了说明。它描述了多个上下文实例如何共享同一连接。 在这种类型的共享中,来自不同上下文实例的操作被多路复用到同一连接上。 您可以通过决定何时创建新的初始上下文以及何时从现有上下文实例获取派生上下文实例来控制共享程度。 这种类型的连接共享满足大多数应用程序

    连接池在数据源中实现,在这两种情况下,Hibernate都将使用数据源。 您可以直接在hibernate配置中指定和配置数据源 您可以在应用程序中配置数据源。服务器,并在hibernate配置中指定相应的JNDI名称。 在本例中,您使用应用程序附带的数据源实现。服务器

    关于coonetcion的数量,让我们以每秒100个事务为例。假设每个前端(浏览器)发送需要0.5秒才能完成 完成,在0.5秒中,0.25秒花费在数据库中。 因此,在thead池中需要0.5*100或100个连接,在DB连接池中需要0.25*100=25个连接

    为了安全起见,我将最大线程池大小设置为至少比您预期的负载峰值大25%。 最小值可以是最大值的一小部分,但折衷是,对于某些用户来说,可能需要更长的时间,因为必须创建新连接 创建。在这种情况下,50-100个连接对于一个DB来说并不是那么多,所以这可能是一个很好的起点

    注意,要计算平均事务响应时间以及平均数据库查询时间, 您将不得不进行性能测试,因为您的负载时间可能不是您在单个用户中看到的时间

    当需要限制应用程序中同时运行的线程数时,线程池非常有用。 假设您的数据库最多支持25个连接,那么直接将连接池最大值属性配置为25。但此设置将如何影响线程池设置?将应用程序服务器线程池配置为最多50个。在这种情况下,应用服务器将允许同时处理50个请求,但数据库只有25个连接。因此,只有25个线程将获得连接,另一个25个线程将争取获得数据库连接,因此连接将在线程之间频繁切换,这将降低整体应用程序性能。 假设我们将线程池最大值设置为与连接池最大值设置相同的50。应用服务器将允许同时处理50个线程,其余线程将处于等待状态。所有50个线程将立即获得数据库连接,因此它将被快速处理。 上面的示例假设每个线程将使用一个数据库连接(可能是多个连接,但顺序不同);如果应用程序由每个线程并行使用两个数据库连接,则将线程池最大值设置配置为连接池最大值的一半。
    最后,将线程池大小设置得太大可能会导致性能问题,因为如果并发线程太多,任务切换开销将成为一个严重的瓶颈。

    谢谢@Zia。这里有点混乱。线程池中的0.5*100或100个连接以及DB连接池中的0.25*100=25个连接。什么是线程池和数据库连接池?它是一个工作线程池,其生命周期如下:1。获取要执行的新任务2。执行它3。回去等下一个吧task@Anil瓦玛:我已经更新了我的答案,请留意。我希望你能得到清晰的答案