CNode

数据库是mysql,结果集大了,用node,最花时间的是序列化成json格式。如果只取一列有没有可以不序列化,返回数组的方法。

问答
1103777673发布于11 年前最后回复11 年前8 回复6541 浏览0 收藏

有个mysql表,主键id,我是读取id字段 select id from tbl. push到arrayl里。 一次全读基本假死在node-mysql里。

我现在的解决方案两个, 1、每10000条读取,处理,需要4-5秒,我400万条数据需要半个小时。后面数据库会多个表处理这事,数据量2亿条,时间上无法接受。

2、用其他工具处理缓存到redis的set中,效率高了,总觉得别扭。

3、mysql存储过程,把所有id组成字符串,返回一个条记录,节省时间。

1、2都实现了,3没做呢,休息下,逛逛论坛,提问下,看看有没有更好的选择

查看回复

回复 (8)

1
103777673#1·11 年前

每10000条处理不是更快,而是为了看到反馈信息。

1
103777673#2·11 年前

存储过程行不通,29万个的时候字段超长 Error Code: 1406. Data too long for column 's_ids' at row 294736 1.203 sec

B
bendise#3·11 年前

难道不会只去10到20条分页吗,为什么一次取10000条呢 自豪地采用 CNodeJS ionic

1
103777673#4·11 年前

10条20条不是更慢吗?分page只是为了有反馈信息可以console.log出来。避免假死状态。 主要是要解决时间消耗问题,希望缩短时间。

1
103777673#5·11 年前

表,已拆开,最大的不超过1千万条,现在的解决思路是存id到redis的set里,初次装载需要几个小时,第二次直接调redis的集合。秒开。主要是解决重复数据不再消耗数据库,如果id已存在则插入,不存在则 insert ignore。

F
fantasyni#6·11 年前

2亿条的结果集也够大的,查询估计也半天,就算不用node
这么大的表要考虑下是否要拆下了

W
wenbob#7·11 年前

在node中序列化很多數據,無論如何都會卡的。解決的辦法也很簡單,查詢的時候限制結果的數量,序列化的數據越少,速度越快啊。

至於單個node的處理時間受不了,可以多開幾個child process去解決。

再多就要考慮數據庫集羣的問題了。

D
DoubleSpout#8·11 年前

用游标试试?

参与回复
登录后即可参与回复。登录