[大資料量]BitMap即java.util.BitSet的應用
Bitmap演算法,
問題:對40億個資料進行排序,資料型別為 int,無相同資料。
思考:關於40億個資料的排序,首先想如何儲存呢?一個int 4個位元組,也就是160億個位元組,也就是大概有16GB的資料,現在所有的計算機估計
沒有這麼大的記憶體吧,所以我們就可以檔案歸併排序,也可以分段讀入資料在進行Qsort,但是都需要不停地讀入檔案,可以想象不停地讀取檔案硬體操作會有多麼浪費時間。
我們這樣都是用4個位元組來儲存了一個資料,在計算機裡都是用二進位制進行表示,
例如 5 :0000 0000 0000 0000 0000 0000 0000 0101
現在引入Bitmap,所謂Bitmap就是用一個bit來表示一個資料。平時32位儲存一個資料,我們可以換一種想法,用一個位元組32位來儲存0-31這32個資料,例如我們對2,1,5,12這四個資料進行由小到大的排序,首先把32位初始化為0,我們可以把這4個資料儲存為0000 0000 0000 0000 0001 0000 0010 0110
我們就把32位中的分別把 2 1 5 12位置為1,然後從第0位開始遍歷,看相應位是否為1,為1就進行輸出,就完成了資料從小到大的排序。
再返回原題應用Bitmap就可以把16GB的儲存空間縮小為16GB/32 = 512M,就可以大大減少讀取檔案的工作。直接讀一次檔案存入記憶體,然後遍歷輸出就完成了排序。
優點:既大量節省了空間,又把時間複雜度降低到O(n)。
不足:如果資料過於稀疏就會有大量無用遍歷,浪費時間。
一個比較簡單解釋的介紹:
http://blog.csdn.net/lushuaiyin/article/details/7546144
(java.util.BitSet 研究(存數海量資料時的一個途徑))
問題:對40億個資料進行排序,資料型別為 int,無相同資料。
思考:關於40億個資料的排序,首先想如何儲存呢?一個int 4個位元組,也就是160億個位元組,也就是大概有16GB的資料,現在所有的計算機估計
沒有這麼大的記憶體吧,所以我們就可以檔案歸併排序,也可以分段讀入資料在進行Qsort,但是都需要不停地讀入檔案,可以想象不停地讀取檔案硬體操作會有多麼浪費時間。
我們這樣都是用4個位元組來儲存了一個資料,在計算機裡都是用二進位制進行表示,
例如 5 :0000 0000 0000 0000 0000 0000 0000 0101
現在引入Bitmap,所謂Bitmap就是用一個bit來表示一個資料。平時32位儲存一個資料,我們可以換一種想法,用一個位元組32位來儲存0-31這32個資料,例如我們對2,1,5,12這四個資料進行由小到大的排序,首先把32位初始化為0,我們可以把這4個資料儲存為0000 0000 0000 0000 0001 0000 0010 0110
我們就把32位中的分別把 2 1 5 12位置為1,然後從第0位開始遍歷,看相應位是否為1,為1就進行輸出,就完成了資料從小到大的排序。
再返回原題應用Bitmap就可以把16GB的儲存空間縮小為16GB/32 = 512M,就可以大大減少讀取檔案的工作。直接讀一次檔案存入記憶體,然後遍歷輸出就完成了排序。
優點:既大量節省了空間,又把時間複雜度降低到O(n)。
不足:如果資料過於稀疏就會有大量無用遍歷,浪費時間。
一個比較簡單解釋的介紹:
http://blog.csdn.net/lushuaiyin/article/details/7546144
(java.util.BitSet 研究(存數海量資料時的一個途徑))
相關文章
- oracle 大資料量資料插入Oracle大資料
- 大資料量刪除的思考(二)大資料
- 大資料量刪除的思考(三)大資料
- 大資料量刪除的思考(四)大資料
- React如何渲染大資料量的列表?React大資料
- 大資料量刪除的思考(一)大資料
- 關於大資料量的處理大資料
- 大資料量rebuild index的經歷大資料RebuildIndex
- 基於Redis分散式BitMap的應用Redis分散式
- oracle大資料量分批刪除Oracle大資料
- 大資料量獲取TopK的幾種方案大資料TopK
- EXCEL大資料量匯出的解決方案Excel大資料
- 執行大資料量SQL檔案大資料SQL
- Java 大資料量處理問題Java大資料
- 大資料量高併發的資料庫優化大資料資料庫優化
- access資料庫大資料量分頁的問題資料庫大資料
- 大資料下的Distinct Count(二):Bitmap篇大資料
- 大資料量資料查詢最佳化大資料
- 大資料量分割槽表統計資訊的管理大資料
- Salesforce 大資料量處理篇(二)IndexSalesforce大資料Index
- 大資料量處理實踐方案整理大資料
- 從大資料量主庫建立備庫大資料
- sql server 大資料量表修屬性SQLServer大資料
- sql 資料庫 龐大資料量 需要分表SQL資料庫大資料
- 高效儲存的秘訣:bitmap 資料結構在標籤中的應用資料結構
- 大資料量的報表如何快速分頁呈現?大資料
- 大資料量下MySQL插入方法的效能比較大資料MySql
- oracle外部表實現大資料量的Excel匯入Oracle大資料Excel
- 一次大資料量rebuild index的經歷大資料RebuildIndex
- 大資料應用案例大資料
- laravel 處理mongodb大資料量對比方法LaravelMongoDB大資料
- 解決Ice 物件大資料量傳輸Bug物件大資料
- mysql innobackupex xtrabackup 大資料量 備份 還原MySql大資料
- 大資料分析應用的九大領域大資料
- 大資料分析的應用與弊端大資料
- 查詢資料量的大小
- MSSQL大資料量增加欄位耗時對比SQL大資料
- 由雜湊表到BitMap的概念與應用(三):面試中的海量資料處理面試