Хэш-таблицы в 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