nodejs百万条数据的排序

百万条数据的排序。环境是nodejs,有个object,里面的东西很简单,就是 key=>value 格式而已

let keys = Object.keys(data);

光这一步我执行就费了一秒钟的时间了。

循环一次,耗费了1.5秒。

还有得搞吗?
我不知道人家那种一秒钟不到,把数据排列并且搜索的怎么弄的,太神奇了。

-----------------补充----------------------

下面的回答关注点都在需求上面了。详细说一下。

1、首先是nodejs环境,不是真正的前端。这个我上面没有说,但不影响解决问题。

2、下面的回答都角度都是什么先展示几页啥的,我没说展示百万条数据,我只是排序,搜索。
比如,我搜索 key=abc , 第 100条,列出 50个数据,按照key排序列出, 你难道不是从这100万条数据去搜索、排序吗?难道你要从前50条里面去操作吗?

我操作100万条,我可没说展示100万条。。。这个得看清楚。

3、具体情况是这样的。底层数据存储使用leveldb,leveldb都是存储在硬盘里面,单个key搜索还是挺快的。但是你要搞个排序、分页,他得把100万条数据从硬盘里面一个一个读取,然后你再进行操作。

按照他那样,读取完一次,估计4分钟。从硬盘读取,速度肯定很慢了,不过他也有好处,内存占用小。不然你10G的东西,都一次性拿出来再操作,可想而知……

所以,解决的办法,自己生成索引。把索引放到一个文件里面,查询的时候一次性加载进来,放到内存,这样就比你把100万篇文章从硬盘一个一个找出来再排序高效很多。
比如 id=>dateline 这样的形式,保存id和时间,如果你想按照时间进行排序,那么就可以对索引进行排序,比如取出50个id出来,然后再去硬盘读取这50个就行了

因为索引文件很小,只是保存了一些简单得不能再简单的数据,所以百万条数据,加起来不过几十MB,这样内存占用也是很低的。

4、像这种情况,索引使用Redis存储应该是一个不错的解决方案,但环境不允许。环境允许的话,我使用mysql之类的存储就好了。

查看回复