Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 服务器IO瓶颈-如何减少数据库读/写并仍然保留数据?_Java_Mysql_Spring_Concurrency - Fatal编程技术网

Java 服务器IO瓶颈-如何减少数据库读/写并仍然保留数据?

Java 服务器IO瓶颈-如何减少数据库读/写并仍然保留数据?,java,mysql,spring,concurrency,Java,Mysql,Spring,Concurrency,我们正在开发一个带有ApacheTomcat服务器集群和负载平衡器的web应用服务器。 我们的数据库是mySQL,我们在项目中使用spring框架 其中一项要求是能够维护10K并发用户请求 现在,这导致了一个真正的问题,因为在每个请求句柄中,我们都在执行以下操作: 1) 开始交易 2) 从数据库获取数据(如果需要) 3) 转换数据 4) 将数据持久化回数据库 现在,显然这是这个过程的一个主要IO瓶颈。如果我们使用内存中的DB,它将显著提高性能 更明显的是,现在的服务器可以维持高流量,并完成我上面

我们正在开发一个带有ApacheTomcat服务器集群和负载平衡器的web应用服务器。 我们的数据库是mySQL,我们在项目中使用spring框架

其中一项要求是能够维护10K并发用户请求

现在,这导致了一个真正的问题,因为在每个请求句柄中,我们都在执行以下操作:

1) 开始交易

2) 从数据库获取数据(如果需要)

3) 转换数据

4) 将数据持久化回数据库

现在,显然这是这个过程的一个主要IO瓶颈。如果我们使用内存中的DB,它将显著提高性能

更明显的是,现在的服务器可以维持高流量,并完成我上面提到的所有事情。所以必须有一个更好的架构来处理这些请求,对吗

有什么想法吗?推荐人


谢谢

如果您的数据库访问中存在IO瓶颈,您应该使用缓存。常见的开源java缓存有(通常是JBoss缓存或

当大多数请求都是只读的并且涉及相同的数据时,缓存可以提供显著的性能改进。如果每个请求都读取和写入不同的元素,那么收益就会小得多


有不同的缓存体系结构,这取决于数据是否大部分是只读访问的,是否有单个web服务器或群集等。根据您的应用程序要求,您的里程数会有所不同…您必须自己尝试。

正如@Serge指出的,缓存对只读数据非常有效。我从未体验过项目要求记住10k并发写入。如果您的要求是以一种从节点恢复的方式存储会话数据,那么您可以查看Apache Zookeeper。但是,由于您的问题更多地是关于减少数据库访问,因此最好的提示是查看ehcache。它也可以用作冗余存储节点。因为您使用的是usibg Spring hav看看板载的@cacable特性。也许你的解决方案是缓存整个请求


另一种选择是在主/从模式下使用Maria db。

使用ehcache缓存?但是如果tomcat节点崩溃会发生什么?我的逻辑现在与缓存一起消失了?tomcat节点崩溃会怎么样?我的所有数据都会丢失?ehcache在写入db时如何帮助是瓶颈?ThomasJungblut首先,OP谈到IO瓶颈(读+写…).Ehcache至少在读取时有望提高性能。根据您的一致性要求,Ehcache支持写后模式,如果多个写操作涉及同一个元素,则该模式仍可能提高性能。当然,如果每个请求涉及不同的元素,则无需缓存任何内容,而增益可能仅涉及一个元素数据。。。