<div dir="ltr">Если попадём в пропуск - получим максимальный PK до пропуска. Всё ок, валидное значение.<div><br></div><div>Накладка может быть только в случае, если мы будем подряд "лупить" в пространство PK более максимального значения, и многократно получать один и тот же PK. Решение: подбирать разрядность в соответствии с разрядностью ключа.</div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">2 декабря 2013 г., 20:55 пользователь Михаил Монашёв <span dir="ltr"><<a href="mailto:postmaster@softsearch.ru" target="_blank">postmaster@softsearch.ru</a>></span> написал:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Здравствуйте, Andrei.<br>
<div class="im"><br>
> если в данный момент максимальное значение ПК = n, то для каждого X существует одно, и только одно максимальное значение ПК, меньшее n.<br>
><br>
> допустим, в данный момент n = 60000. это значит, что 2 байта покроют все значения PK.<br>
><br>
> откусываем 2 байта от хеша. получаем, к примеру, 60001. неудача! сдвигаемся на бит (или байт) вправо; получаем 54467. ура. выбираем максимальное значение ПК из таблицы, меньшее 54467.<br>
><br>
> допустим теперь, что в таблицу добавили ещё одну строку, и при повторном запросе 60001 будет считаться валидным значением, в результате выборка поменяется.<br>
><br>
> ОК, workaround: сохраняем значение PK 60000, ассоциируя его с этой строкой. при последующем запросе берём ИЛИ сохранённое значение, ИЛИ (при его отсутствии) максимальное значение PK.<br>
<br>
</div>Не нужен здесь workaround. 60001 просто станет отображаться в новые<br>
id-шки. а большинство будет отображаться в старые. т.е. изменения<br>
коснутся только 1/60001 часть строк.<br>
<br>
Так что решение нормальное.<br>
<br>
А вот попадание в пропуски или в неподходящие объекты не годится, ибо<br>
может в теории работать бесконечно долго, т.е. количество итераций в<br>
нем не конечно.<br>
<div class="HOEnZb"><div class="h5"><br>
--<br>
С уважением,<br>
 Михаил                          mailto:<a href="mailto:postmaster@softsearch.ru">postmaster@softsearch.ru</a><br>
<br>
--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>Best regards, Andrei<br>+7-937-847-60-74
</div>