Ja dorzucę swoje 3 grosze. Od paru lat korzystam z MongoDB i sobie chwalę. Jest to poboczna baza danych, do ściśle określonych celów.
W jednym projekcie potrzebowałem składować JSONa. Każdy JSON mógł mieć różną strukturę więc istotna była tutaj zaleta MongoDB w postaci braku określonego schematu. Konieczny był też szyki zapis ponieważ 90% zapytań to był zapis. Wydaje mi się że tego celu MongoDB pasował bardzo dobrze. I tak mamy już w kolekcji ~1 mld dokumentów i działa to fajnie. Nie jest to natomiast nic skomplikowanego: odczyt, zapis, jakieś filtrowanie.
A teraz wady:
- zajmuje dużo miejsca (w MongoDB 3.x zostało to poprawione ze względu na nowy silnik)
- usunięcie dokumentów z kolekcji nie zwalnia miejsca na dysku (jest procedura zwalniania miejsca, ale wówczas kolekcja się blokuje na ten czas
- wolne agregowanie danych (spróbujcie np. zrobić stronicowanie filtrowanych danych w kolekcji)
Tak, wiem, że PostgreSQL ma od wersji 9.4 obsługę typu JSON. Ale jakbym musiał coś w tym JSON-ie uaktualnić, filtrować, wyszukać to bym się załamał ;)
Czytałem również benchmarki w których Postgres wygrywa z MongoDB pod względem szybkości zapisu. Nie wiem jednak czy dotyczyły one nowego silnika Wiretiger.
Chętnie poczytam jednak powody dla którego MongoDB jest tak hejtowany. Mówmy tutaj o wersji 3.x.
Chętnie również bym spróbował skorzystać z Cassandry, bo w benchmarkach bije wszystkie bazy NoSQL na głowę. Nie miałem jeszcze okazji, ale nie wiem czy nie jest to baza przystosowana na wiele większe potrzeby niż moje.