後台開發最常見的操作就是對伺服器資料的增刪改查。與本地檔案讀寫不同,伺服器通常借助結構化索引來管理和快取資料,以滿足網際網路資料訪問的高效能、易用性、穩定性、一致性和擴充套件性等方面的需求。
本文簡要介紹實現這些結構化索引的經典底層資料結構。包括:
本著歸納總結
拋磚引玉的目的,本文試圖
抓核心要點而非全面細節,讀者可以按圖索驥,研究和發現更多隱藏的細節。
以下分篇展開各資料結構具體內容的介紹。
雜湊表根據鍵直接進行訪問的資料結構。
關鍵概念:雜湊函式、衝突、裝載因子、再雜湊(rehashing)
雜湊函式:計算鍵到雜湊桶(儲存位置)的對映關係。
衝突:不同鍵由雜湊函式計算後對映到同一雜湊桶。
裝載因子:雜湊表儲存的鍵值與雜湊桶個數的比值。
再雜湊:當裝載因子超過預設高值或者低於預設低值(可選)時,需要調整雜湊桶的個數和相應鍵值儲存位址,以控制鍵值查詢次數或占用空間。
處理衝突的方式:
1.拉鍊法,用鍊錶儲存衝突值。
2.開放位址法,相鄰桶存放衝突值。
圖1:拉鍊法雜湊表,來自網路
雜湊表直觀高效,是最常用的查詢類資料結構,標配於主流語言標準庫的關聯容器、伺服器負載均衡策略、各種快取元件和鍵值資料庫等。
多級雜湊
基本概念與雜湊表類似,區別在於雜湊桶的資料結構。
重要實現細節如下:
使用二維陣列存放雜湊桶,每個雜湊桶對應儲存乙個鍵值。
二維陣列的每一行稱為一階,為減少衝突,每一階的雜湊桶個數都是素數。
查詢時逐階計算雜湊桶位址,遇到衝突時,往下一階繼續查詢。
由於衝突概率逐階減小,每行雜湊桶數量逐行減少。
當無法插入資料時,只需繼續增加階數。
圖2:多級雜湊結構,來自網路
多級雜湊實現簡單,查詢快速,空間利用率高,容易實現並行(高併發)。常用於實現伺服器記憶體快取結構,尤其是基於共享記憶體的快取資料的管理。
資料結構經典演算法
例如 4和3只出現過一次,請找出出現過一次的數。首先想到的 應該是上乙個提到的遍歷兩次取出沒有找到的相同的數字,如下 public static list findonlynum int array if j array.length if array i array j if j array.le...
查詢 資料結構
分類 資料結構與演算法 c c 2012 07 24 16 17 614人閱讀收藏 舉報幾種查詢演算法 順序查詢,折半查詢,分塊查詢,雜湊表 一 順序查詢的基本思想 從表的一端開始,向另一端逐個按給定值kx 與關鍵碼進行比較,若找到,查詢成功,並給出資料元素在表中的位置 若整個表檢測完,仍未找到與k...
資料結構 查詢
查詢 searching 也稱 檢索,查表,就是在大量的資訊集中尋找乙個特定的資訊元素。查詢就是根據 給定的關鍵字值,在 查詢表中確定乙個關鍵字等於給定的 記錄或資料元素。若存在這樣的資料元素,則稱查詢成功的,否則查詢不成功。查詢是許多重要的電腦程式中 最耗費時間的部分,查詢演算法的優劣密切關係著查...