如何解决MySQL 和 Wicket:并行执行多个查询
我有访问 MysqL (5.7) 数据库的 Wicket (8.6) 应用程序。在spring-context.xml中建立MysqL连接如下:
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"
destroy-method="close">
<property name="dataSourceClassName" value="com.MysqL.cj.jdbc.MysqLDataSource" />
<property name="maximumPoolSize" value="5" />
<property name="maxLifetime" value="90000" />
<property name="idleTimeout" value="90000" />
<property name="connectionTimeout" value="90000" />
<property name="dataSourceProperties">
<props>
<prop key="url">jdbc:MysqL://${db.url}/${db.name}?useGmtMillisForDatetimes=true&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8</prop>
<prop key="user">${db.username}</prop>
<prop key="password">${db.password}</prop>
<prop key="prepStmtCacheSize">250</prop>
<prop key="prepStmtCachesqlLimit">2048</prop>
<prop key="cachePrepStmts">true</prop>
<prop key="useServerPrepStmts">true</prop>
</props>
</property>
</bean>
我有一个问题,我需要执行一个很长的 sql 查询,根据所选的时间范围,该查询很容易花费几分钟。我已经体验到,在执行查询时,整个 wicket 应用程序会减慢到这一点,不再执行其他查询。顺便说一句:长查询只是一个阅读查询。所以它不应该锁定一个表。
如果有人能帮助我改进 wicket 和 MysqL 之间的连接,我将不胜感激,这样我在执行长查询时仍然可以运行多个查询。我对MysqL的配置不是很熟悉
以下是 my.cnf 文件中的一些设置:
skip-external-locking
innodb_file_per_table = 1
innodb_file_format = Barracuda
internal_tmp_disk_storage_engine=MyISAM
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
query_cache_limit = 1M
query_cache_size = 16M
解决方法
您遇到的问题是您在长时间的 SQL Select 操作中保持 HTTP 连接。
Wicket 最多允许一个请求到一个 Page 实例。 IE。单击按钮/链接 Get data
后,它将向特定页面实例(由 url 中的页面 ID 参数 ?123&...
标识)发出 HTTP 请求,并且直到 SQL 操作返回用户无法发出对相同页面实例的另一个请求。用户可以向其他页面实例发出请求或创建新的页面实例!
如何解决问题?
- 更改您的按钮/链接 #onClick() 回调方法以向 MySQL 发出异步请求,即在新线程中。这样 HTTP 处理线程可以继续并返回空响应。
- 将数据库结果存储在某个临时位置,例如在内存中,在临时数据库表中,...
- 一旦可用就显示数据
- 一种简单的方法是使用
AbstractAjaxTimerBehavior
每隔几秒轮询一次数据库结果。结果准备好后,只需通过更新一些不可见的 Wicket 组件(例如 DataTable)的模型来呈现它,并通过AjaxRequestTarget#add(table)
显示它
- 使用 Wicket Native WebSocket 尽快发送 DB 结果。这样就不需要临时存储结果。你甚至可以流式传输它
- 一种简单的方法是使用
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。