給定a、b兩個檔案,各存放50億個url,每個url各佔用64位元組,記憶體限制是4G,如何找出a、b檔案共同的url?,50億4g_PHP教程

來源:互聯網
上載者:User

給定a、b兩個檔案,各存放50億個url,每個url各佔用64位元組,記憶體限制是4G,如何找出a、b檔案共同的url?,50億4g


可以估計每個檔案的大小為5G*64=300G,遠大於4G。所以不可能將其完全載入到記憶體中處理。考慮採取分而治之的方法。
遍曆檔案a,對每個url求取hash(url)%1000,然後根據所得值將url分別儲存到1000個小檔案(設為a0,a1,...a999)當中。這樣每個小檔案的大小約為300M。遍曆檔案b,採取和a相同的方法將url分別儲存到1000個小檔案(b0,b1....b999)中。這樣處理後,所有可能相同的url都在對應的小檔案(a0 vs b0, a1 vs b1....a999 vs b999)當中,不對應的小檔案(比如a0 vs b99)不可能有相同的url。然後我們只要求出1000對小檔案中相同的url即可。
比如對於a0 vs b0,我們可以遍曆a0,將其中的url儲存到hash_map當中。然後遍曆b0,如果url在hash_map中,則說明此url在a和b中同時存在,儲存到檔案中即可。
如果分成的小檔案不均勻,導致有些小檔案太大(比如大於2G),可以考慮將這些太大的小檔案再按類似的方法分成小小檔案即可

昨天百度面試官問道的 今天研究一下

http://www.bkjia.com/PHPjc/924847.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/924847.htmlTechArticle給定a、b兩個檔案,各存放50億個url,每個url各佔用64位元組,記憶體限制是4G,如何找出a、b檔案共同的url?,50億4g 可以估計每個檔案的大小為...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.