【xxhash】超高速にローカルにサイト保存するcuckoogetを作成【cuckoohash table】
2 min read
こんにちは、無能です。
ローカルにサイトのミラーを作成するための自分が欲しいような機能を備えたものが存在しなかったので作りました。
https://github.com/haturatu/cuckooget
はじめに
このサイトのミラーリング機能はHTTrack
の製作者のxavier roche
に強く影響を受けています。
xavier roche's homework
彼のブログを読んでいて以下の記事を見ました。
Coucal, Cuckoo-hashing-based hashtable with stash area C library
カッコーハッシュテーブルに関してはみなさん大好きなくまぎさんのスライドの"あなたの知らないハッシュテーブルの世界"のスライドでわかりやすい説明がされています。
私は思いつきました。この衝突した場合に"カッコウの習性のように他の要素を蹴り出す"部分です。これは膨大なリストと重複する可能性がある場合にこの特性を活かせると考えました。
ハッシュの計算
セキュリティを要しない為、最近のxxhash
を見つけこれを組み込みました。
カッコーハッシュテーブルでは二種類必要であるためxxh32
、xxhash64
で生成しています。
また、いいがうくんが気づいてくれたのですがテーブルサイズの上限を固定化してしまっていたので_resize
でテーブルサイズのリサイズを行うようにしました。
他には存在しない重み付け
保存先URLの保存の優先度を-w --weight
オプションでURLに含む文字列を順に記述することで優先度が変動します。
例えばこれによって階層指定の依存なく、柔軟に設定することが可能となりました。
最速?
批判をくらいそうなのであまり書きませんがデフォルトコネクション数は50
です。
でもぶっちゃけ50までしなくても早いです。
なぜ速さが重要かというと、私は5chのUNIX板の2022か2023年前後の保存をしていました。おおよそ30GB分でした。
このときスクリプトの嵐が多すぎて歴史的なスレッドと書き込みがどんどん過去ログに流されていくことにショックを受けました。
そのため時私にとってはスピードは重視せざる終えませんでした。
残りは・・・
一度やろうとして失敗したキャッシュファイル作成し中断後の継続処理が出来るようにしたいのと、LRUキャッシュの実装でしょうか・・・
色々失敗したのでなんとか組み込んで行きたいところです。
それでは。またよろしくおねがいします。
と。。。疲れてパソコン見ながら寝落ちしていました。。。