Wprowadzono wydanie dokumentowo-orientowanej bazy danych MongoDB 5.0, która zajmuje pozycję pomiędzy szybkimi i skalowalnymi systemami operującymi danymi w formacie klucz/wartość a relacyjnymi bazami danych, które są funkcjonalne i przyjazne w tworzeniu zapytań. Kod MongoDB jest napisany w języku C++ i jest rozpowszechniany na licencji SSPL, która opiera się na licencji AGPLv3, ale nie jest otwarta, ponieważ zawiera dyskryminujące wymaganie dostarczenia pod licencją SSPL nie tylko kodu samej aplikacji, ale również kodu źródłowego wszystkich komponentów zaangażowanych w dostarczanie usługi w chmurze.
MongoDB obsługuje przechowywanie dokumentów w formacie podobnym do JSON, ma dość elastyczny język do tworzenia zapytań, może tworzyć indeksy dla różnych przechowywanych atrybutów, efektywnie obsługuje przechowywanie dużych obiektów binarnych, wspiera logowanie operacji wprowadzania i modyfikacji danych w bazie, może działać zgodnie z paradygmatem Map/Reduce, obsługuje replikację oraz pozwala na budowanie konfiguracji odpornych na awarie.
W MongoDB znajdują się wbudowane narzędzia do zapewnienia segmentacji (rozdzielanie zbioru danych pomiędzy serwerami na podstawie określonego klucza), które w połączeniu z replikacją pozwalają na zbudowanie poziomo skalowalnego klastra pamięci, w którym nie ma pojedynczego punktu awarii (awaria dowolnego węzła nie ma wpływu na działanie bazy danych), obsługiwane jest automatyczne przywracanie po awarii oraz przenoszenie obciążenia z uszkodzonego węzła. Rozszerzenie klastra lub przekształcenie jednego serwera w klaster odbywa się bez przerywania pracy bazy danych poprzez proste dodanie nowych maszyn.
Cechy nowego wydania:
- Dodano kolekcje danych w formie zbiorów czasowych (collections), zoptymalizowane do przechowywania próbek wartości parametrów zapisywanych w określonych odstępach czasu (czas i zestaw odpowiednich wartości dla tego czasu). Potrzeba przechowywania takich danych pojawia się w systemach monitorowania, na platformach finansowych oraz w systemach zbierania danych z czujników. Praca z danymi czasowymi odbywa się jak z zwykłymi kolekcjami dokumentów, ale indeksy oraz metoda przechowywania są zoptymalizowane z uwzględnieniem powiązań z czasem, co pozwala znacznie zmniejszyć zużycie miejsca na dysku, skrócić opóźnienia przy wykonywaniu zapytań i umożliwić analizę danych w czasie rzeczywistym.
MongoDB traktuje takie kolekcje jako dostępne do zapisu niematerializowane widoki, tworzone na podstawie wewnętrznych kolekcji i przy wstawianiu automatycznie grupujące dane zbiorów czasowych w zoptymalizowany format przechowywania. Przy tym każdy powiązany z czasem zapis przy zapytaniu traktowany jest jako osobny dokument. Dane są automatycznie uporządkowywane i indeksowane według czasu (nie ma potrzeby jawnego tworzenia indeksów czasowych).
- Dodano wsparcie dla operatorów okiennych (funkcji analitycznych), które umożliwiają wykonanie działań na określonym zestawie dokumentów w kolekcji. W przeciwieństwie do funkcji agregacyjnych, funkcje okienne nie grupują zestawu, a agregują na podstawie zawartości "okna", które obejmuje jeden lub więcej dokumentów z zestawu wynikowego. Aby manipulować podzbiorem dokumentów, zaproponowano nowy etap $setWindowFields, przy pomocy którego można na przykład określić różnice między dwoma dokumentami w kolekcji, obliczyć ranking sprzedaży i przeanalizować informacje w złożonych zbiorach czasowych.
- Dodano wsparcie dla wersjonowania API, które umożliwia powiązanie aplikacji z określonym stanem API i wykluczenie ryzyk związanych z możliwym naruszeniem wstecznej kompatybilności przy przejściu na nowe wersje DBMS. Wersjonowanie API oddziela cykl życia aplikacji od cyklu życia DBMS i pozwala programistom wprowadzać zmiany w aplikacji wtedy, gdy zajdzie potrzeba wykorzystania nowych możliwości, a nie wtedy, gdy odbywa się przejście na nową wersję DBMS.
- Dodano wsparcie dla mechanizmu Live Resharding, który pozwala na dynamiczną zmianę używanych kluczy segmentacji (shard key) bez zatrzymywania DBMS.
- Rozszerzono możliwości szyfrowania pól po stronie klienta (Client-Side Field Level Encryption). Możliwe jest teraz ponowne skonfigurowanie filtrów audytowych oraz rotacja certyfikatów x509 bez zatrzymywania działania DBMS. Dodano wsparcie dla konfiguracji zestawu szyfrów dla TLS 1.3.
- Zaprezentowano nową powłokę wiersza poleceń MongoDB Shell (mongosh), która rozwija się jako odrębny projekt, napisana w JavaScript z wykorzystaniem platformy Node.js i jest rozpowszechniana na licencji Apache 2.0. MongoDB Shell umożliwia łączenie się z DBMS, zmianę ustawień i wysyłanie zapytań. Obsługuje inteligentne uzupełnianie metod, poleceń i wyrażeń MQL, podświetlanie składni, podpowiedzi kontekstowe, analizę komunikatów o błędach oraz możliwość rozszerzania funkcjonalności poprzez dodatki. Stara powłoka CLI „mongo” została uznana za przestarzałą i zostanie usunięta w przyszłej wersji.

- Dodano nowe operatory: $count, $dateAdd, $dateDiff, $dateSubtract, $sampleRate i $rand.
- Zagwarantowano korzystanie z indeksów przy użyciu operatorów $eq, $lt, $lte, $gt i $gte wewnątrz wyrażenia $expr.
- W poleceniach aggregate, find, findAndModify, update, delete oraz w metodach db.collection.aggregate(), db.collection.findAndModify(), db.collection.update() i db.collection.remove() wprowadzono obsługę opcji „let” do określenia listy zmiennych, co zwiększa czytelność poleceń poprzez oddzielenie zmiennych od tekstu zapytania.
- Operacje find, count, distinct, aggregate, mapReduce, listCollections i listIndexes nie są już blokowane, jeśli równocześnie wykonywana jest operacja stawiająca ekskluzywną blokadę na kolekcji dokumentów.
- W ramach inicjatywy mającej na celu eliminację niewłaściwych terminów zespół isMaster oraz metoda db.isMaster() zostały przemianowane na hello oraz db.hello().
- Zmieniono schemat numeracji wydań oraz wprowadzono przewidywalny harmonogram tworzenia wydań. Raz w roku będzie tworzona znacząca wersja (5.0, 6.0, 7.0), co trzy miesiące będą pojawiać się wersje tymczasowe z nowymi funkcjami (5.1, 5.2, 5.3) oraz w razie potrzeby aktualizacje korygujące z poprawkami błędów i luk bezpieczeństwa (5.1.1, 5.1.2, 5.1.3). W wersjach tymczasowych będą tworzone funkcjonalności dla następnej znaczącej wersji, tzn. w MongoDB 5.1, 5.2 i 5.3 będą wprowadzone nowe możliwości dla wydania MongoDB 6.0.
Źródło: opennet.ru

