仅在您的服务器配置范围内可以进行并行处理。许多服务器可以以并行方式提供页面,但话又说回来,它仅限于少数。相反,经验法则是尽可能快地跳转到下一个请求。
关于您对数据库中非常大的数据列表的处理。您首先需要一个您正在发送的邮件的 id 列表:
INSERT INTO `mymailinglisttable` (mailing_id, recipient_id, senton) SELECT 123 AS mailing_id, mycontacttable.recipient_id, NULL FROM mycontacttable WHERE [insert your criterias for your contacts]
接下来,您将需要使用 innodb 或一些巧妙的逻辑来进行并行处理:
使用 InnoDB,您可以进行一些行级锁定,但不要问我如何,自己搜索,我根本不使用 InnoDB,但我知道这是可能的。因此,您阅读了相关文档,选择并锁定了一些行,发送电子邮件,标记为已发送,然后通过回调您自己的脚本来重复操作。 (使用 AJAX 或使用 php 套接字)
没有 InnoDB,您可以简单地向数据库添加 2 个字段,一个是 processid,另一个是 lockon 字段。当您想锁定某些地址以进行处理时,请执行以下操作:
$mypid = getmypid().rand(1111,9999);
$now = date('Y-m-d G:i:s');
mysql_query('UPDATE mymailinglisttable SET mypid = '.$mypid.', lockedon = "'.$now.'" LIMIT 3');
这将为您的 pid 锁定 3 行,并在当前时间,选择被锁定的行:
mysql_query('SELECT * FROM mymailinglisttable WHERE mypid = '.$mypid.' AND lockedon = "'.$now.'")
您将检索正确锁定的 3 行以进行处理。我倾向于使用这个版本而不是 innodb 版本,因为我是用这种方法长大的,但不是因为它性能更高,实际上,我确信 InnoDB 的版本要好得多,只是从未尝试过。