gpt4 book ai didi

php - 使用 PostgreSQL 或 Mysql 的 SQL 查询进度

转载 作者:可可西里 更新时间:2023-11-01 06:48:26 24 4
gpt4 key购买 nike

简介

大家好。在从事 Web 应用程序管理方面的工作时,我经常发现自己遇到了以我目前的知识从未解决过的问题。在我的应用程序中,由于复杂的查询和大量的数据,大多数数据提取过程都是持久的。事实上,通过 PHP 提取数据的等待时间主要由 QUERY EXECUTION 花费(在大多数情况下)。假设我们有这种常见的情况

enter image description here

问题

此时我的问题是:是否有一种解决方案可以了解查询执行过程到达的时间点,然后进行查询跟踪以获得我的 [PROGRESS QUERY %]?

我的解决方案

到目前为止,我使用的解决方案是:“查询时间历史记录”

当我使用特定参数运行数据提取查询时,我将查询的持续时间保存在表中,每次使用这些参数执行该查询时,我都会用所有持续时间的平均值覆盖重新安排的持续时间。所以我可以根据平均值进行估计,显然忽略可能影响查询持续时间的其他参数,我可以根据估计的秒数调用客户端函数并填充 [PROGRESS QUERY %]。

示例:(我使用 boostrap 进度条进行查看)

HTML

<!-- where "data-seconds" are the average seconds of the execution saved in my query time history table -->
<button type="button" id="runQuery" data-seconds="500">Get Data</button>
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width:0%">
</div>
</div>

JavaScript

$("#runQuery").on("click", function() {
var currentSeconds = 0;
var totalSeconds = parseFloat($(this).data("seconds"));
var $progressBar = $(".progress-bar");
var progressPercentage = 0;
var execution;

$.ajax({
url: "scriptForQueryExecution.php", type: "POST", beforeSend: function() {
execution = setInterval(function() {
progressPercentage = currentSeconds / totalSeconds * 100;
$progressBar.css("width", progressPercentage + '%').attr("aria-valuenow", progressPercentage);

currentSeconds++;
}, 1000);
}, success: function() {
$progressBar.css("width", '100%').attr("aria-valuenow", 100);
clearInterval(execution);
}
});
});

最佳答案

MariaDB 通过 SHOW PROCESSLISTINFORMATION_SCHEMA.PROCESSLIST 在他们的进程列表中支持“进度报告”,它们用 5-第二个间隔(默认)。详情可在此处找到:https://mariadb.com/kb/en/library/progress-reporting/ .

PostgreSQL 也支持进度报告,尽管只针对 VACUUM 命令:https://www.postgresql.org/docs/9.6/static/progress-reporting.html

您需要做的就是使用单独的 XHR 请求查询此信息,并使用 CSS 动画为您的进度指示器设置动画。

关于php - 使用 PostgreSQL 或 Mysql 的 SQL 查询进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47355528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com