To pytanie wydaje się proste, ale nie jestem w stanie zrozumieć prawdziwej pracy za nim. Wiem, że ludzie powiedzą, rozbić się na kawałki o wielkości 512 Meg i sortować je tak, jak przy użyciu Merge Sort przy użyciu funkcji Map reduction.Sortuj plik 1 TB na komputerze z 1 GB pamięci RAM
Więc tutaj jest rzeczywista pytanie mam:
Przypuśćmy złamać pliku do 512 Megs fragmencie, a następnie wysłać do różnych maszyn przyjmujących je posortować. załóżmy, że te maszyny używają Sortowania Połączeń. Teraz mówię, miałem 2000 maszyn każdego sortowane 2000, 512 mega kawałka. Teraz, kiedy je scalam, jak to działa? Czy rozmiar znowu się nie zwiększy? Na przykład połączenie dwóch 512 megabajtów sprawi, że 1024Megs będzie wielkości mojego RAMu, więc jak by to działało? Żadna maszyna nie może połączyć kawałka o wielkości większej niż 512 megaków z inną porcją, ponieważ wtedy rozmiar przekracza 1 GB.
Jak na końcu scalania będę mógł kiedykolwiek połączyć dwa porcje o masie 0,5 TB z innym kawałkiem o masie 0,5 TB? Czy koncepcja pamięci wirtualnej wchodzi tutaj w grę?
Jestem tutaj, aby wyjaśnić moje podstawy i mam nadzieję, że zadaję to bardzo ważne pytanie (poprawnie) poprawnie. Kto powinien zrobić to scalenie (po sortowaniu)? Moja maszyna lub kilka z tych 2000 maszyn?
Użytkownikowi zabraknie pamięci, jeśli spróbujesz zatrzymać plik (y) w pamięci. Po podzieleniu pliku i posortowaniu każdej części, musisz zachować tylko jeden wiersz każdego pliku w pamięci podczas scalania/zapisywania ich w nowym pliku. –
Scal sort to jeden z moich ulubionych algorytmów. Tak prosty do zrozumienia i tak przydatny. –
BTW, możliwe jest to przy użyciu tylko 2 przebiegów odczytu/zapisu w całym zestawie danych. (4 TB sumy wejść/wyjść) Pomijam szczegóły, ponieważ jest to bardzo skomplikowane, ale używa tego samego podejścia, co nieoryginalne algorytmy FFT. – Mysticial