2013-03-11 1 views
1

В настоящее время мы используем ключи MD5 для хэша, которые мы хотим найти в memcached.Использование crc32 over md5 для хэширования ключей memcached

Основной пример является:

$sql = "SELECT * FROM articles WHERE id = 1"; 
$key = md5($sql); 

if (!$results = $memcache->get($key)) { 
    $results = $db->query($sql); 
    $memcache->set($key, $results); 
} 

Основных размеров всех 32 байта, как он использует MD5 хэш ключа.

Мы рассматриваем с помощью crc32 вместо хэш ключа для сохранения памяти например:

$key = hash('crc32', $sql); 

Это создает ключ только 8 байт.

Является ли это достаточно хорошим решением для замены MD5 в качестве ключевого хэша? Существует ли увеличение потенциальных столкновений с ключами?

ответ

1

Прочитано http://bretm.home.comcast.net/~bretm/hash/8.html (TL; DR: «CRC32 никогда не предназначался для использования в хеш-таблице. Для этой цели нет веских оснований, и я рекомендую вам избегать этого»).

У вас есть много уникальных запросов, которые требуют переключения на что-то еще, кроме MD5? Если да, рассмотрите что-то более подходящее, помимо CRC32, например MurmurHash или CityHash.

+0

MurmurHash, похоже, генерирует 32 байта, похожие на MD5, это нормально? – fire

+0

MurmurHash3 (последняя) поставляется в 32-битной и 128-битной версиях. Какую реализацию вы используете? (и как вы его используете?) – robertklep

+0

32-разрядная версия, я установил расширение PHP MurmurHash3 и запустил 'echo murmurhash3 ('test', 4);' и он генерирует 32-байтовую строку, которая не является намерением, я Я ищу короткие ключи. – fire

 Смежные вопросы

  • Нет связанных вопросов^_^