一个有趣的爬虫经历: nodejs v8.4.0 环境下,处理 4w+数据写入 excel 两天未成功,望大佬们答疑解惑

2017-09-13 01:20:57 +08:00
 betamee

各位 V 友们,第一次发帖,有个关于 nodejs 的问题请教下,具体记录在这篇帖子里: Issues-记录一次有趣的爬虫经历

简单来讲,就是 nodejs v8 下一下子处理 4w+数据写入 excel 两天都没好。。。

写入 excel 用的是 xlsx 这个库,自己写的处理函数主要用到 map 和 Object.assign,就是将数据格式化,再用 xlsx 处理。

之前的 9k 多数据几个小时就好,数据量更小的话几分钟也能好,所以排除代码的问题。

这个情况有点纠结啊,是不是 nodejs 下一次处理 4w+数据有问题? ==

4285 次点击
所在节点    Node.js
10 条回复
oott123
2017-09-13 08:35:44 +08:00
你居然等了两天???
ReVanTis
2017-09-13 09:32:38 +08:00
先写 csv 再想办法转吧
betamee
2017-09-13 10:13:42 +08:00
@oott123 对.....挂在电脑上跑了两天都没有好......
betamee
2017-09-13 10:16:24 +08:00
@ReVanTis 当时也没考虑很多,直接用了 xlxs 库,数据小可以用,数据大了就 gg。就想知道这背后发生了什么(゚ o ゚;;
lamada
2017-09-13 10:37:28 +08:00
首先处理大量数据可以考虑分段,或者流的形式处理。
betamee
2017-09-13 10:44:50 +08:00
@lamada 嗯嗯,现在看来得做一下修改了🤣
lamada
2017-09-13 10:45:14 +08:00
或者拆分成多个子进程处理,这样哪一段数据有问题也更容易定位。看人家也有提 issue 说处理大量数据会有各种问题。其实用其他语言像 java 处理也不是很难,感觉会跟合适一点,有成熟的库,搭个本地服务器处理一下就好。
betamee
2017-09-13 12:13:28 +08:00
@lamada 嗯嗯,这几天赶工期准备先减少数据量把数据搞完再说,之后再好好研究下爬虫数据处理的问题。感谢老哥的建议👀
kingme
2017-09-13 12:49:26 +08:00
Object.assign 不要用。我记得京东那个基于 electron 的 excel 数据清理软件有提到,这里有性能问题
fqzz
2017-09-13 13:07:29 +08:00
27: .reduce((prev, next) => Object.assign({}, prev, { [next.position]: { v: next.v } }), {});
光算时间的话 Object.assign 是 O(n) 的时间复杂度,这 reduce 下去 O(n*n)。
并且每次 assign 都是生成一个新对象,你可以测一下生成 4W 个 object 要多久,并且在每个 obj 上加上 2w 的属性 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/390202

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX