2010-10-07 67 views
1

我想在Berkeley DB的使用下面的Perl邏輯(數百萬條記錄):我可以在Berkeley DB中使用多個密鑰嗎?

$hash{key1}{key2}{key3}{count1}++; 
$hash{key1}{key2}{key3}{count2}++; 

... 

for (key1) { 
    for (key2) { 
    for (key3) { 
     print $hash{key1}{key2}{key3}{count1}."\t".$hash{key1}{key2}{key2}{count2}; 
     } 
    } 
    } 

從多個密鑰的任何例子嗎?我可以使用「僞多重」鍵(key1_key2_key3);但有沒有其他方法?

回答

4

Berkeley-db不支持這樣的多個鍵。每個記錄只能有一個密鑰。

如您所述,您可以連接鍵以形成單個鍵。

您可以使用MLDBM來給出嵌套鍵的外觀。但是,通過在key1下存儲序列化的散列可以工作,所以如果嵌套在頂級密鑰下的密鑰很多,效率會非常低。

或者,您可以放棄BDB並使用真正的SQL數據庫。 DBD::SQLite易於安裝,包括SQLite數據庫引擎及其驅動程序。

我會去或者連接鍵或一個真正的數據庫,這取決於你正在嘗試做什麼。

+2

DBM ::深是一種shonky較少的替代MLDBM。 – hobbs 2010-10-08 04:37:33

0

由於這種情況,要解決這個問題,你可以只是構建一個獨特的密鑰是這樣的:

$seperator = "_"; #seperator depends on your data,pick one never found in your key. 
$key = join $seperator , ($key1,$key2,$key3); 
$hash{$key}{$count1}++; 
$hash{$key}{$count2}++; 

... 

for (key1) { 
    for (key2) { 
    for (key3) { 
     $un_key = join $seperator , (key1,key2,key3); 
     print $hash{$un_key}{count1}."\t".$hash{$un_key}{count2}; 
     } 
    } 
} 
相關問題