Scalability and Memory Limits 6 | 吉祥三宝的各种practice记录



Scalability and Memory Limits 6 | 吉祥三宝的各种practice记录

You have 10 billion URLs. How do you detect the duplicate documents? In this case, assume that "duplicate" means that the URLs are identical.

 

Analysis:

First we compute how many memory for storing 10 billion urls:

Assume that a url is 100 chars long. Each URL takes 100*4 bytes

10 billion URLs takes: 10*2^30*100*4 bytes 4*2^40 byes (approximate), which is 4 TB.

Assume that we only have 4GB of memory, we can divide the URLs into 4000 files, to decide which file to store the URL, we use the following hash function

fileId = hash(u) % 4000, which u is the URL string, and hash() is the summation of ASCII code of all characters in u.

By this function, we make sure the the URLs with the same hash value will be inside the same file, and the average size of file is 1GB (4TB/4000).

Then we can apply the hash map to detect duplicate URLs file by file.

If we use 4000 machines instead of 4000 files, the pro is that we can process the file in parallel, but the con is that we can not make sure every machine is failure-free.

 

About these ads

Read full article from Scalability and Memory Limits 6 | 吉祥三宝的各种practice记录


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts