SQLite データベースと Perl モジュールを使用して問題に取り組もうとしています。最終的には、何千万ものエントリをログに記録する必要があります。各アイテムの唯一の一意の識別子は、URL のテキスト文字列です。私はこれを2つの方法で行うことを考えています:
方法 #1: 良いテーブル、悪いテーブル、並べ替えられていないテーブルを用意します。(html をチェックして、それが必要かどうかを判断する必要があります。) 合計 10 億ページ、各テーブルに 3 億 3,300 万の URL があるとします。追加する新しい URL があり、それがいずれかのテーブルにあるかどうかを確認して確認し、一意である場合は Unsorted に追加する必要があります。また、このオプションを使用すると、多くの行を移動できます。
方法 2: Master と Good の 2 つのテーブルがあります。Master には 10 億のページ URL がすべてあり、Good には私が必要とする 3 億 3300 万の URL があります。新しい URL は、同じことを行う必要があります。ただし、今回は 1 つのテーブルのみを照会し、Master から行を削除することはなく、データを Good に追加するだけです。
したがって、基本的には、巨大な SQLite データベースをすばやくクエリして、20 文字までのテキスト文字列が一意かどうかを確認し、そうでない場合は追加するための最適なセットアップを知る必要があります。
編集: Perl モジュールを使用して Berkeley DB を動作させようとしていますが、ダイスはありません。ここに私が持っているものがあります:
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.