1

現在、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);
}

MD5を使用してキーをハッシュするため、キーサイズはすべて32バイトです。

代わりにcrc32を使用してキーをハッシュし、メモリを節約することを検討しています。

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

これにより、わずか8バイトのキーが生成されます。

これは、キーハッシュとしてMD5を置き換えるのに十分なソリューションですか?キーとの潜在的な衝突の増加はありますか?

4

1 に答える 1

1

http://bretm.home.comcast.net/~bretm/hash/8.htmlを読んでください(TL;DR: 「CRC32 はハッシュ テーブルでの使用を意図したものではありません。この目的で使用する十分な理由はありません。そうしないことをお勧めします」)。

MD5 以外のものに切り替える必要があるほど多くの固有のクエリがありますか? その場合は、 MurmurHashCityHashなど、CRC32 以外のより適切なものを検討してください。

于 2013-03-11T12:09:29.150 に答える