MongoDB

MongoDB (od ang. humongous – ogromny) – otwarty, nierelacyjny system zarządzania bazą danych napisany w języku C++. Charakteryzuje się brakiem ściśle zdefiniowanej struktury obsługiwanych baz danych. Zamiast tego dane składowane są jako dokumenty w stylu JSON.
Historia
Prace nad systemem rozpoczęła firma 10gen w 2007 roku. Pierwsza stabilna wersja ukazała się w lutym 2009.
Możliwości
- jednorodne wsparcie dla standardu Unicode,
- obsługa danych w innych kodowaniach w formacie binarnym,
- duża liczba obsługiwanych typów danych,
- obsługa kursorów,
- zapytania ad-hoc,
- zapytania do zagnieżdżonych pól dokumentów,
- indeksowanie,
- wsparcie dla agregacji danych,
- możliwość składowania plików w bazie,
- architektura zaprojektowana z myślą o łatwej replikacji.
Wewnętrznym językiem do definiowania zapytań oraz funkcji agregujących jest JavaScript wykonywany bezpośrednio przez serwer MongoDB.
Użycie
Interfejsy programistyczne pozwalające obsługiwać bazy MongoDB powstały dla wielu wiodących języków programowania, w tym dla C, C++, Javy, PHP, Perla, Pythona i Rubiego. Wśród znanych użytkowników systemu występują:
Krytyka
Używając domyślnych ustawień, bazy MongoDB są publicznie dostępne bez hasła. Prowadzi to do problemów takich jak w styczniu 2017, kiedy dziesiątki tysięcy baz zostało wyczyszczonych, a ich właściciele otrzymali żądanie okupu w zamian za ich przywrócenie. Jednak nawet po opłaceniu okupu często dane nie wracały do właścicieli, gdyż natychmiast po ich przywróceniu baza była czyszczona przez kogoś innego.
Dużo krytyki spotyka MongoDB ze względu na problemy ze spójnością danych. MongoDB używa modelu asynchronicznych zapisów i eventual consistency
, co oznacza że klient otrzymuje jedynie obietnicę, że dane zostaną zapisane w przyszłości. Samo w sobie nie stanowi to problemu, jednak przez błędy implementacyjne nawet dane przyjęte do zapisu mogły zostawać potem odrzucane. Ten błąd został poprawiony w wersji 3.4.0. Innym znanym problemem jest niezwracanie części dokumentów przy wyszukiwaniach z użyciem indeksu. Pomijane są wtedy dokumenty, które w momencie rozpoczęcia wyszukiwania były aktualizowane.MongoDB wspiera jedynie w niewielkim stopniu kodowanie UTF-8, co stanowi poważny problem w przypadku przechowywania tekstu w języku innym niż angielski. Do wersji 3.3.11 włącznie do sortowania łańcuchów używana była funkcja memcmp, która nie obsługuje poprawnie danych w UTF-8 w różnych ustawieniach regionalnych.