Skip to content

Zeroplex 生活隨筆

軟體開發、伺服器和生活瑣事

小 縮小字型大小。 中 重設字型大小。 大 放大字型大小。

縮短網址 vs. Hash

Posted on 2009 年 8 月 8 日2021 年 3 月 12 日 By 日落 在〈縮短網址 vs. Hash〉中有 3 則留言

一直到剛剛才想通為什麼大多數的縮短網址會使用 Hash 產生 key,果然不先死過一次不知道為什麼要這樣作。

先從 key 開始起吧,為了讓 key 更短通常會使用更多的文字或符號,從數字、英文大小寫甚至特殊符號。假設使用數字和英文大小寫作組合,每一位數都有 62 種組合 (10 + 26 + 26),用四個位數的話可以儲存約一千五百萬比資料,這對我這種小網站應該很夠用了。

還沒想通資料量和 hash 有何關係?那就來看看新增時到底要作哪些事情:

  1. 查詢資料是否已經存在
  2. 產生網址與 key 的對應
  3. 儲存結果

問題很明顯出在第一步驟,一千萬筆資料 query 一次到底要花多久的時間?有作索引也要花超過十秒,沒作索引花個半小時可能也算快。

如果將步驟改成這樣:

  1. 將網址作 Hash
  2. 使用 Hash 的結果查詢資料是否存在
  3. 檢查是否發生碰撞
  4. 儲存結果

在第一步先產生 hash 結果就可以減少搜尋的範圍,範圍縮小就可以減少第二步驟查詢所需要的時間。

現在開始後悔沒有好好學演算法了,我要怎麼自己寫一個 hash 函式出來啊???

Tags:PHP, 生活雜記, 資訊學習

文章導覽

Previous Post: 原來 FreeBSD 不需要 dos2unix 工具
Next Post: 開心農場被 DDOS

Comments (3) on “縮短網址 vs. Hash”

  1. Doomleika表示:
    2009 年 8 月 8 日19:21

    用別人的比較快吧?我記得以前上離散的時候課本就丟了一個問題「Is one-way function exist?」我記得這個命題都還沒證明,真的要研究的話就是那些數學密碼學crap,直接用別人作好的比較快。

    回覆
  2. 日落 Zero表示:
    2009 年 8 月 8 日19:39

    就是買了一個網域想要自己玩咩,目前 mod_rewrite 應該沒甚麼問題,卡在 hash 不知道怎麼作,在找機會問問數學系的好了….

    感激你回覆的這麼勤 XD

    回覆
  3. 日落 Zero表示:
    2009 年 8 月 19 日14:40

    mod_rewrite 作不出來…. = ="

    「RewriteRule ^(.*)$ index.php?s=%0 [L]」有錯

    回覆

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


其他

關於我  (About me)

小額贊助

  文章 RSS Feed

  留言 RSS Feed

Apache AWS Bash C/C++ Docker FreeBSD GCP Git Google Java JavaScript Laravel Linux Microsoft MSSQL MySQL Nginx PHP PHPUnit PostgreSQL Python Qt Ubuntu Unix Vim Web Windows WordPress XD 作業系統 分享 好站推薦 專題 攝影 新奇搞笑 新聞 旅遊 生活雜記 程式設計 網路架站 網頁設計 資訊學習 資訊安全 遊戲 音樂


創用 CC 授權條款
本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權.