首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批量数据处理技术

批量数据处理技术
EN

Stack Overflow用户
提问于 2011-10-04 19:57:10
回答 3查看 1K关注 0票数 0

我正在寻找一种技术来做以下事情,我需要你的建议。我有一个巨大的(真的)注册ID表,我需要向这些ID所有者发送消息。我不能一次发送消息给许多收件人,这需要一个接一个地进行。所以我想有一个脚本(Php),可以运行在许多并行实例(进程)通过获得一定数量的数据库和处理它。换句话说,每个进程都需要处理特定范围的数据。我还想停止每个进程,并能够继续从被停止的用户发送消息到另一组尚未收到消息的用户。如果可能的话?欢迎任何提示和建议。

EN

回答 3

Stack Overflow用户

发布于 2011-10-04 20:14:28

您可能希望设置cron作业,这通常是使用PHP脚本运行大型批处理操作的最佳方法之一:

http://www.developertutorials.com/tutorials/php/running-php-cron-jobs-regular-scheduled-tasks-in-php-172/

您的cron作业需要指向执行以下操作的PHP脚本:

  1. 根据在#3 (如下)设置的标志从大型数据库表中选择收件人的子集,以标识要处理的下一批处理
  2. 向那些选定的收件人发送电子邮件以记录当前工作职位的成功/失败(即,您可以在数据库中每个成功发送邮件的收件人旁边设置一个标记,然后在重新运行作业时不会选择这些标记)
票数 0
EN

Stack Overflow用户

发布于 2011-10-04 20:14:29

只有在服务器的配置范围内,才能进行并行处理。许多服务器可以以并行方式提供页面服务,但话又说回来,它仅限于少数几个。相反,经验法则是尽可能快地跳到下一个请求。

关于您在数据库中处理非常大的数据列表。您首先需要一个id列表,用于您正在执行的邮件:

代码语言:javascript
复制
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的情况下,您只需向数据库添加两个字段,一个是进程is,另一个是lockedon字段。当您想要锁定某些地址以进行处理时,请执行以下操作:

代码语言:javascript
复制
$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行,并在当前时间,使用以下命令选择锁定的行:

代码语言:javascript
复制
mysql_query('SELECT * FROM mymailinglisttable WHERE mypid = '.$mypid.' AND lockedon = "'.$now.'")

您将检索已正确锁定以进行处理的3行。我倾向于使用这个版本而不是innodb版本,因为我是用这种方法长大的,但并不是因为它的性能更好,实际上,我确信InnoDB的版本要好得多,只是从来没有尝试过。

票数 0
EN

Stack Overflow用户

发布于 2011-10-04 20:16:11

如果您习惯于使用PEAR模块,我建议您看看pear Mail_Queue模块。

http://pear.php.net/package/Mail_Queue

有很好的文档和很好的教程。我以前用过一个修改过的版本,向客户发送了数千封电子邮件,但它还没有给我带来问题:

http://pear.php.net/manual/en/package.mail.mail-queue.mail-queue.tutorial.php

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7647536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档