php批量写入MySQL的第二方法
2011-04-22 17:22
393 查看
之前在一个出入库的系统里用了Sqlbulkcopy函数来进行对数据批量写入到SQL Server里,效果非常好,比传统的Insert into的效率高了很多。于是在对php批量写入到MySQL这个问题上,有了“块写入”的想法。对于php的了解并不多,只是配合我的师傅阿明,来解决大数据批量写入慢的问题。
写入MySQL的是用Load的方法,该方法的执行机制是先将数据生成为一个.txt的文本文件,然后通过导入到MySQL来实现写入操作的。可以来分析一下,其实整个操作包含两个步骤:
1、将数据生成为磁盘上的一个文本。(第一次写入磁盘)
2、将这个文本导入到目标数据库。(第二次写入磁盘)给一个代码片段:
看到了,一共是两次的磁盘操作。我们知道目前,计算机最大的瓶颈是磁盘,那么这里对“瓶颈”进行了两次操作,这个导致的结果必须是慢啊,无尽的慢————囧。文档都找到MSDN上了,看到.NET有一个MemoryStream的函数,是一个流操作,把信息写入到内存里。这个方法让我想到了,如果在生成的操作可以在内存里执行,那么整个行为就会快很多。
可是,问题又来了,数据是生成在内存里,但是没有办法知道写入的内存地址,无法读到数据。。。于是这样一个方法出现了,我把它叫做:php批量写入MySQL的第二方法。为什么怎么叫,因为我对php了解不多,兴许有更好的方法说不定。不卖关子,直接坦白:利用Ramdisk(虚拟硬盘软件)虚拟出一个内存盘,将第一步的操作放在这个内存盘里执行。可以来看一下:
来看一下这个“磁盘的性能”:
用红线框框这的,一个是平均读取速度,一个是突发读取速度,很惊人,任何一个硬盘都达不到的传输率。也就是这个盘解决了,生成一亿条数据,再写入到数据库的短时操作。姑且就叫做第二方法吧~
写入MySQL的是用Load的方法,该方法的执行机制是先将数据生成为一个.txt的文本文件,然后通过导入到MySQL来实现写入操作的。可以来分析一下,其实整个操作包含两个步骤:
1、将数据生成为磁盘上的一个文本。(第一次写入磁盘)
2、将这个文本导入到目标数据库。(第二次写入磁盘)给一个代码片段:
$sql="load data infile '$filepath' into table ".$table." character set gbk fields terminated by ':|' lines terminated by ',' (`id`,`name`,`age`);"; $db->ExcNonQuery($sql);
看到了,一共是两次的磁盘操作。我们知道目前,计算机最大的瓶颈是磁盘,那么这里对“瓶颈”进行了两次操作,这个导致的结果必须是慢啊,无尽的慢————囧。文档都找到MSDN上了,看到.NET有一个MemoryStream的函数,是一个流操作,把信息写入到内存里。这个方法让我想到了,如果在生成的操作可以在内存里执行,那么整个行为就会快很多。
可是,问题又来了,数据是生成在内存里,但是没有办法知道写入的内存地址,无法读到数据。。。于是这样一个方法出现了,我把它叫做:php批量写入MySQL的第二方法。为什么怎么叫,因为我对php了解不多,兴许有更好的方法说不定。不卖关子,直接坦白:利用Ramdisk(虚拟硬盘软件)虚拟出一个内存盘,将第一步的操作放在这个内存盘里执行。可以来看一下:
来看一下这个“磁盘的性能”:
用红线框框这的,一个是平均读取速度,一个是突发读取速度,很惊人,任何一个硬盘都达不到的传输率。也就是这个盘解决了,生成一亿条数据,再写入到数据库的短时操作。姑且就叫做第二方法吧~
相关文章推荐
- php从memcache读取数据再批量写入mysql的方法
- php从memcache读取数据再批量写入mysql的方法
- php从memcache读取数据再批量写入mysql的方法
- php从memcache读取数据再批量写入mysql的方法
- php从memcache读取数据再批量写入mysql的方法
- php+mysqli实现批量执行插入、更新及删除数据的方法
- Java实现批量向mysql写入数据的方法
- PHP执行批量mysql语句的解决方法
- php 写入数据到MySQL以及从MySQL获取数据,页面出现乱码的解决方法
- PHP执行批量mysql语句的解决方法
- 分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
- PHP连接MySQL数据库;mysql中update批量修改与替换语句
- 编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
- php 连接mysql连接被重置的解决方法
- php逐行读取txt文件写入数组的方法
- 编译安装php时提示Cannot find MySQL header files的解决方法
- ubuntu彻底干净卸载MySQL、Apache2、Php的方法
- 批量杀死MySQL连接的几种方法
- Mac OS下PHP环境搭建及PHP操作MySQL常用方法小结
- php更新mysql后获取改变行数的方法