gpt4 book ai didi

perl - Perl : re-loading hash values possible? 中的快速查找

转载 作者:行者123 更新时间:2023-12-03 18:26:58 26 4
gpt4 key购买 nike

我有大约 1 亿行,例如:

A : value of A
B : value of B
|
|
|
Z : value of Z upto 100 million unique entries

目前,每次运行我的程序时,我都会将整个文件作为哈希加载,这需要一些时间。在运行时,我需要访问 A、B 的值,因为我知道 A、B 等。

我想知道是否可以进行一次散列并将其存储为二进制数据结构或索引文件。用最少的编程在 perl 中有什么可能。

谢谢!
-阿比

最佳答案

我建议使用磁盘上的键/值数据库。由于 Perl 的 tie function ,它们可以与普通的内存中哈希相同地使用。如果您的哈希非常大,它们将比 Perl 的哈希读取/写入更快,并且它们支持自动保存/加载到磁盘。

BerkeleyDB是一个老最爱:

use BerkeleyDB;
# Make %db an on-disk database stored in database.dbm. Create file if needed
tie my %db, 'BerkeleyDB::Hash', -Filename => "database.dbm", -Flags => DB_CREATE
or die "Couldn't tie database: $BerkeleyDB::Error";

$db{foo} = 1; # get value
print $db{foo}, "\n"; # set value
for my $key (keys %db) {
print "$key -> $db{$key}\n"; # iterate values
}

%db = (); # wipe

对数据库的更改会自动保存到磁盘,并将通过脚本的多次调用保持不变。

检查 perldoc 以获取选项,但最重要的是:
# Increase memory allocation for database (increases performance), e.g. 640 MB
tie my %db, 'BerkeleyDB::Hash', -Filename => $filename, -CacheSize => 640*1024*1024;

# Open database in readonly mode
tie my %db, 'BerkeleyDB::Hash', -Filename => $filename, -Flags => DB_RDONLY;

一个更复杂但速度更快的数据库库是 Tokyo Cabinet ,当然还有很多其他的选择(这毕竟是 Perl...)

关于perl - Perl : re-loading hash values possible? 中的快速查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9400667/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com