宝典9.2——海量数据的基本处理方法
一、處理方法
表格
二、經典實例
1.top K問題
方案:分治+Trie樹/hash+小頂堆
將數據集按照hash方法分成多個小數據集;
使用Trie樹/hash統計每個小數據集中的query詞頻;
用小頂堆求出每個數據集中出現頻率最高的前K個數;
在所有top K中求出最終的top K
注:
- 不能直接將數據劃分,應按照hash方法劃分。
- 直接的話可能會將1000個apple分到多個數據集中,在那些數據集中它不算是最多的,不會出現在小top K中,也就不會出現在最終的top K中
有1億個浮點數怎么找出其中最大的10000個?
方法1、將數據全部排序,在排序后的集合中找。
方法2、局部淘汰法。容器中保存前10000個數,后面的數一一與容器中的最小數進行比較,若大則替換。
方法3、分治法。分成100份,找出每份中的最大的10000個,再在100*10000個中找最大的10000個。
方法4、hash法。若數據中由很多重復的數,先用hash法,去重,減少內存量,用分治法或者最小堆法進行查找。
方法5、最小堆法。讀入前10000個創建最小堆,后續數與最小堆對頂元素進行比較。
可能的應用場景:
1.單機+單核+足夠大內存:方法1
2.單機+多核+足夠大內存:方法3(劃分塊數可>核數,避免數據傾斜,一個處理完接著處理下一個)
3.單機+單核+受限內存:方法2
4.多機+受限內存:方法3(hash+Socket)
?
2.重復問題
通過位圖法實現
每個數字對應位圖中的一個bit位
?
3.排序問題
方法1:數據庫排序法。
? ? ? ? 讓數據庫索引排序操作后提取文件到內存
方法2:分治法。
? ? ? ? hash法將數據分段,編碼復雜,速度也慢
方法3:位圖法。
? ? ? ? 數組下標表示數值,用數組元素的值0表示沒有這個數,1表示有這個數
?
?
?
?
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的宝典9.2——海量数据的基本处理方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于RT-Thread实现的小游戏(贪吃
- 下一篇: 输入一个链表,反转链表后,输出新链表的表