У каждого объекта есть цена, которая меняется каждый день. То есть у нас есть цены для каждого объекта на, пусть, 90 дней вперёд.
Кроме того, у каждого объекта может быть до 3-х вариантов цены.
Хотим запихать все эти цены в Sphinx в виде документов:
objectId
variant
date
price
PRIMARY KEY для подобного документа, это, очевидно, (objectId, variant, date).
Но в Sphinx нет составных ключей, нужен уникальный document_id.
То есть нужно на основании трёх полей сделать уникальный суррогатный 32-битный ключ, однозначно определяющийся этими тремя полями.
Как?
Просто в md5 загнать - слишком большое число.
Можно разделить на куски по 8 символов и сложить их:
$key = $objectId.'_'.$variant.'_'.$date;
$key = md5($key);
$key = str_split($key, 8);
foreach ($key as &$v) {
$v = hexdec($v);
}
$documentId = array_sum($key);
Нихуя - коллизии лезут, если размер куска меньше 9.
>= 9 - числа больше 32-бит получаются.
crc32 нихуя не помогает.
Хуле делать?