Динамически генерировать короткие URL-адреса для базы данных SQL?

У моего клиента есть база данных из более чем 400 000 клиентов. Каждому клиенту назначается GUID. Он хочет, чтобы я выбрал все записи, создал динамический «короткий URL», который включает этот GUID в качестве параметра. Затем сохраните этот короткий URL-адрес в поле каждой записи клиентов.

Первый вопрос, который у меня есть, заключается в том, позволяют ли какие-либо сайты сокращения URL-адресов программно создавать короткие URL-адреса на лету, как этот?


person WildBill    schedule 17.03.2011    source источник
comment
Будет ли ваш клиент доволен перенаправлением своих хитов через один из общедоступных сокращателей (goo.gl, bit.ly и т. д.)? Я не думаю, что они позволят вам создать сокращенный URL-адрес через их службу, которая не использует их в качестве перенаправителя. По какой причине вы не можете реализовать свой собственный алгоритм сокращения и вместо этого запустить короткий редиректор на сайте клиента?   -  person Marc B    schedule 18.03.2011
comment
Они также могут возражать против 400 000 попаданий в массовый процесс! Если бы вы делали это изящно и выполняли одно в секунду, это заняло бы более 4,5 дней непрерывно, но делать это быстрее было бы недружелюбно.   -  person Jon Egerton    schedule 18.03.2011


Ответы (4)


TinyUrl позволяет вам это сделать (не широко документировано), например:

http://tinyurl.com/api-create.php?url=http://www.stackoverflow.com/

становится http://tinyurl.com/6fqmtu

Таким образом, вы могли бы

http://tinyurl.com/api-create.php?url=http://mysite.com/user/xxxx-xxxx-xxxx-xxxx

на http://tinyurl.com/64dva66.

Руководство не будет таким ясным, но URL-адреса должны быть уникальными.

Обратите внимание, что вам нужно будет передать это через HTTPWebRequest и получить ответ.

person Jon Egerton    schedule 17.03.2011

Вы можете использовать сокращатель URL-адресов Google, у них есть API.

Вот документация для этого: http://code.google.com/apis/urlshortener/v1/getting_started.html

person Mikael Östberg    schedule 17.03.2011

Этот URL недостаточно короткий:?

http://www.clientsdomain.com/?customer=267E7DDD-8D01-4F38-A3D8-DCBAA2179609

ПРИМЕЧАНИЕ. Лично я думаю, что ваш клиент просит что-то странное. Попросив вас создать поле URL-адреса для каждой записи о клиенте (которое будет основано на GUID клиента с помощью детерминированного алгоритма), он фактически просит вас денормализовать базу данных.

person Simen S    schedule 17.03.2011

Алгоритм, который используют сайты для сокращения URL-адресов, очень прост:

  1. Сохраните URL-адрес и сопоставьте его с порядковым номером.
  2. Преобразуйте порядковый номер (id) в строку фиксированной длины.

Использование только шести строчных букв для второго шага даст вам гораздо больше (24 ^ 6) комбинаций, которые нужны текущему приложению, и ничто не мешает использовать более крупную последовательность в какой-то момент времени. Вы можете использовать более короткие последовательности, если разрешаете использовать цифры и/или буквы верхнего регистра.

Алгоритм преобразования представляет собой базовое преобразование (например, при преобразовании в шестнадцатеричный), заполнение любым символом, представляющим ноль. Это некоторый код Python для преобразования:

LOWER = [chr(x + ord('a')) for x in range(25)]
DIGITS = [chr(x + ord('0')) for x in range(10)]
MAP = DIGITS + LOWER

def i2text(i, l):
        n = len(MAP)
        result = ''
        while i != 0:
                c = i % n
                result += MAP[c]
                i //= n
        padding = MAP[0]*l
        return (padding+result)[-l:]

print i2text(0,4)
print i2text(1,4)
print i2text(12,4)
print i2text(36,4)
print i2text(400000,4)
print i2text(1600000,4)

Полученные результаты:

0000
0001
000c
0011
kib9
4b21

Тогда ваши URL-адреса будут иметь форму http://mydomain.com/myapp/short/kib9. .

person Apalala    schedule 17.03.2011