我有一個使用散列的腳本,它包含四個字符串作爲其值爲散列的鍵。這些散列還包含四個字符串作爲鍵,它們也具有散列值。這種模式繼續達到n-1級,這是在運行時確定的。散列的第n級包含整數(與通常的散列引用相對)值。Perl中的BerkeleyDB可以處理散列哈希(最多n個)的散列嗎?
我安裝了Perl的BerkeleyDB模塊,所以我可以使用磁盤空間而不是RAM來存儲這個散列。我以爲,我可以簡單地綁散列到一個數據庫,它會工作,所以我增加了以下我的代碼:
my %tags =() ;
my $file = "db_tags.db" ;
unlink $file;
tie %tags, "BerkeleyDB::Hash",
-Filename => $file,
-Flags => DB_CREATE
or die "Cannot open $file\n" ;
但是,我得到的錯誤:
不能用string (「HASH(0x1a69ad8)」)作爲HASH ref,而在getUniqSubTreeBDB.pl第31行第1行使用「strict refs」。
爲了測試,我創建了一個新腳本,散列到文件。然後我添加以下內容:
my $href = \%tags;
$tags{'C'} = {} ;
它運行良好。然後我補充說:
$tags{'C'}->{'G'} = {} ;
它會給出幾乎相同的錯誤。我在想,BerkeleyDB無法處理我創建的數據結構類型。也許它能夠在我的測試中處理第一級(C - > {}),因爲它只是一個常規密鑰 - >縮放器?
無論如何,任何建議或肯定我的假設將不勝感激。
s/would/should /。我沒有真正測試它。 – ikegami 2012-03-21 18:07:35
我試着用$ root = tie $ tags,「DBM :: Deep」,$ dbFile替換$ root = \%標籤。 程序運行速度比較慢,但它也使用內存?我認爲如果你使用數據庫你的RAM不會被用來存儲散列? – gravitas 2012-03-22 17:04:39
@RSinghS,使用一個數據庫,將避免使用內存的整點,我不明白爲什麼它會使用大量內存。 – ikegami 2012-03-22 17:43:16