[xxhash] Создание cuckooget для сверхбыстрого локального сохранения сайтов [cuckoohash table]

4 min

language: ja bn en es hi pt ru zh-cn zh-tw

Привет, я бездарь.
Я создал то, что хотел, с функциями для создания локального зеркала сайта, потому что ничего подобного не существовало.
httpithub.cturackooget

Введение

Функция зеркалирования этого сайта сильно вдохновлена ​​xavier roche, создателем HTTrack.
[xavier roche’s homework](httplog.httrack.c
Читая его блог, я наткнулся на следующую статью:
[Coucal, Cuckoo-hashing-based hashtable with stash area C library](httplog.httrack.c/uc
Что касается хеш-таблиц кукушки, есть понятное объяснение в слайдах Кумаги, которые все любят, под названием "Мир хеш-таблиц, о котором вы не знаете".

Я подумал об этом. Это часть, где при столкновении "выталкиваются другие элементы, как это делает кукушка". Я подумал, что это свойство можно использовать, когда есть огромный список и потенциальные дубликаты.
ahewfewjjwefawefj

Вычисление хеша

Поскольку безопасность не требовалась, я нашел и интегрировал недавний xxhash.
Для хеш-таблицы кукушки требуется два типа, поэтому они генерируются с помощью xxh32 и xxhash64.
Кроме того, как заметил Иигау-кун, я зафиксировал верхний предел размера таблицы, поэтому я реализовал изменение размера таблицы с помощью _resize.

Уникальное взвешивание

Приоритет сохранения целевого URL изменяется путем последовательного указания строк, содержащихся в URL, с помощью опции -w --weight.
Например, это позволяет гибко настраивать параметры без зависимости от иерархического указания.

Самый быстрый?

Я не буду много писать, так как это может вызвать критику, но количество соединений по умолчанию составляет 50.
Но, честно говоря, он быстр и без 50 соединений.
Почему скорость важна? Я сохранял раздел UNIX на 5ch примерно в 2022 или 2023 году. Это было около 30 ГБ.
В то время я был шокирован тем, что из-за слишком большого количества скриптов исторические темы и сообщения постоянно уходили в архив.
Поэтому для меня скорость была крайне важна.

Что осталось...

Я хотел бы создать файл кэша, что я однажды пытался сделать и потерпел неудачу, чтобы можно было продолжить обработку после прерывания, а также реализовать LRU-кэш...
Я потерпел много неудач, поэтому хотел бы как-нибудь это интегрировать.
На этом все. До новых встреч.

И... я устал и заснул, глядя на компьютер...