Почему коэффициент загрузки установлен на 1 в Redis dict - PullRequest
0 голосов
/ 21 февраля 2019

Как известно, в хеш-таблице коэффициент нагрузки важен для управления конфликтом.

В Java / HashMap коэффициент загрузки по умолчанию равен 0,75 , а в CPython / dict коэффициент загрузки установлен на 2/3

Однако в Redis / dict это 1.0 (когда включен dict_can_resize), почему?

/* If we reached the 1:1 ratio, and we are allowed to resize the hash
 * table (global setting) or we should avoid it but the ratio between
 * elements/buckets is over the "safe" threshold, we resize doubling
 * the number of buckets. */
if (d->ht[0].used >= d->ht[0].size &&
    (dict_can_resize ||
     d->ht[0].used/d->ht[0].size > dict_force_resize_ratio))
{
    return dictExpand(d, d->ht[0].used*2);
}

На мой взгляд, коэффициент загрузки должен быть меньше 1 .Высокий коэффициент загрузки может увеличить стоимость поиска из-за возможной высокой степени конфликтности.

1 Ответ

0 голосов
/ 24 февраля 2019

Высокий коэффициент загрузки также более эффективен при использовании памяти.Redis - это база данных в памяти, она должна быть эффективной с точки зрения памяти.Я думаю, что автор Redis сделал несколько тестов производительности, чтобы сбалансировать использование памяти и производительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...