做一个导入csv数据的网页,有几十上百万条数据应该用什么方案或考虑哪些问题?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了做一个导入csv数据的网页,有几十上百万条数据应该用什么方案或考虑哪些问题?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1765字,纯文字阅读大概需要3分钟。
内容图文
![做一个导入csv数据的网页,有几十上百万条数据应该用什么方案或考虑哪些问题?](/upload/InfoBanner/zyjiaocheng/149/0d0dec3441594858a5f08d65974149ce.jpg)
回复内容:
想用PHP做一个如题的网页,新手不知道怎么入手,之前做一个简单的上传,但数据只有几千条,现在要处理上百万条数据导入,应该如何解决。会Python 但是Python太折腾打算用PHP。请教一下各位大神~
效率问题的话。拼接成串类似 insert into...value(),value()这样>事务>>循环插入。注意一点就是一次插入很多数据 要修改mysql或其他数据库允许一次插入的最大数据量的配置。我刚刚试了一下 一次插入10万条 用第一种方法大概4秒(5字段这样的表)
数据量比较大, 可以分批次导入, 用ajax反复请求上传接口, 每次请求传递不同参数.
如:
www.xxx.com/upload.php?offset=0&length=1000
www.xxx.com/upload.php?offset=1000&length=1000
这样不至于让PHP脚本运行超时.
对于插入的语句优化,以及表结构有较大要求,不然会慢的可怕,合并数据+事务+有序数据的方式会比较高效
先把CSV表格上传到服务器.
然后PHP把CSV表格导入MySQL数据库:
query('SET AUTOCOMMIT=0');
$db->query('START TRANSACTION');
//导入CSV表格:CSV转数组
$fp = fopen('file.csv', 'r');
while ( ($row = fgetcsv($fp)) !== FALSE ) {
//从文件指针中读入一行并解析CSV
$stmt = $db->prepare('INSERT INTO posts (id, post_title, post_content) VALUES (?,?,?)');
$stmt->bind_param('iss', $row[0], $row[1], $row[2]); //这里假设每行内容分别为ID,标题和内容
$stmt->execute();
//如果插入失败,改为更新
if($stmt->affected_rows == 0) {
$stmt = $db->prepare('UPDATE posts SET post_title = ?, post_content = ? WHERE id = ?');
$stmt->bind_param('ssi', $row[1], $row[2], $row[0]);
$stmt->execute();
if($stmt->affected_rows == 0) {
echo 'Import '.$row[0].' failed!'."\n";
}
}
}
fclose($fp);
//提交事务
$db->query('COMMIT'); //失败的操作已经echo
输出来了,不需要回滚ROLLBACK
$db->query('SET AUTOCOMMIT=1');
异步吧,同步几百万受不了吧
内容总结
以上是互联网集市为您收集整理的做一个导入csv数据的网页,有几十上百万条数据应该用什么方案或考虑哪些问题?全部内容,希望文章能够帮你解决做一个导入csv数据的网页,有几十上百万条数据应该用什么方案或考虑哪些问题?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。