2014-10-11 51 views
0

我有1000萬個網頁網址,我想將它們的HTML保存爲一個文件。操作系統在我的文件名中可以​​使用的限制很多。我想要一些系統將URL映射到字母數字表示,以便以低概率生成重複條目的鍵值數據庫中存儲。我需要一個可擴展的解決方案,那就是無論是:到文件名轉換的網址

  1. 一些編碼方案(Windows爲例子,有一個文件名可以是多長時間也是如此大的URL可以產生很大的編碼字符串限制)

  2. stdlib的某些功能很可能會產生重複項(並且在鍵值數據庫中映射random_string => url_path)。

我想出了以下解決方案:

  • 使用base64編碼。這會爲大型網址產生大字符串。
  • 使用安全隨機生成urlsafe base64。我不知道有多少組合,直到我得到重複的條目。

回答

1

我認爲SHA十六進制表示是在這樣的情況下,標準的方式。它給出了一個固定的長度。

sha = Digest::SHA1.file(file).hexdigest 
+0

Digest :: SHA1.hexdigest'foo'似乎是用於字符串的。如果我想從SHA1哈希中恢復到普通的'foo'中,該怎麼辦? – daremkd 2014-10-11 14:22:07

+0

由於您提到了Secure Random,我解釋說您不需要從轉換後的名稱中取回原始字符串。如果情況並非如此,那麼你的問題是誤導或無意義的。 – sawa 2014-10-11 14:58:16

0

嘗試

md5(base64(filename))  

它應該足夠獨特:)

+1

你認爲'base64'給派對帶來了什麼? – pguardiario 2014-10-11 03:03:03

1

保存到磁盤將成爲一個不斷增長的令人頭痛的問題。相反,你需要使用更好的設計來達到目的;您應該將HTML保存到數據庫。你的查詢速度會快很多,名字根本就不重要。即使SQLite也可以很好地處理這個任務。

您需要一個實際URL的字段,一個用於友好名稱,通常是頁面的標題,另一個用於實際的HTML內容。

我建議看看使用Sequel寶石,這將使這項任務非常簡單。查看他們的文檔以獲取更多信息和工作示例。