1

对于传统数据库而言,编写 URL 缩短器似乎相当简单,但有几个值得注意的例外:

def save_new_url(request):
    url = StoredUrl(url=request.POST['url'])
    url.save()

    url.short_link = base62(url.id)
    url.save()

    return direct_to_template('mytemplate.html', { 'link': url.short_link })

上面示例的唯一问题是缺乏对已知异常的支持,这些 URL 应该保留给系统/站点使用,例如accountadmin.

那么,如何为像 MongoDB 这样的 NoSQL 数据库提供 URL 缩短服务,它使用十六进制值作为其“行”的键?似乎大多数 URL 缩短器都致力于将数字缩短[a-zA-Z0-9]为字符集。由于我没有可用的数字,如何缩短存储在 MongoDB 表中的 URL?

4

1 回答 1

2

首先,您可以通过多种方式_id在 MongoDB 中使用该字段。有关一些想法,请参阅我对这个 SO 问题的回答。

然后,如果我理解正确,您的问题与 SQL DB 具有自动增量计数器这一事实有关,这些计数器是方便的主键,而 NoSQL DB(如 MongoDB)则没有,这就引发了一个问题,即您应该使用什么作为生成新的短 URL 的基础。

如果您想在 MongoDB 中生成自动递增的 ID,有两种主要方法:乐观循环和维护单独的计数器集合/文档。在尝试了超过 1,000 个请求/秒的规模后,我会推荐基于findAndModify.

一个好的 URL 缩短器设计还包括随机化,在这种情况下,这意味着在不同的自动递增 ID 之间留下随机间隙。您可以通过在客户端上生成一个随机数并按该数字递增来使用它。

于 2013-04-08T02:50:45.080 回答