MongoDB

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj
MongoDB
Autor MongoDB Inc.
Platforma sprzętowa wieloplatformowa
Język programowania C++
Pierwsze wydanie 2009
Aktualna wersja stabilna 3.4.10 - 31 października 2017; 7 miesięcy temu
Licencja GNU AGPL
Rodzaj nierelacyjna baza danych
Strona internetowa
Siedziba firmy MongoDB Inc. w Palo Alto

MongoDB (od słowa humongous[1]) – otwarty, nierelacyjny system zarządzania bazą danych napisany w języku C++. Charakteryzuje się dużą skalowalnością, wydajnością oraz brakiem ściśle zdefiniowanej struktury obsługiwanych baz danych. Zamiast tego dane składowane są jako dokumenty w stylu JSON, co umożliwia aplikacjom bardziej naturalne ich przetwarzanie, przy zachowaniu możliwości tworzenia hierarchii oraz indeksowania.

Historia[edytuj | edytuj kod]

Prace nad systemem rozpoczęła firma 10gen w 2007 roku. Pierwsza stabilna wersja ukazała się w lutym 2009[2].

Możliwości[edytuj | edytuj kod]

  • 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[edytuj | edytuj kod]

Interfejsy programistyczne pozwalające obsługiwać bazy MongoDB powstały dla wszystkich 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[edytuj | edytuj kod]

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[6][7].

Dużo krytyki spotyka MongoDB ze względu na problemy z konsystencją 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[8]. Ten błąd został poprawiony w wersji 3.4.0[9]. 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[10].

MongoDB wspiera jedynie w niewielkim stopniu kodowanie UTF-8, co stanowi poważny problem w przypadku przechowywania tekstu w języku innym niż angielski[11]. Do wersji 3.3.11 włącznie do sortowania napisów używana była funkcja memcmp, która nie obsługuje poprawnie danych w UTF-8 w różnych ustawieniach regionalnych.

Zobacz też[edytuj | edytuj kod]

Przypisy[edytuj | edytuj kod]

  1. humongous – wielgachny, potężny, olbrzymi, ogromny
  2. Oficjalny blog MongoDB – marzec 2009
  3. How Python, TurboGears, and MongoDB are Transforming SourceForge.net (ang.). PyCon 2010, 2010-02-20. [dostęp 2011-01-22]. [zarchiwizowane z tego adresu (2011-02-11)].
  4. Jacqueline Mather: Building a Better Submission Form (ang.). NYTimes Open Blog, 2010-05-25. [dostęp 2015-04-16].
  5. Holy Large Hadron Collider, Batman! (ang.). The MongoDB NoSQL Database Blog, 2010-06-03. [dostęp 2011-01-22].
  6. Extortionists Wipe Thousands of Databases, Victims Who Pay Up Get Stiffed — Krebs on Security, krebsonsecurity.com [dostęp 2018-03-28] (ang.).
  7. Lucian Constantin, Ransomware groups have deleted over 10,000 MongoDB databases, „Computerworld” [dostęp 2018-03-28] (ang.).
  8. Jepsen: MongoDB stale reads, aphyr.com [dostęp 2018-03-28].
  9. Jepsen: MongoDB 3.4.0-rc3, jepsen.io [dostęp 2018-03-28] (ang.).
  10. MongoDB queries don’t always return all matching documents!, „Meteor Blog”, 7 czerwca 2016 [dostęp 2018-03-28].
  11. Sort by collation (ang.). [dostęp 2014-04-06].

Linki zewnętrzne[edytuj | edytuj kod]