Хэш-таблицы в nginx

Igor Sysoev is at rambler-co.ru
Tue Jul 25 22:14:54 MSD 2006


On Tue, 25 Jul 2006, Andrei Nigmatulin wrote:

> On Tuesday 25 July 2006 20:20, Igor Sysoev wrote:
>> On Tue, 25 Jul 2006, Konstantin Sorokin wrote:
>>> Игорь, а я правильно понимаю, что судя по (src/core/ngx_hash.c)
>>>
>>> if (names[n].key.len >= 255) {
>>>    ngx_log_error(NGX_LOG_EMERG, hinit->pool->log, 0,
>>>        "the \"%V\" value to hash is to long: %uz bytes, "
>>>        "the maximum length can be 255 bytes only",
>>>        &names[n].key, names[n].key.len);
>>>    return NGX_ERROR;
>>> }
>>>
>>> Длина ключа в nginx'овой хэш-таблице не может быть больше 255 ? А почему
>>> так ? Что может поломаться, если это увеличить ?
>>
>> Потому что корзина устроена так:
>>
>> void*   указатель
>> u_char  длина ключа1
>> u_char  ключ1[длина]
>> u-char  выравнивание до указателя
>>
>> void*   указатель
>> u_char  длина ключа2
>> u_char  ключ2[длина]
>> u-char  выравнивание до указателя
>
> В этом случае можно использовать неиспользуемые младшие биты указателя для
> расширения длины ключа.

Два бита из указателя уже используются для wildcard-хэша.
Но вообще, ограничение в 255 сивмолов - это ограничения для ключа, а не
для значения.


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





More information about the nginx-ru mailing list