各位 V 友们,第一次发帖,有个关于 nodejs 的问题请教下,具体记录在这篇帖子里: Issues-记录一次有趣的爬虫经历
简单来讲,就是 nodejs v8 下一下子处理 4w+数据写入 excel 两天都没好。。。
写入 excel 用的是 xlsx 这个库,自己写的处理函数主要用到 map 和 Object.assign,就是将数据格式化,再用 xlsx 处理。
之前的 9k 多数据几个小时就好,数据量更小的话几分钟也能好,所以排除代码的问题。
这个情况有点纠结啊,是不是 nodejs 下一次处理 4w+数据有问题? ==
1
oott123 2017-09-13 08:35:44 +08:00 via Android
你居然等了两天???
|
2
ReVanTis 2017-09-13 09:32:38 +08:00 via Android
先写 csv 再想办法转吧
|
4
betamee OP @ReVanTis 当时也没考虑很多,直接用了 xlxs 库,数据小可以用,数据大了就 gg。就想知道这背后发生了什么(゚ o ゚;;
|
5
lamada 2017-09-13 10:37:28 +08:00
首先处理大量数据可以考虑分段,或者流的形式处理。
|
7
lamada 2017-09-13 10:45:14 +08:00 1
或者拆分成多个子进程处理,这样哪一段数据有问题也更容易定位。看人家也有提 issue 说处理大量数据会有各种问题。其实用其他语言像 java 处理也不是很难,感觉会跟合适一点,有成熟的库,搭个本地服务器处理一下就好。
|
8
betamee OP @lamada 嗯嗯,这几天赶工期准备先减少数据量把数据搞完再说,之后再好好研究下爬虫数据处理的问题。感谢老哥的建议👀
|
9
kingme 2017-09-13 12:49:26 +08:00
Object.assign 不要用。我记得京东那个基于 electron 的 excel 数据清理软件有提到,这里有性能问题
|
10
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 的属性 。 |