[Moscow.pm] Задачка на подумать, кому интересно...
Михаил Монашёв
postmaster на softsearch.ru
Пн Дек 2 06:55:07 PST 2013
Здравствуйте, Andrei.
> если в данный момент максимальное значение ПК = n, то для каждого X существует одно, и только одно максимальное значение ПК, меньшее n.
>
> допустим, в данный момент n = 60000. это значит, что 2 байта покроют все значения PK.
>
> откусываем 2 байта от хеша. получаем, к примеру, 60001. неудача! сдвигаемся на бит (или байт) вправо; получаем 54467. ура. выбираем максимальное значение ПК из таблицы, меньшее 54467.
>
> допустим теперь, что в таблицу добавили ещё одну строку, и при повторном запросе 60001 будет считаться валидным значением, в результате выборка поменяется.
>
> ОК, workaround: сохраняем значение PK 60000, ассоциируя его с этой строкой. при последующем запросе берём ИЛИ сохранённое значение, ИЛИ (при его отсутствии) максимальное значение PK.
Не нужен здесь workaround. 60001 просто станет отображаться в новые
id-шки. а большинство будет отображаться в старые. т.е. изменения
коснутся только 1/60001 часть строк.
Так что решение нормальное.
А вот попадание в пропуски или в неподходящие объекты не годится, ибо
может в теории работать бесконечно долго, т.е. количество итераций в
нем не конечно.
--
С уважением,
Михаил mailto:postmaster на softsearch.ru
Подробная информация о списке рассылки Moscow-pm