我正在創建一個新的URL縮短器,並且已經讀取了雙向函數是必需的。所以,我發現Jon Skeet's BiDictionary(優秀),並想知道我將如何使用這個在URL縮短應用程序內。目前,我Base36編碼數據庫ID列以創建縮短的URL並將完整的URL存儲到表中。這工作正常,但我失去了爲什麼我需要使用雙射函數?我是否將數據庫中的值存儲到「雙目詞典」中?我目前有足夠的功能嗎?使用「雙向字典」有什麼好處?在URL縮短器中使用雙向字典
0
A
回答
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
謝謝 - 我讀了很多關於雙射函數的內容,並認爲我錯過了一些東西。這正是我需要的澄清。 –
相關問題
- 1. 雙向字典?
- 2. 使用谷歌URL縮短
- 3. 使用URL縮短服務
- 4. PHP使URL縮短
- 5. 縮短地址欄中縮短的URL
- 6. 縮短URL
- 7. C#最快的雙向字符串縮短
- 8. 試圖縮短我的代碼字典
- 9. 使用重定向/重寫的臨時縮短的URL?
- 10. Apache 2中的URL縮短
- 11. 使用PHP的Google URL縮短API
- 12. 縮短URL與使用Javascript JSON
- 13. URL縮短網站
- 14. 如何授權使用Google URL的URL縮短請求用於Java的縮短器API
- 15. 在python中的URL驗證和縮短
- 16. 在.htaccess文件中的mod_rewrite縮短URL
- 17. 在JavaScript中實現URL縮短邏輯
- 18. Twitter網絡意圖URL縮短器
- 19. 改進VB.NET URL縮短器的建議?
- 20. 沒有數據庫的URL縮短器
- 21. 谷歌URL縮短器亮點
- 22. 如何縮短mongo ID以便在URL中更好地使用?
- 23. Nginx使用Twitter URL縮短器返回403時
- 24. 多基轉換 - 使用URL縮短器的所有組合
- 25. URL縮短:使用inode作爲短名稱?
- 26. 縮短S3簽名的URL
- 27. URL屬性參數縮短
- 28. 如何縮短url長度?
- 29. URL縮短問題(Symfony)
- 30. 刪除git.io縮短的URL
您從哪裏閱讀過雙射函數? – svick