MongoDB - przykład bazy NoSQL
W zdecydowanej większości projektów zwykło używać się baz danych opartych o SQL. Faktycznie są to bazy bardzo wygodne w użyciu i dzięki latom rozwoju dobrze dopracowane. Wiadomo jednak, że po osiągnięciu przez bazę pewnych rozmiarów zaczynają się problemy z jej wydajnością. Często w bazach SQL przechowuje się zwykłe dokumenty, co nie jest najlepszym pomysłem.
W pierwszym przypadku, jeżeli system przerośnie możliwości takiej bazy jak Oracle dobrym rozwiązaniem okazują się bazy typu klucz wartość. Przykładem takich baz jest BigTable (Google) czy też HBase(Apache Fundation). Bazy tego typu są przystosowane do obsługi sieciowych systemów plików (GSF - BigTable, Hadoop - HBase), co stanowi o ich sile. Umożliwia to przechowywanie dużo większych zasobów danych, umożliwia ich replikację i dodatkowo jest rozwiązaniem tańszym i mniej zawodnym niż macierze dyskowe obsługiwane przez bazy SQL.
W drugim przypadku, czyli obsłudze dużej ilości dokumentów dobrym rozwiązaniem może okazać się baza zorientowana na dokument. Jednym z rozwiązań są bazy oparte o JSON (zastępczy dla XML schemat zapisywania danych intensywnie wykorzystywany w AJAX).
Dwie najpopularniejsze z nich to CouchDB i MongoDB. Pierwsza z nich napisana w Erlangu i C jest obecnie bardziej rozpowszechniona (powstała 4 lata wcześniej niż MongoDB). Jednak MongoDB jest świeższym spojrzeniem na tego typu rozwiązanie. Baza ta napisana w C++ jest bardziej wydajna i na dodatek łatwiejsza w użyciu. Dodatkowy moduł GridSF umożliwia efektywną obsługę dużych plików binarnych.
Do odczytywania informacji w bazie służą polecenia oparte o JavaScript i JSON. Jest to umiejętność prosta do opanowania, szczególnie gdy znamy JavaScript (podczas gdy do obsługi bazy SQL trzeba dużo wiedzy i doświadczenia).
Dzięki tej bazie uzyskamy dużą szybkość pobierania i zapisywania danych przy dużo mniejszym obciążeniu systemu.
Niestety bardziej skomplikowane wyszukiwanie danych w dokumentach jest trudniejsze. SQL pozwala na bardzo rozwinięte zapytania, podczas gdy w MongoDB piszemy zapytania w JavaScript lub realizujemy wyszukiwanie danych w samym programie obsługującym bazę. Dobrym rozwiązaniem może okazać się podział danych i umieszczenie części danych w standardowej bazie SQL (tych poszukujemy w bardzo różny sposób), a pozostałą rzadko przeszukiwaną lub z wyszukiwaniami standardowymi w bazie NoSQL (można tworzyć indeksy).
Dodatkowe możliwością bazy jest automatyczna replikacja danych między serwerami, którą możemy skonfigurować (w schemacie Master - Slaves).
Można by w uproszczeniu powiedzieć, że jeżeli wykorzystujemy w dużej większości możliwości jakie daje baza SQL to lepiej użyć właśnie jej. Jeżeli jednak wykorzystujemy jej możliwości tylko w niewielkim stopniu to warto pozbyć się narzutu na wydajność jaki taka baza nakłada. Oczywiście może się okazać że nasza aplikacja rozrośnie się do rozmiarów Facebooka i wtedy okaże się, że lepiej było użyć NoSQL, czego wszystkim serdecznie życzę ;)

