Я бы предпочел использовать хеш вместо SQLite, чтобы делать то, что вы хотите.Хэш оптимизирован для проверки существования без необходимости сохранять значения в каком-либо отсортированном порядке и без необходимости хранить избыточную копию данных в индексе.Алгоритм хеширования, примененный к данным, дает место, где он будет храниться, если он существует;Вы можете искать это место и посмотреть, есть ли оно там.Я не думаю, что вам нужно хранить хеш-таблицу в оперативной памяти.
Вот как вы можете использовать гибридный подход хеш / SQLite.
Создать таблицу SQLite
STORE
id INTEGER PRIMARY KEY
BUCKET (integer, indexed)
URL (text, not indexed)
status
У вас может быть три из этих таблиц, STORE1, STORE2 и STORE3, если вы хотите хранить их отдельно по статусу.
Предположим, что в каждом магазине будет 250 000 001 отдельных сегментов.(Вы можете поэкспериментировать с этим числом; сделайте его простым числом).
Найдите алгоритм хеширования, который принимает два ввода: строку URL и 250 000 0001 и возвращает число от 1 до 250 000 001.
Когда вы получите URL, передайте его алгоритму хеширования, и он скажет вам, в каком BUCKET искать:
Выберите * из STORE, где BUCKET = {значение, возвращаемое вашей хэш-функцией}.
Ваш индекс в поле BUCKET быстро вернет строки, и вы сможете просмотреть URL-адреса.Если текущий URL не является одним из них, добавьте его:
INSERT STORE(BUCKET, URL) VALUES( {your hash return value}, theURL).
SQLite будет индексировать целочисленные значения, что, я думаю, будет более эффективным, чем индексирование URL.И URL будет сохранен только один раз.