我试图通过使用 SQLite 数据库和 Perl 模块来解决问题。最后,我需要记录数千万条记录。每个项目的唯一唯一标识符是 URL 的文本字符串。我正在考虑以两种方式做到这一点:
方式#1:有一张好桌子,坏桌子,未排序的桌子。(我需要检查 html 并决定是否需要它。)假设我们总共有 10 亿个页面,每个表中有 3.33 亿个 URL。我有一个要添加的新 URL,我需要检查它是否在任何表中,如果它是唯一的,则将其添加到 Unsorted。另外,我会用这个选项移动很多行。
方式 #2:我有 2 张桌子,Master 和 Good。Master 拥有全部 10 亿个页面 URL,Good 拥有我想要的 3.33 亿个。新的 URL,需要做同样的事情,除了这次我只查询一个表,我永远不会从 Master 中删除一行,只会将数据添加到 Good。
所以基本上,我需要知道快速查询一个巨大的 SQLite 数据库的最佳设置,以查看大约 20 个字符的文本字符串是否是唯一的,如果不是,则添加。
编辑:我现在正试图让 Berkeley DB 使用 Perl 模块工作,但没有骰子。这是我所拥有的:
use BerkeleyDB;
$dbFolder = 'C:\somedirectory';
my $env = BerkeleyDB::Env->new ( -Home => $dbFolder );
my $db = BerkeleyDB::Hash->new (
-Filename => "fred.db",
-Env => $env );
my $status = $db->db_put("apple", "red");
当我运行它时,我得到以下信息:
Can't call method "db_put" on an undefined value at C:\Directory\perlfile.pl line 42, <STDIN> line 1.