大資料量問題分析

2021-08-02 10:29:28 字數 940 閱讀 7768

整理自網路

原出處:

重複次數最高的10條資料

有10個g的資料。如果兩條資料一樣,則表示該兩條資料重複了,現在給你512m的記憶體,把這10g中重複次數最高的10條資料取出來。

分析:10g是資料整型,那實際放到記憶體中占用不了這麼多,會略小點,記憶體中用4b int儲存,而文字中用每個字元就是1b。但還是得考慮切分資料。

解決

通用方法a:

1. 先排序, 10g資料分成40份,每份256m,排序,合併相同資料並加上計數器,寫到臨時檔案chunk01~chunk20。

2. 對每一chunk, 讀入記憶體,對每一條資料,再依次讀入其後續個chunk, 合併相同資料的計數,後寫入乙個檔案count。為了避免重複計數,在計數累加後需要將原來chunk的計數清零並回寫檔案。

以chunk01為例。假設chunk01中有資料a-8(資料a, 8次),chunk02中有a-2,那麼合併chunk02後

chunk01的記憶體中為a-10, chunk02中為a-0,這時把chunk02寫回檔案,然後讀入chunk03繼續處理處理。最後把chunk01中計數不為0的資料(chunk01裡不會有計數為0的,但是後面的chunk會有)寫入檔案count.

3. 對count檔案進行按重複次數排序。(分組,排序,然後每組選前10,再排序)

方法2:

如果知道資料範圍,並且範圍不太,資料重複率也較高。可直接利用陣列hash的方式來統計出現次數。如資料範圍在多少萬內,可用乙個 int tem[max_int]來統計,所需記憶體為 max_int * 4 b。

max_int * 4b = 2^32 * 4b = 16gb

待完成 :

大資料排序之topk問題

怎麼在海量資料中找出重複次數最多的乙個

大資料量演算法

給40億個不重複的unsigned int的整數,沒排過序的,然後再給乙個數,如何快速判斷這個數是否在那40億個數當中 位圖思想解法 include stdio.h include stdlib.h include memory.h define max num 4294967295 int mai...

大資料量處理

看看這個,異曲同工,永遠不超時 該程式是針對非常龐大的資料庫開發的,沒有用迴圈 用途 對過萬條資料的資料庫字段內容批量替換 資料庫連線 dim beeyee dbname,connstr,conn,intsn1 dim content,num,intsn,intidno,strcodea,strco...

航測大資料量處理 大資料量處理及優化措施

1 首先考慮垂直拆分庫,不同的表拆分到不同的庫中,例如使用者庫 產品庫 支付庫 2 然後考慮水平拆分庫,將乙個表的資料放到多張表中,例如按照使用者 時間 訂單號 3 插入資料的時候不建立索引 4 待資料已經插入完成後,建立索引 5 正確的指定索引字段 6 使用批量插入資料庫的方式代替單條資料的插入 ...