0

我有一个上传位置,因此用户可以使用上传的文件更新我的数据库的一部分。这些文件通常高达 9gb,因此插入 150,000,000 行可能需要几分钟时间。

单击网站上的按钮更新数据库后,PHP(使用mysqli)基本上会进入mysql lock down。如果我打开其他选项卡,在大更新完成之前它们什么也得不到。但是,我知道它实际上并没有锁定数据库/表,因为从 CLI 我仍然可以“SELECT count(*) FROM table”并且它马上给了我一个结果。

插入 150,000,000 条记录同时仍让其他 php 页面访问数据库(只读)的最佳方法是什么?

4

2 回答 2

1

您可以使用“插入延迟”。INSERT 语句的 DELAYED 选项是标准 SQL 的 MySQL 扩展,如果您的客户端无法或不需要等待 INSERT 完成,则该选项非常有用。当您使用 MySQL 进行日志记录并且您还定期运行需要很长时间才能完成的 SELECT 和 UPDATE 语句时,这是一种常见的情况。

您可以在此处的官方文档中阅读有关此资源的信息。

;-)

于 2013-04-08T22:01:01.660 回答
0

问题在于会话。

由于上传验证了会话中的登录,并且在开始数据库写入之前我未能 session_write_close() 写入会话文件在整个 9gb 读取/写入数据库时​​保持锁定。

这解释了为什么我仍然可以使用 CLI mysql 和基本 php(我用来测试的基本 php 中没有会话)。

于 2013-04-09T16:56:07.097 回答