Zadanie niemal każdego programu komputerowego można sprowadzić do przetwarzania danych – sortowania, filtrowania, wyszukiwania, przekształcania itp. To samo powiedzieć można o „życiu w konsoli” – ciężko wyobrazić sobie pracę bez poleceń typu: grep, find, sort itp. Przez wiele lat stworzonych zostało wiele algorytmów i struktur danych adresujących te fundamentalne problemy. Co jednak w przypadku, gdy zbiór danych jest tak ogromny (np. terabajty danych), że pomimo sensownej1 złożoności obliczeniowej gwarantowanej przez dany algorytm obliczenia trwałyby dni albo tygodnie?