我有一个上传位置,因此用户可以使用上传的文件更新我的数据库的一部分。文件通常高达9GB,因此插入150,000,000行可能需要几分钟。
点击网站上的按钮更新数据库后,PHP(使用mysqli)基本上就是mysql锁定了。如果我打开其他选项卡,则在大型更新完成之前,它们什么也得不到。 但是,我知道它实际上并没有锁定数据库/表,因为从CLI我仍然可以“SELECT count(*)FROM table”,它会立即给我一个结果。
插入150,000,000条记录的最佳方法是什么,同时仍允许其他php页面访问数据库(仅供阅读)?
答案 0 :(得分:1)
您可以使用" INSERT DELAYED"。 INSERT语句的DELAYED选项是标准SQL的MySQL扩展,如果您的客户端无法或不需要等待INSERT完成,那么它非常有用。当您使用MySQL进行日志记录时,这是一种常见情况,您还会定期运行需要很长时间才能完成的SELECT和UPDATE语句。
您可以在官方文档here上阅读有关此资源的信息。
- )
答案 1 :(得分:0)
问题出在会议上。
由于上传验证了会话中的登录,并且在启动db之前我没有遇到session_write_close(),因此会话文件保持锁定状态,以便对整个9gb读取/写入数据库。
这解释了为什么我仍然可以使用CLI mysql和基本的php(我用来测试的基本php没有会话)。