Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Сервис коротких урлов, каков алгоритм?

Ответить
Настройки темы
Сервис коротких урлов, каков алгоритм?

Ветеран


Сообщения: 1862
Благодарности: 132


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Есть ведь такие сервисы, самый известный - tinyurl.com. Мне вот интересно, как реализуется алгоритм по нахождению уникального слова. Ведь чем больше слов, тем дольше искать. Если в базе миллион слов, то придётся сравнивать каждое новое слово с уже используемыми. Или может сразу генерируется вся база слов, а потом просто делается связь слова со ссылкой. Правда база изначально будет вмещать несколько миллионов записей. Вот как лучше сделать?

-------
ДИЛЕТАНТ - это курьезный человек, который испытывает удовольствие делать то, чего не умеет.
AMD 4200+, MSI Neo2Platinum, 2Gb, ATI 9600, D-Link DWL-G510, FreeBSD 8.0, KDE 4.3.4


Отправлено: 17:16, 14-07-2009

 

Ветеран


Сообщения: 1862
Благодарности: 132

Профиль | Сайт | Отправить PM | Цитировать


Цитата Sham:
Рандомная генерация при большом количестве записей теоретически может привести к неограниченному зацикливанию проверок имеющихся записей (генерация строки -> проверка по базе -> уже есть -> назад) »
Вот именно. Поэтому я и задумался. А может там нагенерировали всю базу, под 2 миллиарда слов, а потом просто пишут урлы к словам?
Генерация должна быть логической, ну а как это будет?
Рандомное слово - нелогически
Изменение одной буквы - логически, но как то по простому
Взять по одной букве со слова в урле - но как это уместить в 6 букв и что-то не могу придумать логику.
Хэш брать от строки, так он как минимум 32 символный.
Больше ничего придумать не могу.

-------
ДИЛЕТАНТ - это курьезный человек, который испытывает удовольствие делать то, чего не умеет.
AMD 4200+, MSI Neo2Platinum, 2Gb, ATI 9600, D-Link DWL-G510, FreeBSD 8.0, KDE 4.3.4


Отправлено: 23:44, 15-07-2009 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Deadooshka


Сообщения: 2517
Благодарности: 692

Профиль | Отправить PM | Цитировать


Цитата Igor_I:
зменение одной буквы - логически, но как то по простому »
а если кодировать числа (будет типа текстовое представление столбца AUTO_INCREMENT)? В Mysql есть ENCRYPT, но надо смотреть.... в конце концов можно брать рандомный срез символов от uniqid или другого хеша, и ограничить кол-во проверок совпадений (допустим 10)... а если будет больше 10, выводить типа "извини, сегодня не твой день"

Отправлено: 13:46, 16-07-2009 | #12


Ветеран


Сообщения: 1862
Благодарности: 132

Профиль | Сайт | Отправить PM | Цитировать


Что-то не могу сообразить как реализовать увеличение буквы на следующую.
Может использование goto поможет, пока тему отодвинул.

-------
ДИЛЕТАНТ - это курьезный человек, который испытывает удовольствие делать то, чего не умеет.
AMD 4200+, MSI Neo2Platinum, 2Gb, ATI 9600, D-Link DWL-G510, FreeBSD 8.0, KDE 4.3.4


Отправлено: 22:49, 21-07-2009 | #13


Аватара для BASSON_XVI

Пользователь


Сообщения: 102
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата Igor_I:
Что-то не могу сообразить как реализовать увеличение буквы на следующую. »
Может у глупость говорю . Может можно букву представить в виде числа (char) затем в зависимости от кодировки прибавить нужное число и опять изменить представление на строку/символ?

-------
http://img.userbars.pl/126/25043.png


Отправлено: 02:27, 23-07-2009 | #14


Deadooshka


Сообщения: 2517
Благодарности: 692

Профиль | Отправить PM | Цитировать


проще сделать массив, и рулить индексами....

Отправлено: 03:18, 23-07-2009 | #15


Ветеран


Сообщения: 1862
Благодарности: 132

Профиль | Сайт | Отправить PM | Цитировать


BASSON_XVI, ну почему глупость, так и есть. Но я не знаю как изменять вторую букву, если с первой дошли до z.
Sham, массив чего?

