2011-08-21 32 views
0

我正在創建一個新的URL縮短器,並且已經讀取了雙向函數是必需的。所以,我發現Jon Skeet's BiDictionary(優秀),並想知道我將如何使用這個在URL縮短應用程序內。目前,我Base36編碼數據庫ID列以創建縮短的URL並將完整的URL存儲到表中。這工作正常,但我失去了爲什麼我需要使用雙射函數?我是否將數據庫中的值存儲到「雙目詞典」中?我目前有足夠的功能嗎?使用「雙向字典」有什麼好處?在URL縮短器中使用雙向字典

+0

您從哪裏閱讀過雙射函數? – svick

回答

2

不是真的相信我理解你充分的問題...

如果我理解正確的話,你已經創建了一個查找表具有獨特的ID和網址。 您的縮短網址是Base36編碼的ID。

讓我們來看看用例:

  • 創建一個縮短的URL
    意味着在你執行檢查您是否已經在表中該URL(簡單,只返回Base36編碼的ID)。
    否則,只需創建一個新條目並返回新ID的Base36編碼。

  • 查找完整的URL
    解碼的Base36值的ID,在查找表中的ID,並返回 - 如果發現 - 完整的URL。

所以基本上你已經創建了一個雙射函數(雙向1:1的對應關係) - 只是一些在兩個方向上沒有任何損失的工作,從而完全可逆的關於你的表格中給出的網址。 Base36編碼/解碼也是完全可逆的,所以這也是一個雙射函數:-)

Jon提到的BiDictionary將是內存緩存(推薦直寫)的良好基礎,因此您可以避免儘可能的DB往返。 Bidictionary使用Dictionary而對於可以由多個線程訪問的緩存,我強烈建議使用ConcurrentDictionary。在你的情況下,Jon的實現中的List<>部分不需要,因爲你總是會有1:1的對應關係。爲了更快的查找,您可以使用Base36編碼值作爲鍵...

+0

謝謝 - 我讀了很多關於雙射函數的內容,並認爲我錯過了一些東西。這正是我需要的澄清。 –