海量數據問題處理方法
- Hash
- Bit-Map位圖
- Bloom Filter(Bit-Map加強版)
- Heap
- 雙層桶劃分
- 數據庫索引
- 倒排索引(Inverted Index)
- B+樹 外排中的常見結構
- Trie數 一個二叉樹的擴展
- MapReduce
Hash
就是把任意長度的輸入(右腳預映射,pre-image),通過散列算法變幻成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射。也就是,散列值的空間通常遠小于輸入的空間,不同的輸入可能會散列成相同的輸出,所以不可能從散列值來唯一的確定輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。
Bit-Map
用一個bit位來標記某個元素對應的Value,而Key即是該元素,由于采用了Bit為單位來存儲數據,在存儲空間方面可以大大節省。
Bloom filter
Bloom filter將集合中的元素映射到位數組中,用k(k為哈希函數個數)個映射位是否全1表示元素在不在這個集合中。Counting bloom filter(CBF)將位數組中的每一位擴展為一個counter,從而支持了元素的刪除操作。
Heap
一種特殊的二叉樹,具備以下兩種性質
- 每個節點的值都大于(或者都小于,最小堆)其子節點的值
- 樹是完全平衡的,并且最后一層的樹葉都在最左邊,這樣就定義了一個最大堆
雙層桶
一種算法設計思想,面對一堆大量的數據我們無法處理的時候,我們可以將其分成一個個小的單元,然后根據一定的策略來處理這些小單元,從而達到目的
例子:第K大的數,中位數,不重復或重復數字
根本還是分治
數據庫索引
unique index等
用來定位,加快查詢速度
倒排索引
倒排索引源于實際應用中需要根據屬性的值來查找記錄。這種索引表中的每一項都包括一個屬性值和具有該屬性值的各記錄的地址。由于不是由記錄來確定屬性值,而是由屬性值來確定記錄的位置,因而稱為倒排索引(inverted index)。帶有倒排索引的文件我們稱為倒排索引文件,簡稱倒排文件(inverted file)。
外排序
外排序(External sorting)是指能夠處理極大量數據的排序算法。通常來說,外排序處理的數據不能一次裝入內存,只能放在讀寫較慢的外存儲器(通常是硬盤)上。外排序通常采用的是一種“排序-歸并”的策略。在排序階段,先讀入能放在內存中的數據量,將其排序輸出到一個臨時文件,依此進行,將待排序數據組織為多個有序的臨時文件。爾后在歸并階段將這些臨時文件組合為一個大的有序文件,也即排序結果。
B+樹
B樹,因為其構建過程中引入了有序數組,從而有效的降低了樹的高度,一次取出一個連續的數組,這個操作的磁盤上比取出與數組高度相同數量的離散數據要便宜的多,因此,磁盤上基本都是B樹結構
字典樹
Trie,又稱單詞查找樹或鍵樹,是一種樹形結構,是一種哈希樹的變種。典型應用是用于統計和排序大量的字符串(但不僅限于字符串),所以經常被搜索引擎系統用于文本詞頻統計。它的優點是:最大限度地減少無謂的字符串比較,查詢效率比哈希表高。
但需要注意的是字典樹在沒有公用節點的時候就不方便了,這是缺點之一