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

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

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

Ответы [ 4 ]

2 голосов
/ 18 марта 2011

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.

В итоге guid не будет таким ясным, но URL-адреса должны быть уникальными

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

1 голос
/ 18 марта 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.

1 голос
/ 18 марта 2011

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

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

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

1 голос
/ 18 марта 2011

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

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

...