MongoDB
MongoDB (od ang. humongous – ogromny[1]) – 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.
Autor | MongoDB Inc. |
---|---|
Pierwsze wydanie | 2009 |
Aktualna wersja stabilna | 7.0.5 (5 stycznia 2024) [±] |
Język programowania | C++ |
Platforma sprzętowa | wieloplatformowa |
Rodzaj | nierelacyjna baza danych |
Licencja | SSPL lub komercyjna |
Strona internetowa |
Historia
edytujPrace nad systemem rozpoczęła firma 10gen w 2007 roku. Pierwsza stabilna wersja ukazała się w lutym 2009[2].
Możliwości
edytuj- 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
edytujInterfejsy 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
edytujUż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[7][8].
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[9]. Ten błąd został poprawiony w wersji 3.4.0[10]. 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[11].
MongoDB wspiera jedynie w niewielkim stopniu kodowanie UTF-8, co stanowi poważny problem w przypadku przechowywania tekstu w języku innym niż angielski[12]. 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.
Zobacz też
edytujPrzypisy
edytuj- ↑ FAQ, „MongoDB” [dostęp 2018-06-10] (ang.).
- ↑ Oficjalny blog MongoDB – marzec 2009.
- ↑ SYSTRAN [online], MongoDB [dostęp 2022-09-01] (ang.).
- ↑ How Python, TurboGears, and MongoDB are Transforming SourceForge.net. PyCon 2010, 2010-02-20. [dostęp 2011-01-22]. [zarchiwizowane z tego adresu (2011-02-11)]. (ang.).
- ↑ Jacqueline Mather: Building a Better Submission Form. NYTimes Open Blog, 2010-05-25. [dostęp 2015-04-16]. (ang.).
- ↑ Holy Large Hadron Collider, Batman!. The MongoDB NoSQL Database Blog, 2010-06-03. [dostęp 2011-01-22]. (ang.).
- ↑ Extortionists Wipe Thousands of Databases, Victims Who Pay Up Get Stiffed – Krebs on Security [online], krebsonsecurity.com [dostęp 2018-03-28] (ang.).
- ↑ Lucian Constantin , Ransomware groups have deleted over 10,000 MongoDB databases, „Computerworld” [dostęp 2018-03-28] (ang.).
- ↑ Jepsen: MongoDB stale reads [online], aphyr.com [dostęp 2018-03-28] .
- ↑ Jepsen: MongoDB 3.4.0-rc3 [online], jepsen.io [dostęp 2018-03-28] (ang.).
- ↑ MongoDB queries don’t always return all matching documents!, „Meteor Blog”, 7 czerwca 2016 [dostęp 2018-03-28] .
- ↑ Sort by collation. [dostęp 2014-04-06]. (ang.).