分配负载


Distribute Load

>假设我有一个包含 5 个电子邮件地址的数据库,并且我有一个联系表单。

每次用户提交联系表单时,表单都需要将详细信息提交到我存储的电子邮件地址之一。我可以处理这个问题,但我开始对如何让它*与电子邮件共享提交感到困惑。

即。我需要在电子邮件地址之间分担负载。每次提交联系表单时,它都需要发送到"我的表"中的下一个电子邮件地址。然后在到达最后一封电子邮件时从头开始。

抱歉,如果这是一个严肃的初学者问题,我似乎想不出最好的方法。

您可以考虑电子邮件表中一个名为 sendcount 的额外列,默认值为 0。在要查找要向其发送电子邮件的地址的脚本中,执行以下操作:

//Get email with least counts
$query="SELECT * FROM emails ORDER BY sendcount ASC LIMIT 1";
$result=mysql_query($query);
$object=mysql_fetch_object($result); //This will store the required email address in $object->email
//Send email...
//Increase counter by one
$query="UPDATE emails SET sendcount=sendcount+1 WHERE id=".$object->id;
mysql_query($query);

这样,您将始终将电子邮件发送到计数最少的地址!

我想

到了两个选项:

  1. 只需从数组中随机选择一个电子邮件地址,无需按顺序将它们发送到每封电子邮件即可。这将更容易实现,并且会大规模为您提供相同的结果。

    $my_emails = array('anemail', ...);
    $selected_email = $my_emails[array_rand($my_emails)];
    
  2. 每次发送电子邮件时增加一个计数器,将值保留在数据库表或文件或其他东西中,然后使用计数器的模数和您必须选择的电子邮件数量来选择电子邮件,例如

    $counter = fetch_counter();
    $my_emails = array('anemail', ...);
    $index = ($counter + count($my_emails)) % count($my_emails);
    $selected_email = $my_emails[$index];
    $counter++;
    store_counter($counter);
    

我已经很多年没有编写PHP了,所以YMMV。你已经被警告;)

您可以尝试找出提交的相似之处并分享。然后,您可以构建一棵树并使用贪婪算法来分发电子邮件。该问题看起来像是垃圾箱打包或虚拟机共享。