Magazynowanie danych
Technologia komputerowa rozwija się bardzo szybko. W latach 80 XX w. średnia pojemność dysku twardego dla komputera osobistego wynosiła (jeśli komputer w ogóle posiadał dysk) 5MB. Obecnie można zakupić dyski o pojemności nawet 8TB danych. Choć wydaje się to bardzo duża ilość, to jest naprawdę niewielka jeśli porównamy ją z szacowaną ilością nowych danych produkowanych codziennie na poziomie 2,5 EB co daje około 2,5 miliona TB.
Jeśli dane są ustrukturyzowane jak np. wyciągi bankowe i elektroniczne książki adresowe, to są przechowywane w relacyjnych bazach danych. Aby nimi zarządzać używa się systemu do zarządzania bazami danych (RDBMS – ang. Relational Database Management System). Jest on używany, aby tworzyć, przechowywać udostępniać i operować na takich danych. Najpierw bazę danych się projektuje, następnie definiuje relacje pomiędzy tabelami, a na koniec po jej utworzeniu wypełnia się ją danymi. Dla wielu aplikacji operujących na ustrukturyzowanych danych jest to proces szybki i niezawodny. Jednak jednym z problemów takiego rozwiązania jest skalowalność. Relacyjne bazy danych są zaprojektowane tak, aby działały na jednym serwerze. Kiedy ilość danych się zwiększa, stoją wolne i nieefektywne. Jedynym sposobem aby w takim przypadku zwiększyć skalowalność jest zwiększenie mocy obliczeniowej.
Dla nieustrukturyzowanych danych system relacyjnej bazy danych jest nieodpowiedni. Głównym z powodów jest to, że po ustaleniu schematu bazy danych bardzo ciężko jest go zmienić. Ponadto takich danych nie można w prosty sposób przechowywać w określonych wierszach oraz kolumnach. Dodatkowo w przypadku danych generowanych w czasie rzeczywistym wymagają bardzo dużego przetwarzania najlepiej również w czasie rzeczywistym. Dlatego system relacyjnych baz danych w tym przypadku kompletnie się nie sprawdza.
Rozwiązaniem powyższego problemu jest Rozproszony system plików DFS (ang. Distributed File System). Taki system dostarcza skutecznego i niezawodnego systemu przechowywania dużych zbiorów danych na wielu komputerach. Jednym z najpopularniejszych rozwiązań jest Hadoop. Napisany w popularnej Javie, obecnie używany przez Facebooka, Twittera czy nawet eBaya. Umożliwia analizę zarówno częściowo ustrukturyzowanych jak i zarówno nieustrukturyzowanych danych. Dane są rozproszone na wiele węzłów, często nawet na dziesiątki tysięcy ulokowanych w centrach danych na całym świecie. Pojedynczy klaster Hadoop składa się z jednego głównego węzła typu NameNode oraz wielu węzłów podrzędnych typu DataNode. Węzeł NameNode odpowiada za odbieranie żądań przychodzących od klientów, zarządza przestrzenią dyskową, przechowuje ścieżki dostępu do danych oraz ich lokalizację. Oprócz tego zarządza również operacjami takimi jak zamykanie lub otwieranie plików oraz kontroluje dostęp do danych na komputerach klientów. Natomiast węzły DataNodes są odpowiedzialne za rzeczywiste przechowywanie danych, w związku z czym odpowiadają za tworzenie, usuwanie oraz powielanie bloków danych. Wspomniane powielanie danych jest bardzo istotną funkcją Hadoop. Każdy blok posiada po kilka kopii na wypadek awarii DataNodes. Dzięki temu w przypadku jego uszkodzenia inny węzeł jest w stanie przejąć i kontynuować zadanie bez utraty danych. W celach kontroli i weryfikacji czy któryś z węzłów nie jest uszkodzony NameNode co trzy sekundy otrzymuje powiadomienie zwane Heartbeat, jeśli go nie otrzyma zakłada, że dany DataNode nie funkcjonuje. Bloki są niewielkie, mają po 64MB, dlatego jest ich bardzo dużo. Dodatkowo dodanie kolejnych węzłów typu DataNode jest tanie i nie wymaga zmiany istniejących już węzłów, z drugiej strony jeśli poprzednie węzły staną się zbędne łatwo można je wyłączyć.
Bazy danych NoSQL odnoszą się do nierelacyjnych baz danych. Model nierelacyjny pozwala na ciągłe dodawanie nowych danych. Ma on funkcje, które są niezbędne do zarządzania dużymi zbiorami danych, a mianowicie mowa o: skalowalności, dostępności oraz wydajności.