2012-09-10 136 views
1

是否有任何與berkeley db 5.x C API的方式獲得 所有記錄的密鑰匹配前綴?berkeley db部分匹配

(無掃描整個數據庫)與B樹前綴比較自定義回調

也許?

回答

3

解決方案有兩個部分。首先,您需要使用自定義鍵比較功能。

dbp->set_bt_compare(dbp, cmp_fn); 

在比較函數中,使得具有相同前綴的鍵在數據庫中相鄰排列。這可能與一堆小於比較一樣簡單,因此類似0x000000000000000000000001小於0x000000000000000000000002

要執行搜索,請打開遊標並使用DB_SET_RANGE標誌執行cursor->get()。將開始鍵設置在前綴範圍的開頭。假設您正在尋找帶有前綴0x1138的密鑰,您可以將密鑰設置爲0x113800000000000000000000。然後繼續撥打cursor->get()DB_NEXT。當您看到一個沒有0x1138前綴的密鑰時,就完成了。

該技術不需要掃描整個數據庫,因爲初始的DB_SET_RANGE調用在正確的位置啓動遊標,並且記錄在樹中彼此相鄰。