当前位置: 首页 > 知识库问答 >
问题:

MySQL和Wicket:并行执行多个查询

谢正初
2023-03-14

我有访问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&amp;serverTimezone=UTC&amp;useUnicode=true&amp;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应用程序会减慢到这样的程度,即不再执行其他查询。顺便说一句:长查询只是一个读取查询。所以它不应该锁定一个表。br>如果有人能帮助我改进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

共有1个答案

商佑运
2023-03-14

您遇到的问题是,在SQL Select操作的很长一段时间内,您保持了HTTP连接。

Wicket最多允许对一个页面实例提出一个请求。即。单击按钮/链接 后,它将向特定的页面实例发出HTTP请求(由url中的页面id参数 ),在SQL操作返回之前,用户不能向相同的页面实例发出另一个请求。用户可以向其他页面实例发出请求,也可以创建新的实例!

如何解决问题?

    ior ode=""> 每隔几秒钟轮询一次DB结果。一旦结果准备就绪,只需通过更新某个不可见的Wicket组件(如DataTable)的模型来呈现它,并通过 显示它
 类似资料:
  • 问题内容: 我有以下方法: 在这里,我依次调用三种方法,这依次命中数据库并获取我的结果,然后对从数据库命中获得的结果进行后处理。我知道如何通过使用并发调用这三种方法。但是我想用Java 8 来实现。有人可以指导我如何通过并行流实现相同目标吗? 编辑 我只想通过Stream并行调用方法。 问题答案: 您可以利用这种方式:

  • 问题内容: 我要查询所有10个表以从中获取用户ID,并将所有用户ID加载到HashSet中,以便可以拥有唯一的用户ID。 截至目前,它是按顺序进行的。我们转到一个表,并从中提取所有user_id并将其加载到哈希集中,然后将其存储在第二个和第三个表中并继续运行。 有什么方法可以使这个多线程的,以便他们为每个表并行地从我的表中获取数据?最后,我需要哈希集,该哈希集应具有所有10个表中的所有唯一用户ID

  • 问题内容: 我正在将MySQL Workbench CE用于Windows 5.2.40版。 我想一起执行以下SQL查询。不过我只能先执行执行的SQL查询查询,然后执行查询,之后执行查询。 那么,如何执行,并通过点击查询? 问题答案: 在每个语句后添加分号:

  • 我为每个日期创建了多个表来存储每个日期的一些信息。例如历史3108、历史0109..所有这些表共享相同的模式。有时候,我需要查询多个表,获取记录的行数和计数。在oracle和SQL Server中,最快的方法是什么? 目前我正在这样做。。。 当我需要多个表的计数时:为每个表选择计数(*),然后添加 当我需要多个表的记录时:从表1中选择*,从表2中选择*(基本上为每个表选择*) 如果我们在一个事务中

  • 我使用MySQL工作台CE为Windows版本5.2.40。 我想一起执行以下SQL查询。但是,我只能通过首先执行查询,然后执行查询,然后执行查询来执行SQL查询。 那么,我如何通过单击来执行< code >创建表 、< code >插入和< code >选择查询呢?

  • 问题内容: 我有24个数据库,其中的表标记为。 我有另一个数据库,其中包含该表的所有数据库的列表。 我遍历数据库列表并查询我的表以为每个数据库发送邮件。 这个问题是,PHP脚本被搁置了,比方说,第3个数据库,同时发送500封电子邮件,然后离开其他数据库等待轮到他们。 我试图弄清楚如何同时查询所有24个数据库并同时发送电子邮件队列。 有什么建议? 问题答案: 使用curl_multi_open可以做