2013-04-07 50 views
1

寫一個短網址似乎是一個傳統的數據庫非常簡單,與一對夫婦值得注意的例外: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

那麼,我可以爲NoSQL數據庫(如MongoDB,它使用十六進制值作爲其'行'鍵)做一個URL縮短服務嗎?看來,大多數URL縮短工作縮短到[a-zA-Z0-9]字符集。由於我沒有合適的編號,我如何縮短存儲在MongoDB表中的URL?

+0

我不明白這個問題。你有什麼問題?有像這樣的結果:http://stackoverflow.com/questions/9951163/generating-short-urls-in-a-distributed-data-store – WiredPrairie 2013-04-07 23:58:30

回答

2

首先,有很多方法可以使用MongoDB中的_id字段。看到我的回答this SO question的一些想法。

然後,如果我理解正確,您的問題與SQL DB具有自動遞增計數器這一事實有關,而這些計數器是方便的主鍵,而NoSQL DB(如MongoDB)則不會這樣做,從而打開了應該怎樣的問題您將用作生成新的短網址的基礎。

如果你想生成auto-incrementing IDs in MongoDB有兩種主要方法:樂觀循環&維護一個單獨的計數器集合/文檔。在嘗試超過1,000個請求/秒的規模後,我會推薦基於findAndModify的方法。

一個好的URL縮寫器設計還包括隨機化,在這種情況下,這意味着在不同的自動遞增ID之間留下隨機差距。您可以通過在客戶端上生成一個隨機數並按該數字遞增來使用它。

+0

「經過超過1000請求/秒的規模都嘗試過,我會建議基於'findandModify'的方法。「 - 謝謝,這只是總結它。想知道它會如何擴展。 – 2013-04-08 04:13:15

+1

是的,大多數解決方案在空載情況下運行良好。 – Sim 2013-04-11 06:49:33