加权支付网关旋转器

时间:2010-11-11 03:35:49

标签: php mysql database-design

所以我的新使命(笑)。我正在寻找创建一个旋转支付网关的脚本,例如我将在数据库中添加5个支付网关,并且必须像负载均衡器一样为它们提供总计高达100%的权重。什么是最好的方式,我应该如何构建数据库,以使一个网关获得为该支付网关ID设置的任何权重百分比。如果你能带领我朝着正确的方向前进,或者有任何好的教程,那将非常感激

1 个答案:

答案 0 :(得分:1)

我的想法: 给每个网关一个"命中"柱。包含人们使用它的次数。百分比列 - 每个网关的所需权重。 所以表是: 名称:网关 列:网关,点击率,百分比

然后在向用户发送网关之前,总结所有网关的所有命中,然后将总命中数除以每个网关的命中数,并将值存储在数组中。阵列的结果实际上是网关的当前百分比。然后发送网关,其中所需百分比和当前百分比之间的差异最大。在PHP中,在连接到数据库后,它看起来像这样:

$cur_perc_query=mysql_query("SELECT * FROM gateways");
$totalhits=0;
while ($cur_get=mysql_fetch_array($cur_perc_query)) {
$totalhits+=$cur_get['Hits'];
}
while ($cur_get=mysql_fetch_array($cur_perc_query)) {
$gate_perc[]=$cur_get['Percentage']-($totalhits/$cur_get['Hits']);
}
$highest=$gate_perc[0];
$gate_number=0;
foreach($gate_perc as $numb => $value) {
if ($highest<$value) { $highest=$value; $gate_number=$numb; }
}
$count=0;
while ($cur_get=mysql_fetch_array($cur_perc_query)) {
if ($count=$gate_number) { $chosen_gate=$cur_get['Gateway']; }
$count++;
}
echo $chosen_gate;

我没有测试过,但它应该以这种方式工作。 您需要做的另一件事是每次用户使用它时,将当前网关的命中数加1。 希望这有帮助。