-------
ДИЛЕТАНТ - это курьезный человек, который испытывает удовольствие делать то, чего не умеет.
AMD 4200+, MSI Neo2Platinum, 2Gb, ATI 9600, D-Link DWL-G510, FreeBSD 8.0, KDE 4.3.4


Отправлено: 08:21, 23-07-2009 | #16


Аватара для BASSON_XVI

Пользователь


Сообщения: 102
Благодарности: 8

Профиль | Отправить PM | Цитировать


Ну наверно если на первой дошли до z надо её менять на начальную букву алфавита то есть а и перебирать вторую дошли до конца второй поменяли первую букву на b и опять вторую перебирать .. Правда это как то ппц мудрено слишком

-------
http://img.userbars.pl/126/25043.png


Отправлено: 12:13, 23-07-2009 | #17


Аватара для BASSON_XVI

Пользователь


Сообщения: 102
Благодарности: 8

Профиль | Отправить PM | Цитировать


PHP код: Выделить весь код

FUNCTION getHash($cs)
{
    FUNCTION 
random_generate($cs){
        
$n="1234567890abcdefghjklmnopqrstuvwxyz";
        for(
$i=0;$i<$cs;$i++){
            
$rb=rand(0,35);
            
$rand.=$n[$rb];
        }
        return 
$rand;
    }
    FUNCTION 
check($randHash,$cs)
    {
        
$sql "SELECT COUNT(id) FROM links WHERE hash = '$randHash'";
        
$data mysql_query($sql);
        
$res mysql_result($data,0,0);
        if(
$res>0)
        {
            
$rb rand(0,$cs);
            
$rs random_generate(1);
            
$randHash[$rb]=$rs;
            
check($randHash);
        }
        else
        {
            RETURN 
$randHash;
        }
    }
    
$randHash random_generate($cs);
    RETURN 
check($randHash,$cs);




Как то так не подойдет?

-------
http://img.userbars.pl/126/25043.png


Отправлено: 17:04, 23-07-2009 | #18


Deadooshka


Сообщения: 2517
Благодарности: 692

Профиль | Отправить PM | Цитировать


Цитата Igor_I:
массив чего? »
в смысле
PHP код: Выделить весь код

$sym = array(1=>'a'2='b'3=>'c'); 


строку (набор предыдущих сгенерированных символов) разбиваем str_split в массив побуквенно, буквы преобразуем в числа по индексам $sym, и делаем инкремент последнего числа в массиве... там нюансы, но чисто арифметические... в конце преобразуем к первоначальному виду и делаем implode...

Цитата BASSON_XVI:
SELECT COUNT(id) FROM links WHERE hash = '$randHash'" »
COUNT вроде бы работает только с GROUP BY
впервые вижу объявление функций внутри функции...

Последний раз редактировалось Sham, 23-07-2009 в 17:54. Причина: explode не хочет пустой delimiter


Отправлено: 17:18, 23-07-2009 | #19


Аватара для dmitryst

Ветеран


Сообщения: 7273
Благодарности: 907

Профиль | Отправить PM | Цитировать


А если нагенерить эти самые рандомные УРЛ-ы (неважно, как), поместить в таблицу, сопоставить каждому порядковый номер. Зашел клиент - получил по порядковому номеру рандомную строку. Запись можно потом удалить, дабы не использовать повторно. Если одна таблица закончится, к этому времени сгенерируется другая ))). Плюс в простоте выборки,
Цитата Sham:
типа "извини, сегодня не твой день" »
не будет, т.к. всё уже сгенерировано и проверено.

-------
Осваиваю FreeBSD


Отправлено: 17:50, 23-07-2009 | #20



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Сервис коротких урлов, каков алгоритм?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Каков класс безопасности современных ОС? M1sha Хочу все знать 4 11-03-2009 18:10
Wireless - MIMO скорости ! (каков он, высокоскоростной Wi-Fi) Tigr Сетевое оборудование 2 07-06-2008 14:49
>100m/LongLink - каков предел? Shera_Best Сетевое оборудование 3 06-06-2008 22:31
[решено] Каков разгонный потенциал видеокарты GeForce 8800GT? Красная Собака Видеокарты 9 27-02-2008 22:17
8 коротких пиков!...ЧТО ДЕЛАТЬ!?!!?!?!? kleola Непонятные проблемы с Железом 16 03-04-2007 23:55




 
Переход