Вид реферальных url'ов

GA
На сайте с 16.06.2013
Offline
61
339

Доброго времени.

Есть проект, на котором задача создания реферальной системы. Система как бы уже функционирует, но меня удручает вид ссылки, которую она генерирует, а именно domen/name/name/id/123 - часть выделенная жирным.

id - т.е. ИД пользователя

123 - собственно значение ИД этого пользователя

Не устраивает по причинам:

1. не хочу вообще "палить" ID юзеров

2. длина будет разная (с возрастанием количества зареганных)

3. не симпатично как-то (имхо)

В голову пришло при реге каждого юзера в отдельной колонке в БД для него создать поле в котором бы хранилось его специфическое реферальной ID (6 символов из букв и цифр "на бум"). Но тут возникла проблема, что когда-нибудь да возможен повтор, ведь порядок то случайный. Потом как вариант подумалось чекать на повтор перед генерацией, но это дополнительная нагрузка на БД.

вид хочу скорее всего именно 6 случайных символов из букв и цифр.

Ну так вот, может кто делал рефералки, как лучше вообще всё это реализовать?

Mad_Man
На сайте с 10.11.2008
Offline
162
#1

[A-Z0-9] = 36.

C(6;36) = 36!/(6! * (36-6)!) = 371993326789901217467999448150835200000000/190982059064777562218142105600000000 = 1947792.

Какая, нахрен, нагрузка на БД? При 100000 пользователей у вас не более 5.13% вероятности попасть на один дополнительный запрос. И аж 0.26% на второе попадание. Если добавить ещё и [a-z], то за всё существование вашего забавного ресурса вы можете и не получить повторения.


public static function string_rand($length = 6)
{
$alphabet = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

$string = '';

for ($i = 0; $i < $length; $i++)
{
$string .= $alphabet[mt_rand(0, strlen($alphabet) - 1)];
}

return $string;
}

Вперде использовать.

GA
На сайте с 16.06.2013
Offline
61
#2

Не стоит так резко, я не программист, а всего-лишь уточняю возможности и варианты. насчёт нагрузки - исходил из того, что все всегда пишут: "минимизируйте действия системы".

Так что строго судить не нужно

и спасибо )

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий