在使用PhpMyAdmin的时候经常用到数据的导入和导出(Export/Import),但是在导入大数据的时候由于php上传文件的限制和脚本响应时间的限制,导致phpMyAdmin无法导入大数据。很多时候都是由于文件过大,从本地浏览上传导入,容易中断失败,有没有更好的方法呢?
成都创新互联专业为企业提供点军网站建设、点军做网站、点军网站设计、点军网站制作等企业网站建设、网页设计与制作、点军企业网站模板建站服务,10多年点军做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
方法:
在phpMyAdmin的目录下,找到根目录的config.inc.php文件,
打开config.inc.php文件,查找$cfg['UploadDir'],这个参数就是设定导入文件存放的目录,这里把值设定为:ImportSQLFile。
在phpMyAdmin目录下,建立以ImportSQLFile命名的文件夹,
把我们需要导入的数据文件,放到ImportSQLFile文件夹下面,非常简单,
登入phpMyAdmin,选择需要导入的数据,点击导航条上面的“导入”按钮,
选中“从网站服务器上传文件夹ImportSQLFile/中选择:”选项,并需要导入的数据文件,
最后点击“执行”,即可导入成功。
注意事项
如果在config.inc.php文件,没有找到$cfg['UploadDir'],可以自己在文件中添加上去即可。
大数据对于我们这些从业者来说,是不太喜欢说的一个词。所谓内行看门道,外行看热闹,大数据这两年风风火火,大家都争先恐后的讨论着,但说到如何掌握或者运用,很多人是不知所措的。
私以为,大数据的核心在三个地方:数学+计算机知识+业务
先说说题主说到的编程,我在这里将它纳入计算机知识这一部分,因为编程对于我们来说只是大数据的冰山一角。这两年大数据的发展,绝对不是因为编程语言的进步,很大一部分是由于计算机工具的进步或者硬件的提升。 尤其是现在计算机硬件价格的下跌,以及大数据处理工具的发展,如hadoop,spark等,带来了数据处理能力的飞速提升,才导致了现在大数据的越来越火。
至于我们说的数据挖掘知识和编程语言,这些都是很早以前就已经存在的知识,这几年也没有得到很令人惊喜的新进展(我说的是知识本身,不是指应用)。
总之: 大数据之所以得到人们关注,最重要的是数据处理工具的进步以及数据量的累积(尤其是互联网)
那么是不是说明 掌握编程或者计算机工具就是迈入大数据的关键路径呢?
答案:显然不是,数学才是真正的核心知识。
没错,数学是在数据挖掘领域非常重要的甚至是核心的部分,编程只是工具,真的只是工具。 编程语言有好几十种吗,但是数据挖掘理论知识就那儿点。 你用任何一门语言去实现你的数学思想便可以达到数据挖掘的目标。 学术研究甚至可以抛弃编程,完全只研究算法(注意:这样的话会容易造成纸上谈兵)。
1、建议你读写数据和下载图片分开,各用不同的进程完成。
比如说,取数据用get-data.php,下载图片用get-image.php。
2、多进程的话,php可以简单的用pcntl_fork()。这样可以并发多个子进程。
但是我不建议你用fork,我建议你安装一个gearman worker。这样你要并发几个,就启几个worker,写代码简单,根本不用在代码里考虑thread啊,process等等。
3、综上,解决方案这样:
(1)安装gearman worker。
(2)写一个get-data.php,在crontab里设置它每5分钟执行一次,只负责读数据,然后把读回来的数据一条一条的扔到 gearman worker的队列里;
然后再写一个处理数据的脚本作为worker,例如叫process-data.php,这个脚本常驻内存。它作为worker从geraman 队列里读出一条一条的数据,然后跟你的数据库老数据比较,进行你的业务逻辑。如果你要10个并发,那就启动10个process-data.php好了。处理完后,如果图片地址有变动需要下载图片,就把图片地址扔到 gearman worker的另一个队列里。
(3)再写一个download-data.php,作为下载图片的worker,同样,你启动10个20个并发随便你。这个进程也常驻内存运行,从gearman worker的图片数据队列里取数据出来,下载图片
4、常驻进程的话,就是在代码里写个while(true)死循环,让它一直运行好了。如果怕内存泄露啥的,你可以每循环10万次退出一下。然后在crontab里设置,每分钟检查一下进程有没有启动,比如说这样启动3个process-data worker进程:
* * * * * flock -xn /tmp/process-data.1.lock -c '/usr/bin/php /process-data.php /dev/null 21'
* * * * * flock -xn /tmp/process-data.2.lock -c '/usr/bin/php /process-data.php /dev/null 21'
* * * * * flock -xn /tmp/process-data.3.lock -c '/usr/bin/php /process-data.php /dev/null 21'
不知道你明白了没有
php导出大量数据到Excel,可以通过生成多个Excel文件,然后压缩成压缩包解决。
方案是:假如我们数据库有10w条数据,每2000条数据生成一个Excel文件,这样每次只要从数据库里查询出2000条数据即可,一定要分页去查询。
原因:主要是数据库性能和写文件性能。分页查询可以解决数据库压力的问题, 生成多个文件可以解决单个文件太大,后期维护Excel文件的问题。
要注意的:
1. 在导出逻辑文件开头,一定要声明 set_time_limit(0) ,防止脚本超时;
2. 每个文件生成后,适当的sleep一下,让程序休息一下下;
3. 因为一次导出最后要将生成的多个Excel文件打包成一个压缩包,所以要删除掉生成的Excel文件,节省服务器存储空间;
下面是我实际工作中,写的一个php导出大量数据到Excel的代码,你可以参考一下: