【问题标题】:URL shortening for NoSQL databases?NoSQL 数据库的 URL 缩短?
【发布时间】:2013-03-29 22:30:47
【问题描述】:

对于传统数据库而言,编写 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?

【问题讨论】:

标签: mongodb url-shortener nosql


【解决方案1】:

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

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

如果您想生成auto-incrementing IDs in MongoDB,有两种主要方法:乐观循环和维护单独的计数器集合/文档。在以超过 1,000 个请求/秒的规模进行了尝试后,我会推荐基于 findAndModify 的方法。

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

【讨论】:

  • "已经尝试过超过 1,000 个请求/秒的规模,我会推荐基于 findandModify 的方法。" - 谢谢,这只是总结。想知道它是如何扩展的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-05
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
相关资源
最近更新 更多