Это зависит от масштаба паутинга, которым вы собираетесь заниматься, и типа машины, на которой вы это делаете. Предположим, что типичным URL-адресом является строка из 60 байтов или около того, набор в памяти будет занимать чуть более 100 байтов на каждый URL (наборы и дикты в Python никогда не допускаются для заполнения более 60% по соображениям скорости). Если у вас есть 64-битная машина (и дистрибутив Python) с около 16 ГБ ОЗУ, вы, несомненно, можете выделить более 10 ГБ для критически важного набора, что позволит вам легко набрать около 100 миллионов URL-адресов или около того; но с другой стороны, если у вас 32-битный компьютер с 3 ГБ ОЗУ, вы явно не сможете выделить гораздо больше, чем ГБ, на критический набор, ограничив вас примерно 10 миллионами URL. Sqlite поможет в тех же масштабах, что и 32-разрядная машина, но не может справиться с 64-разрядной, например, 100 или 200 миллионов URL.
Помимо этого, я бы порекомендовал PostgreSQL, который также имеет преимущество в том, что он может работать на другом компьютере (в быстрой локальной сети) практически без проблем, позволяя вам посвятить основной компьютер паутинке. Я думаю, что MySQL и c тоже подойдут для этого, но мне нравится соответствие и надежность стандартов PostgreSQL ;-). Это позволило бы, скажем, нескольким миллиардам URL-адресов без проблем (просто быстрый диск или, лучше, устройство RAID) и столько оперативной памяти, сколько вы можете себе позволить, конечно, для ускорения процесса.
Попытка сэкономить память / хранилище с помощью хэша фиксированной длины вместо URL-адресов, которые могут быть довольно длинными, - это нормально , если у вас все в порядке со случайным ложным срабатыванием, которое не позволит вам сканировать то, что на самом деле новый URL. Такие «коллизии» не должны быть вероятными: даже если вы используете только 8 байтов для хэша, у вас должен быть существенный риск некоторой коллизии, когда вы просматриваете миллиарды URL-адресов («эвристика квадратного корня» для этого общеизвестная проблема).
С 8-байтовыми строками для представления URL, архитектура набора в памяти должна легко поддерживать миллиард URL или более на хорошо оснащенной машине, как описано выше.
Итак, сколько примерно URL вы хотите увеличить и сколько оперативной памяти вы можете сэкономить? -)