nginx-0.1.13

Igor Sysoev is at rambler-co.ru
Wed Dec 22 16:21:16 MSK 2004


On Tue, 21 Dec 2004, Михаил Монашёв wrote:

> Здравствуйте Игорь,
>
> IS> server_names_hash задаёт размер хэша, по умолчанию 1009. Если имён
> IS> не  много,  скажем,  500, то можно поставить что-то вроде 101. Для
> IS> размера лучше брать простые числа.
>
> Хорошо  бы выдавать предупреждение, что чилосло не простое. Иначе толк
> от  хэша будет нулевой в неумелых руках. И кстати почему для 500 нужно
> 101  задавать.  Вроде ведь эффективное использование хэша, основанного
> на  остатке  от  деления на простое число, происходит при заполенности
> хэша  не более чем на 90%. Т.е. для 500 имён можно рекомендовать выбор
> первого  простого  числа  большего  550,  а лучше больше. Или я что-то
> неправильно  понял?  И  кстати  почему  бы  не вычислять этот параметр
> налету?  Найти  просто  число  большее  чем X простым перебором совсем
> незатратно,  если  X скажем 30000. Или же просто выбирать это число из
> заранее просчитанного списка:
> если имён от 50 до 900, то 1009
> если от 901 до zzzz то yyyyy
>
> Это  сильно  упростит конфигурирование и избавит админа от выискивания
> простых  чисел  написанием маленьких программок. Да и не факт ещё, что
> хорошое правильное число найдётся. Ведь простые числа не все одинаково
> хорошо подходят для хэширования, если мне память не изменяет.

Программки уже написаны. На FreeBSD, например, простые числа добываются так:
/usr/games/primes 100 200

Хеш в данном случае используется не столько для того, чтобы сразу найти
нужное значение, сколько для того, чтобы существенно уменьшить число
сравнений. Для 500 имён хеш в 100 уменьшает число сравнений до примерно 5.


Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list