分配负载

时间:2012-08-11 13:14:07

标签: php mysql

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

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

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

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

3 个答案:

答案 0 :(得分:1)

有两种选择:

  1. 只需从您的阵列中选择一个随机的电子邮件地址,不要费心将它们按顺序发送到每封电子邮件。这将更容易实现,并将在规模上为您提供相同的结果。

    $my_emails = array('anemail', ...);
    $selected_email = $my_emails[array_rand($my_emails)];
    
  2. 每次发送电子邮件时递增计数器,将值保存在db表或文件中,然后使用计数器的模数和您必须选择的电子邮件数来选择电子邮件,例如

    $counter = fetch_counter();
    $my_emails = array('anemail', ...);
    $index = ($counter + count($my_emails)) % count($my_emails);
    $selected_email = $my_emails[$index];
    $counter++;
    store_counter($counter);
    
  3. 我没有编程PHP多年,所以YMMV。你已被警告;)

答案 1 :(得分:1)

您可以在电子邮件表格中考虑名为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);

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

答案 2 :(得分:0)

您可以尝试找出提交内容的相似之处并分享。然后,您可以构建一个树并使用贪婪算法来分发电子邮件。问题看起来像bin-packing或vm共享。