【问题标题】:Dynamically generate short URLs for a SQL database?为 SQL 数据库动态生成短 URL?
【发布时间】:2011-07-17 18:42:36
【问题描述】:

我的客户拥有超过 400,000 个客户的数据库。每个客户都分配有一个 GUID。他希望我选择所有记录,创建一个动态“短 URL”,其中包含此 GUID 作为参数。然后将此短网址保存到每个客户记录的字段中。

我的第一个问题是,是否有任何 URL 缩短网站允许您像这样以编程方式即时创建短 url?

【问题讨论】:

  • 您的客户是否会对通过公共缩短器之一(goo.gl、bit.ly 等)重定向他的点击感到满意?我不认为他们会让你通过他们的服务生成一个缩短的 URL,而不使用它们作为重定向器。你有什么理由不能实现自己的缩短算法并在客户的网站上运行一个短重定向器?
  • 他们也可能反对在批量过程中被击中 400,000 次!如果你优雅地做,每秒做一个,这将持续 4.5 天以上,但做得更快将是“不友好的”。

标签: url short short-url


【解决方案1】:

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 传递它并获取响应。

【讨论】:

    【解决方案2】:

    您可以使用 Google 的 URL 缩短器,他们有 API。

    这是相关文档:http://code.google.com/apis/urlshortener/v1/getting_started.html

    【讨论】:

      【解决方案3】:

      这个网址不够短:?

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

      注意:我个人认为您的客户要求一些奇怪的东西。通过要求您在每个客户记录上创建一个 URL 字段(这将通过确定性算法基于客户的 GUID),他实际上是在要求您对数据库进行非规范化。

      【讨论】:

        【解决方案4】:

        网址缩短网站使用的算法很简单:

        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
        

        您的网址将采用http://mydomain.com/myapp/short/kib9 的形式。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多