2011-12-05 33 views
3

在我的php脚本中,我使用PDO将csv数据插入到数据库中。无需等待即可将数据插入数据库

$sqlsmttempl = 'INSERT INTO %s (%s) VALUES (%s)';

但花了相当长的时间只是几千我records.How可以阻止客户端等待插入?

我试过INSERT DELAYED,它没有任何错误,但它似乎没有任何反应。

有什么提示吗?谢谢。

+0

你是什么意思“我试过INSERT DELAYED',它没有任何错误,但它似乎没有任何反应。”?你期望发生什么不是? –

+0

@FrancisAvila当表未被任何其他线程使用时,数据将被插入吗?我从这里阅读:http://dev.mysql.com/doc/refman/5.5/en/insert-delayed.html –

+0

但是你认为“看起来没有反应”是什么意思? 'INSERT DELAYED'将总是报告一个成功的插入,不管它是什么,因为它不知道在插入之前是否有错误,现在也不能插入。 –

回答

1

没有客户端等待服务器完成处理的唯一方法是在您发送响应后在另一个进程中进行处理。

INSERT DELAYED是一个快速和肮脏的方式来做到这一点。要插入的数据库行将由MySQL排队并稍后插入。这意味着没有办法检测或处理值错误,因为在​​该行尚未实际插入之后。循环访问csv并发出查询必须在客户端等待时完成。

如果这仍然太长,您将需要构建或使用某种假脱机或任务队列。在这种设计中,请求被接受,然后传递给长时间运行的进程或放置在目录中,并立即发送Web响应。同时,在服务器上运行的另一个进程获取请求,处理它们,然后在某处记录状态(例如数据库表)。应该有另一页用户可以去监视他们的任务状态。

+0

感谢您的回答。即使我在处理之前向客户端发送消息,网站仍会继续加载并挂起,以便他们无法访问其他页面,直到完成处理。因此,我可以为此问题做些什么? –

+0

您或者误解了我的答案,或者您有其他问题。您向客户发送“我们将处理此消息”消息,然后**关闭响应**。 * webserver *不处理请求,*另一个进程*。 –