繁体   English   中英

H2是否为每个远程连接生成一个新线程? 那有限制吗?

[英]Does H2 spawn a new thread for each remote connection? Then, is there a limit?

我正在开发一个在线手机游戏。 我有几台服务器计算机在运行Java套接字服务器应用程序的许多实例。

播放器数据必须存储在某个位置(它们的配置文件,项目等)。 我想为此使用H2数据库。

现在,这是棘手的部分:我希望所有播放器数据都存储在同一H2数据库中。 也就是说,出于方便,我所有的服务器应用程序都将通过TCP通过远程连接到一台特定的计算机来访问数据。

事实是,我们期望启动时会有大量客户。 对于每个客户端,将创建到H2数据库的连接。 这里最明显的问题是,一个单一的H2数据库进程是否可以同时处理这么多的连接。

网站

每个服务器并发打开的数据库数或打开的连接数没有限制。

鉴于上述事实,从理论上讲,如果我们的服务器计算机具有足够的资源(内存,空间,CPU等),那么可以,H2数据库应能够处理我们资源允许的尽可能多的并发连接。

但是我有一个不清楚的地方:

H2进程是否为每个远程连接创建一个线程? 我之所以这么问,是因为我曾经读过在Windows(我们的VPS操作系统)中,线程以短类型存储,因此应用程序可以产生的最大线程数约为32,000(我不知道他们使用的数学方法获取该号码)。 在那种情况下,那么H2进程确实存在并发连接的限制-这很麻烦,因为我确实希望连接超过32,000个客户端。

当然,放弃为所有客户拥有一个单一H2数据库的想法似乎是明智的。 但是我想知道上面的陈述是否正确: H2可以处理超过32,000个远程数据库连接吗?

让我们按部分进行分析:

H2进程是否为每个远程连接创建一个线程?

应用程序通常每个线程应使用一个连接。 H2数据库会同步对同一连接的访问​​,但是其他数据库可能不会这样做。

H2可以处理超过32,000个远程数据库连接吗?

如果要同时从不同的进程或计算机访问同一数据库,则需要使用客户端/服务器模式。 JdbcConnectionPool类的默认最大连接数设置为10,但是它提供了一个设置器,可以根据需要进行更改。 从理论上讲,您可以将其设置为Integer.MAX_VALUE ,但是我认为这并不明智。 为什么? 对于初学者,同步点在上一节中进行了说明。 要考虑的另一点是,如果您的应用程序经常打开和关闭连接(例如,对于每个请求),则应考虑使用连接池。 打开数据库连接非常慢。

当然,放弃为所有客户拥有一个单一H2数据库的想法似乎是明智的

可能是这样,但是您必须记住,打开的数据库数受可用内存的限制。 如果您在功能强大的服务器上运行,则可能是一个不错的选择。 再说一次,可能不会。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM