大資料量,海量資料處理方法總結海量2

2021-08-26 15:58:48 字數 1449 閱讀 5849

3.bit-map

適用範圍:可進行資料的快速查詢,判重,刪除,一般來說資料範圍是int的10倍以下

基本原理及要點:使用bit陣列來表示某些元素是否存在,比如8位**號碼

擴充套件:bloom filter可以看做是對bit-map的擴充套件

問題例項:

1)已知某個檔案內包含一些**號碼,每個號碼為8位數字,統計不同號碼的個數。

8位最多99 999 999,大概需要99m個bit,大概10幾m位元組的記憶體即可。

2)2.5億個整數中找出不重複的整數的個數,記憶體空間不足以容納這2.5億個整數。

將bit-map擴充套件一下,用2bit表示乙個數即可,0表示未出現,1表示出現一次,2表示出現2次及以上。或者我們不用2bit來進行表示,我們用兩個bit-map即可模擬實現這個2bit-map。

4.堆適用範圍:海量資料前n大,並且n比較小,堆可以放入記憶體

基本原理及要點:最大堆求前n小,最小堆求前n大。方法,比如求前n小,我們比較當前元素與最大堆裡的最大元素,如果它小於最大元素,則應該替換那個最大元素。這樣最後得到的n個元素就是最小的n個。適合大資料量,求前n小,n的大小比較小的情況,這樣可以掃瞄一遍即可得到所有的前n元素,效率很高。

擴充套件:雙堆,乙個最大堆與乙個最小堆結合,可以用來維護中位數。

問題例項:

1)100w個數中找最大的前100個數。

用乙個100個元素大小的最小堆即可。

5.雙層桶劃分

適用範圍:第k大,中位數,不重複或重複的數字

基本原理及要點:因為元素範圍很大,不能利用直接定址表,所以通過多次劃分,逐步確定範圍,然後最後在乙個可以接受的範圍內進行。可以通過多次縮小,雙層只是乙個例子。

擴充套件:問題例項:

1).2.5億個整數中找出不重複的整數的個數,記憶體空間不足以容納這2.5億個整數。

有點像鴿巢原理,整數個數為2^32,也就是,我們可以將這2^32個數,劃分為2^8個區域(比如用單個檔案代表乙個區域),然後將資料分離到不同的區域,然後不同的區域在利用bitmap就可以直接解決了。也就是說只要有足夠的磁碟空間,就可以很方便的解決。

2).5億個int找它們的中位數。

這個例子比上面那個更明顯。首先我們將int劃分為2^16個區域,然後讀取資料統計落到各個區域裡的數的個數,之後我們根據統計結果就可以判斷中位數落到那個區域,同時知道這個區域中的第幾大數剛好是中位數。然後第二次掃瞄我們只統計落在這個區域中的那些數就可以了。

實際上,如果不是int是int64,我們可以經過3次這樣的劃分即可降低到可以接受的程度。即可以先將int64分成2^24個區域,然後確定區域的第幾大數,在將該區域分成2^20個子區域,然後確定是子區域的第幾大數,然後子區域裡的數的個數只有2^20,就可以直接利用direct addr table進行統計了。

6.資料庫索引

適用範圍:大資料量的增刪改查

基本原理及要點:利用資料的設計實現方法,對海量資料的增刪改查進行處理。

擴充套件:問題例項:

海量資料處理方法總結

適用範圍 第k大,中位數,不重複或重複的數字 基本原理及要點 因為元素範圍很大,不能利用直接定址表,所以通過多次劃分,逐步確定範圍,然後最後在乙個可以接受的範圍內進行。可以通過多次縮小,雙層只是乙個例子。擴充套件 問題例項 1 2.5億個整數中找出不重複的整數的個數,記憶體空間不足以容納這2.5億個...

大資料量處理

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

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

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