首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySql INSERT vs PHP file_put_contents

问MySql INSERT vs PHP file_put_contents
EN

Stack Overflow用户
提问于 2012-03-10 02:41:04
回答 6查看 1.4K关注 0票数 5

我有一个快速增长的、编写繁重的PHP/MySql应用程序,它以每秒十几行的速度将新行插入到包含数百万行的INNODB表中。

我从使用实时INSERT语句开始,然后使用PHP语言的file_put_contents将条目写入文件,并加载DATA INFILE以将数据放入数据库。哪种方法更好?

有什么我应该考虑的替代方案吗?我如何期望这两种方法在将来处理冲突和增加负载?

谢谢!

EN

回答 6

Stack Overflow用户

发布于 2012-03-10 02:44:19

可以将LOAD DATA INFILE看作是插入数据的批处理方法。它消除了为每个语句触发insert查询的开销,因此速度要快得多。但是,在处理错误时,您会失去一些控制。在单个insert查询上处理错误要比在文件中间处理一行容易得多。

票数 3
EN

Stack Overflow用户

发布于 2012-03-10 05:14:25

根据您是否能够承受由PHP插入的数据在表中不能立即可用,那么INSERT DELAYED可能是一个选择。

MySQL将接受要插入的数据,并在稍后处理插入,将其放入队列中。因此,这不会阻塞您的PHP应用程序,而MySQL可以确保稍后插入数据。

As it says in the manual:

使用插入延迟的另一个主要好处是,来自多个客户端的插入被捆绑在一起并写入到一个块中。这比执行许多单独的插入要快得多。

在数据丢失不是致命的情况下,我使用它来记录数据,但是如果您希望在尚未插入来自INSERT DELAYED的数据时避免服务器崩溃,您可以考虑将更改复制到专用的从机。

票数 2
EN

Stack Overflow用户

发布于 2012-03-10 02:49:41

我们处理插入的方式是将它们发送到像ActiveMQ这样的消息队列系统。从那里我们有一个单独的应用程序,它使用LOAD DATA INFILE以大约5000个为一批的方式加载插入。错误处理仍然可以与infile一起发生,但是它处理插入的速度要快得多。如果设置消息队列超出了您的应用程序的范围,那么file_put_contents没有理由不是一个可接受的选项--特别是如果它已经实现并且运行良好的话。

此外,您可能希望测试在写入期间禁用索引,以查看这是否会提高性能。

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

https://stackoverflow.com/questions/9639296

复制
相关文章

相似问题

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