NoSQL数据库的URL缩短?

时间:2013-04-07 23:14:55

标签: mongodb url-shortener nosql

对于传统数据库来说,编写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 })

上述示例的唯一问题是缺乏对已知异常的支持,应保留用于系统/网站使用的网址,例如accountadmin

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

1 个答案:

答案 0 :(得分:2)

首先,有很多方法可以在MongoDB中使用_id字段。有关一些想法,请参阅我对this SO question的回答。

然后,如果我理解正确,你的问题与SQL DB具有自动递增计数器这一事实有关,这些计数器是方便的主键,而NoSQL DB(如MongoDB)则没有,这就打开了关于你应该怎么做的问题用作生成新短网址的基础。

如果你想生成auto-incrementing IDs in MongoDB,有两种主要方法:乐观循环和放大维护一个单独的计数器集合/ doc。在大规模尝试超过1,000个请求/秒时,我会建议基于findAndModify的方法。

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