MySQL和Hibernate同时读写

标签 mysql performance hibernate transactions load

我有一个网络应用程序,其中包含以下部分:

  1. 解说员通过基于浏览器的工具持续进行比赛解说。注释使用 hibernat 插入到数据库中。

  2. 许多用户正在访问 URL 来阅读评论。 Hibernate 正在从步骤 #1 中评论者更新的表中读取数据。

  3. 还有一些存储过程设置为每 1 小时运行一次。他们中很少有人访问同一个表(在步骤 #1 和 #2 中使用)来进行读取和写入/更新。

现在我的问题是,每当网站有超过 100 个并发用户观看特定比赛评论时,我的 MySQL 就会崩溃。它显示了进程列表中卡住的大量查询。其中许多处于“复制到临时表”状态。这使得JBOSS频繁重启。

我在 hibernate 中使用事务用于读取和写入目的。请帮忙,因为这些崩溃导致我失去了重要的比赛。

最佳答案

您遇到性能问题。很难给出始终有效的解决方案。您可以考虑做的是:

1)修改HQL(Hibernate)语句。为此,您可以使用<property name="show_sql">true</property>编写协议(protocol)。在配置文件中(如果您想查看实际参数,甚至可以使用 log4jdbc 等工具)并分析输出。在那里您可以看到哪些 SQL 请求最多。在许多情况下,更好的读写数据库数据的策略可以显着减少数据库流量。并检查您的表是否有良好的索引。

2) 考虑使用二级缓存。 (通常hibernate只使用一级缓存,这在你的情况下没有用,因为它绑定(bind)到一个 session 。)那么至少读取实际评论的请求可以由缓存提供服务,而不需要去数据库。 (注意:缓存可能会干扰存储过程,看看你喜欢使用的缓存产品是否支持MySQL存储过程。最坏的情况你必须删除关键表的存储过程,让你的应用服务器做作业,因此它会通过缓存。)

3) 如果只有几个频繁使用的表,您可以考虑通过应用程序缓存它们。这是更多的工作,但也许您可以完全满足应用程序的需求,因此您可能比一般的二级缓存更快。

4)如果没有任何帮助并且流量确实太大,那么也许您必须投资更多硬件。

祝你好运;-)

关于MySQL和Hibernate同时读写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10890774/

相关文章:

mysql - SQL计算一个表中单词在第二个表中的出现次数

ios - NSMutableArray 是如何在快速枚举中达到这么高的速度的

java - 设置对象时保留对象的值

mysql - 加入 4 个表,相互之间有很好的引用

php - 为什么检查重复用户名的代码无法正确执行?

python - 无法使用 pip3 在 Python 3.5.3 上安装 mysql-connector

c++ - CSV 解析器的性能瓶颈

java - Android CPU : double, 整数我如何计算有关系吗?在特定情况下什么更快?

java - 如何使用在应用程序的 main 方法中初始化的 Spring 提取 Hibernate DB 记录

java - JPA 中多列的不同