有个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没做呢,休息下,逛逛论坛,提问下,看看有没有更好的选择
每10000条处理不是更快,而是为了看到反馈信息。
存储过程行不通,29万个的时候字段超长 Error Code: 1406. Data too long for column ‘s_ids’ at row 294736 1.203 sec
难道不会只去10到20条分页吗,为什么一次取10000条呢 自豪地采用 CNodeJS ionic
10条20条不是更慢吗?分page只是为了有反馈信息可以console.log出来。避免假死状态。 主要是要解决时间消耗问题,希望缩短时间。
2亿条的结果集也够大的,查询估计也半天,就算不用node
这么大的表要考虑下是否要拆下了
在node中序列化很多數據,無論如何都會卡的。解決的辦法也很簡單,查詢的時候限制結果的數量,序列化的數據越少,速度越快啊。
至於單個node的處理時間受不了,可以多開幾個child process去解決。
再多就要考慮數據庫集羣的問題了。
用游标试试?
表,已拆开,最大的不超过1千万条,现在的解决思路是存id到redis的set里,初次装载需要几个小时,第二次直接调redis的集合。秒开。主要是解决重复数据不再消耗数据库,如果id已存在则插入,不存在则 insert ignore。