
18,000 行の巨大な /etc/hosts ファイルがあります。広告サーバーなどをブロックするために使用しています。ブラウジングのパフォーマンスは問題ないようです。しかし、ある程度のサイズを超えると速度が低下し始めるのではないかと思います。OS は動作中に hosts ファイルをどのように保存するのでしょうか。遅いものから速いものまで、さまざまな方法が考えられます。ネットワークの中心となるため、効率的に処理されるというのが私の前提です。単純なものから複雑なものまで、考えられる方法をいくつか挙げます。
- 必要なときにその都度ファイルから読み取ります。
- 一度読む
- 線形探索
- ソートしてからバイナリ検索
- トライを使う
- ハッシュを使用するが、衝突を最小限に抑える方法は?
合理的と思われる方法はたくさんあります。実際に使用されているものは何ですか?
この質問に対する回答はどこかにあるはずなので、既存のリソースへのポインターを歓迎します。私は探しましたが、適切な場所ではなかったかもしれません。
答え1
使用している OS を明記する必要がありますが、いずれにしても、Unix および Unix 系システムで名前解決のパフォーマンスを向上させる一般的な方法は、正と負の解決をキャッシュし、ほとんどの要求に迅速に応答するデーモン (通常は nscd) を使用することです。/etc/hosts が変更されると、少なくとも Solaris では、このキャッシュは無効になります。