百萬條數(shù)據(jù)的排序。語言是js,有個object,里面的東西很簡單,就是 key=>value 格式而已
let keys = Object.keys(data);
光這一步我執(zhí)行就費了一秒鐘的時間了。
循環(huán)一次,耗費了1.5秒。
還有得搞嗎?我不知道人家那種一秒鐘不到,把數(shù)據(jù)排列并且搜索的怎么弄的,太神奇了。
-----------------補充----------------------
下面的回答關注點都在需求上面了。詳細說一下。
1、首先是nodejs環(huán)境,不是真正的前端。這個我上面沒有說,但不影響解決問題。
2、下面的回答都角度都是什么先展示幾頁啥的,我沒說展示百萬條數(shù)據(jù),我只是排序,搜索。比如,我搜索 key=abc , 第 100條,列出 50個數(shù)據(jù),按照key排序列出, 你難道不是從這100萬條數(shù)據(jù)去搜索、排序嗎?難道你要從前50條里面去操作嗎?
我操作100萬條,我可沒說展示100萬條。。。這個得看清楚。
3、具體情況是這樣的。底層數(shù)據(jù)存儲使用leveldb,leveldb都是存儲在硬盤里面,單個key搜索還是挺快的。但是你要搞個排序、分頁,他得把100萬條數(shù)據(jù)從硬盤里面一個一個讀取,然后你再進行操作。
按照他那樣,讀取完一次,估計4分鐘。從硬盤讀取,速度肯定很慢了,不過他也有好處,內存占用小。不然你10G的東西,都一次性拿出來再操作,可想而知……
所以,解決的辦法,自己生成索引。把索引放到一個文件里面,查詢的時候一次性加載進來,放到內存,這樣就比你把100萬篇文章從硬盤一個一個找出來再排序高效很多。比如 id=>dateline 這樣的形式,保存id和時間,如果你想按照時間進行排序,那么就可以對索引進行排序,比如取出50個id出來,然后再去硬盤讀取這50個就行了
因為索引文件很小,只是保存了一些簡單得不能再簡單的數(shù)據(jù),所以百萬條數(shù)據(jù),加起來不過幾十MB,這樣內存占用也是很低的。
4、像這種情況,索引使用Redis存儲應該是一個不錯的解決方案,但環(huán)境不允許。環(huán)境允許的話,我使用mysql之類的存儲就好了。