Java 服务器IO瓶颈-如何减少数据库读/写并仍然保留数据?
我们正在开发一个带有ApacheTomcat服务器集群和负载平衡器的web应用服务器。 我们的数据库是mySQL,我们在项目中使用spring框架 其中一项要求是能够维护10K并发用户请求 现在,这导致了一个真正的问题,因为在每个请求句柄中,我们都在执行以下操作: 1) 开始交易 2) 从数据库获取数据(如果需要) 3) 转换数据 4) 将数据持久化回数据库 现在,显然这是这个过程的一个主要IO瓶颈。如果我们使用内存中的DB,它将显著提高性能 更明显的是,现在的服务器可以维持高流量,并完成我上面提到的所有事情。所以必须有一个更好的架构来处理这些请求,对吗 有什么想法吗?推荐人Java 服务器IO瓶颈-如何减少数据库读/写并仍然保留数据?,java,mysql,spring,concurrency,Java,Mysql,Spring,Concurrency,我们正在开发一个带有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支持写后模式,如果多个写操作涉及同一个元素,则该模式仍可能提高性能。当然,如果每个请求涉及不同的元素,则无需缓存任何内容,而增益可能仅涉及一个元素数据。。。