我正在尝试使用SQLite数据库和Perl模块解决一个问题。最终,我需要记录数千万条目。每个项目的唯一标识符只是URL的文本字符串。我考虑用两种方式来做这件事:
方法1:有好表、坏表和未排序表。(需要检查HTML并决定是否需要它。)假设总共有10亿个页面,每个表中有3.33亿个URL。如果我有一个新的URL需要添加,我需要检查并查看它是否在任何一个表中,在未排序表中添加它(如果它是唯一的)。此外,这个选项需要移动很多行。
方法2:我有两个表,Master和Good。Master包含所有10亿个页面的URL,而Good则包含我想要的3.33亿个页面。需要添加新URL时,需要做同样的事情,但这次只查询一个表,并且永远不会从Master删除行,只将数据添加到Good中。
因此,我需要知道如何最好地设置SQLite数据库,以便快速查询一个巨大的SQLite数据库,查看一个大约20个字符的文本字符串是否唯一,如果不是,则添加。
当我运行这个程序时,我得到以下结果:
方法1:有好表、坏表和未排序表。(需要检查HTML并决定是否需要它。)假设总共有10亿个页面,每个表中有3.33亿个URL。如果我有一个新的URL需要添加,我需要检查并查看它是否在任何一个表中,在未排序表中添加它(如果它是唯一的)。此外,这个选项需要移动很多行。
方法2:我有两个表,Master和Good。Master包含所有10亿个页面的URL,而Good则包含我想要的3.33亿个页面。需要添加新URL时,需要做同样的事情,但这次只查询一个表,并且永远不会从Master删除行,只将数据添加到Good中。
因此,我需要知道如何最好地设置SQLite数据库,以便快速查询一个巨大的SQLite数据库,查看一个大约20个字符的文本字符串是否唯一,如果不是,则添加。
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.