Оптимизация SQLite для миллионов записей?
Я пытаюсь решить проблему с помощью базы данных SQLite и модулей Perl. В конце концов, я буду регистрировать десятки миллионов записей. Единственный уникальный идентификатор для каждого элемента - это текстовая строка для URL. Я думаю сделать это двумя способами:
Способ № 1: Иметь хороший стол, плохой стол, несортированный стол. (Мне нужно проверить html и решить, хочу ли я его.) Скажем, у нас всего 1 миллиард страниц, 333 миллиона URL в каждой таблице. У меня есть новый URL для добавления, и мне нужно проверить, есть ли он в какой-либо из таблиц, и добавить его в Unsorted, если он уникален. Кроме того, я бы переместил много строк с этой опцией.
Способ № 2: У меня есть 2 стола, Мастер и Гуд. У Master есть все URL-адреса на 1 миллиард страниц, а у Good - 333 миллиона, которые я хочу. Новый URL, нужно сделать то же самое, за исключением того, что на этот раз я запрашиваю только одну таблицу и никогда не удаляю строку из Master, только добавляю данные в Good.
В общем, мне нужно знать, как лучшебыстро запросите огромную базу данных SQLite, чтобы увидеть, является ли текстовая строка ~ 20 символов уникальной, а затем добавьте, если это не так.
Изменить: я сейчас пытаюсь заставить Беркли 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.