我有一个脚本,可以每秒查询数据库多次。
例如,要每小时实现 36,000个查询,我们在脚本中每分钟输入 600个查询。 600 x 60 = 36,000
这是我们得到的输出,您可以看到每个查询之间的延迟
{1} [2019-11-06 21:38:01.313]
{1} [2019-11-06 21:38:01.413]
{1} [2019-11-06 21:38:01.513]
{1} [2019-11-06 21:38:01.613]
{1} [2019-11-06 21:38:01.713]
{1} [2019-11-06 21:38:01.813]
我的问题是,因为有等待时间,我们错过了0.0100。
每分钟的费率=不同,我们可以将其更改为每分钟最多960个查询,但我们希望fourmla可以在0-960之间灵活设置。
我的$ wait_time =(1 / $ rpm)* 60 * 1(连接); (最多4个连接)等待时间根据连接数而增加
有人知道如何减少查询之间的等待时间吗?
谢谢
这是代码行
我的$ wait_time =(1 / $ rpm)* 60 * 1;
所以当我每分钟输入600个查询
此代码行根据我们拥有的连接数计算等待时间
我的$ wait_time =(1/600)* 60 * 1;
1/600 * 60 * 1 =等待:0.1
答案 0 :(得分:1)
嗯,您对查询的处理需要时间。如果我能正确地解释您的问题,那么一个脆弱的解决方案是测量当前处理所花费的时间,并从下一个睡眠时间中减去该时间。如果处理时间等于或超过睡眠时间,那当然会中断。
一种干净的解决方案是拥有一个专用的主循环,除了在单独的线程中休眠和触发查询外,什么都不做。
答案 1 :(得分:0)
我不确定这是否会有所帮助,因为我很难理解您的问题。我认为您担心自己的查询速度没有达到期望的水平。
可能是因为您认为等待时间是静态的。 等待时间不是静态的,这取决于上一个查询花费的时间,而间隔是静态的。
use Time::HiRes qw( time sleep ); # Add support for fractional times.
my $interval = (1 / $qpm) * 60 * 1; # In (fractional) seconds.
my $next_run = time;
while (1) {
my $wait = $next_run - time;
sleep($wait) if $wait > 0;
$next_run += $interval;
... do work ...
}