1. 程式人生 > >處理海量資料的方法與思路

處理海量資料的方法與思路

處理海量資料是大資料工程師必備技能,通過對PB級別的資料進行挖掘與分析發掘出有價值的資訊,為企業或政府做出正確決策提供依據,是十分必要的一項工作,以下是常用的海量資料處理方法!

1. Bloom filter

Bloom filter是一種二進位制向量資料結構,具有很好的空間效率和時間效率,可用來檢測一個元素是否屬於一個集合。該方法的優點是它的插入和查詢時間都是常數,並且它查詢元素卻不儲存元素本身,因此,具有良好的安全性,但因其演算法的原因,其正確率稍低,可以確定不存在資料一定不存在,確定存在的資料不一定存在,適合對低錯誤率可以容忍的場合。

2. Hash

Hash即雜湊函式,其是一種將任意長度的訊息壓縮到某一固定長度的訊息摘要的函式,根據處理需求的不同,有不同的Hash函式,針對字串、整數、排列也具有相應的Hash方法,常用的Hash構造方法有直接定址法、數字分析法、平方取中法、摺疊法、隨機數法以及除留餘數法等。

3. BitMap

BitMap是使用陣列來表示某些資料是否存在的方法,可對資料進行快速查詢、判斷和刪除操作,一般來說資料範圍是int的10倍以下,Bloom可以看做是對BitMap的擴充套件。

4.

堆是電腦科學中的一種特殊的資料結構的統稱,統稱是一個可以被看做一顆樹的陣列物件,其原理是先從待找的n個數字中找出前k個建成小頂堆,然後依次讀後面的元素並與小頂堆的堆頂進行比較,如果當前元素小或相等,則繼續讀後面的元素;如果當前的元素大,則用當前元素替換堆頂元素,然後調整小頂堆。最大堆求前k小,最小堆求前k大,雙堆,求

中位數。

5. 雙層桶

雙層桶不是一種資料結構,而是一種演算法思想,類似於分治思想。因為元素範圍很大,不能利用直接定址表,所以通過多次劃分,逐步確定範圍,然後最後在一個可以接受的範圍內進行。雙層桶法一般適用於尋找第k個大的數,尋找中位數、尋找不重複或重複的數字。

6. 資料庫優化法

海量資料都被儲存在資料庫中,如何從資料庫中提取有用資訊就需要用到資料庫優化法,常見的資料庫優化方法有資料分割槽、索引、快取機制、分批處理、優化查詢語句、使用取樣資料進行資料探勘等。

7. 倒排索引

倒排索引是目前搜尋引擎公司對搜尋引擎最常用的儲存方式,被用來儲存在全文搜尋下某個單詞在一個文件或者一組文件中的儲存位置的對映。在處理複雜的多關鍵字時,可在倒排表中完成查詢的並、交等邏輯運算,得到結果後再對結果進行存取,這樣把記錄的查詢轉換為地址集合的運算,不必對每個記錄隨機存取,從而提高查詢速度。

8. 外排序

外排序是對大檔案的排序,由於記憶體限制,不能一下子把所有的待排內容都讀到記憶體中進行排序,需要在記憶體和外部儲存器之間進行多次資料交換才能達到對整個檔案進行排序的目的,常用的外排序法是歸併排序法,即首先生成若干個子檔案,分別對這些子檔案進行排序,然後對這些子檔案進行多次歸併,使得有序的歸併段主鍵擴大,最後在外存上形成整個檔案的單一歸併段。

外排序適用於大資料的排序以及去重,但外排序的缺陷是回消耗大量的IO,效率不高。

9. Trie

Trie樹是一種用於快速字串檢索的多叉樹結果,原理是利用字串的公共字首來減少空間開銷。經常被搜尋引擎系統用於檔案詞頻統計。優點是:最大限度地減少無謂的字串比較,查詢效率比散列表高。適合用於資料量大,重複多,但是資料種類小可以放入記憶體的情況。

10. MapReduce

MapReduce是雲端計算的核心技術之一,是一種簡化平行計算的分散式程式設計模型,主要目的是為了大型叢集的系統能在大資料集上進行並行工作,並用於大規模資料的並行運算。

以上是處理海量資料常用的方法,可以根據需處理的資料特點進行選擇使用!