@happyer

Есть ли смысл делать поиск на похожу рандомно сгенерированную строку?

Добрый день.
Интересует такой вопрос
Условно я генерирую рандомное число
rand(0000000000,9999999999)
и вот интересует вопрос
стоит ли пробегаться по всем строкам в бд для поиска такой же строки?
Меня пугает вероятность того что есть мизерная возможность генерации одинаковой строки и это может навредить продукту
  • Вопрос задан
  • 129 просмотров
Решения вопроса 2
ThunderCat
@ThunderCat Куратор тега Веб-разработка
{PHP, MySql, HTML, JS, CSS} developer
0) Задачу опишите, для чего это вам?
1) Да, может, и вероятность достаточно высокая. Если принципиально работать именно с цифрами проверка обязательна.
2) Для генерации рандомных ключей лучше использовать хеш, а не цифровой ключ. У него коллизии гораздо менее вероятны (хотя тоже не нулевые).
3) Обычно используют пары значений (например логин и пароль) для большей уникальности.

И вопрос остается открытым - зачем?
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
пробегаться не нужно, достаточно условие уикальности по insert into и повтора после exeption
ну или select / insert

но сама логика выбрана криво и зависит от полноты массива данных

P.S. если очень хотца - можно через Фильтр Блума прогонять, это быстрее
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
есть мизерная возможность генерации одинаковой строки

При 10000 записей вероятность совпадения 0.4%, при 100000 уже 40.4%, это не мизер. (Парадокс дней рождения передает привет).

Вы можете использовать что-то вроде uuid для уменьшения коллизий или проверять при вставке on duplicate key
Ответ написан
Комментировать
shurshur
@shurshur
Сисадмин, просто сисадмин...
Если нужно генерить уникальный хеш, то лучше использовать uuid, а не костылить. В алгоритме генерации uuid уже предприняты усилия по существенному уменьшению риска коллизий.

Можно на это поле в базу поставить unique, тогда даже если коллизия вдруг случится, то хотя бы база не будет повреждена неоднозначными данными (но возникнет ошибка, конечно, которую надо будет показать пользователю).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы