Berkeley DB的四種演算法異同

2021-04-02 23:27:00 字數 1338 閱讀 4316

db資料的四種演算法

在資料庫應用中,資料訪問方式對應資料在硬碟上的儲存格式和操作方法。在編寫應用時,選擇合適的演算法可以極大的提高運算速度。大多數資料庫都選用btree演算法,db也不例外,同時還提供hash演算法、recno演算法和queue演算法。berkeley db的強大之一是它為這幾種演算法提供了差不多相同的介面,這表明當你要使用另一種演算法時修改程式是簡單的。程式在需要對特殊資料結構和訪問模式操作時,通過不同的演算法可以輕易的解決。

大多數應用要麼在btree和hash演算法之間,要麼在queue和recno演算法之間選擇。

hash 還是 btree?

當記錄號不是用於資料訪問的主鍵時,應該使用 hash和btree演算法。 (如果記錄號是用於資料訪問的乙個二級關鍵字,那麼還是可以選擇btree演算法,因為它支援乙個主鍵和乙個記錄號同時訪問。)

btree中的主鍵是有序儲存,記錄間的關聯是依靠次序。並且其結構能隨資料的插入和刪除進行動態調整。為了**的簡單,db沒有實現對關鍵字的字首碼壓縮。btree支援對資料查詢、插入、刪除的常數級速度。關鍵字可以為任意的資料結構。 因此,當在主鍵有序時,btree演算法應該被使用。例如,如果主鍵是時間戳, 那麼8點時間戳後面跟隨的就是9點時間戳, 這種情況下,btree演算法一般是正確的選擇。再來個例子:如果主鍵是名字,應用需要取出所有同姓的記錄,那麼btree 訪問方法同樣是個好選擇。

hash 和 btree 兩種方式在小的資料集合上幾乎沒有效能的差別。不過,由於hash使用的是擴充套件線性hash演算法(extended linear hashing),可以根據hash表的增長進行適當的調整。所以當乙個資料集合足夠大且關鍵字為隨機分布時,採用hash演算法比較好。

queue 還是 recno?

當用記錄號作為資料訪問的主鍵時,應該使用 queue和recno訪問方法。記錄號由演算法本身生成。實際上,這和關係型資料庫中邏輯主鍵通常定義為int auto型是同乙個概念。兩者基本上都是建立在btree演算法之上,提供儲存有序資料的介面。queue的優勢在於:由於其記錄為定長,在插入操作時把記錄插入到佇列的尾部,所以速度最快,而且它執行上鎖和併發處理的水平也相當高。 recno 的長處在於它支援一些queue不能實現的特徵,比如可變長記錄和支援flat-text檔案。

記錄號可以是可變的或者不變的: 可變指的是當記錄被刪除或者插入記錄號發生變化;不變指的是記錄號無論資料庫如何操作,記錄號都不會發生改變。 基於記錄號訪問在btree方式下也是可行的。但是,記錄號是可變,當記錄刪除或插入時,資料庫內的其他記錄的記錄號都將發生改變。 queue訪問方法總是用固定的方式執行,不管資料庫如何操作,記錄號始終改變。 recno 可以被設定為不變和可變兩種形式。

另外,recno為資料庫提供支援flat-text檔案的永久儲存和資料在讀或修改時提供乙個快速的臨時儲存空間。

Sort List(四種演算法)

sort a linked list in o nlog n time using constant space complexity.演算法一 快速排序。因為鍊錶是單向,所以有很多細節要注意,比如quick sort p,r 排序的區間其實是 p next,r next 因為單向鍊錶不能回頭。de...

四種Block Match演算法

塊匹配block match演算法常用於雙目立體匹配和幀間距離匹配上,特點是實現步驟簡單,這裡介紹四種基本的block match演算法 1.sum of absolute differencse sad 公式如下 c 實現 mat funcsadr2l mat leftimage,mat righ...

排序演算法(四種)

氣泡排序是非常容易理解和實現,以從小到大排序舉例 設陣列長度為n。氣泡排序從前往後遍歷和從後往前遍歷一樣的原理。目標陣列 3,5,2,6,4,9,7,12,11 從前往後 第一波 從第乙個數開始,如果第乙個數大於第二個數,就把這兩個數調換位置,否則保留之前的排列,第二次把第二個和第三個數比較,比較方...