Po roku prac nad rozwojem zaprezentowano wydanie dokumentowej bazy danych MongoDB 6.0, która zajmuje miejsce pomiędzy szybkimi i skalowalnymi systemami operującymi danymi w formacie klucz/wartość a relacyjnymi bazami danych, funkcjonalnymi i wygodnymi w formułowaniu zapytań. Kod MongoDB napisany jest 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ż kodów źródłowych wszystkich składników zaangażowanych w świadczenie 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.
Główne cechy nowego wydania:
- Zrealizowano możliwość wykonywania zapytań obejmujących dane przechowywane w zaszyfrowanej formie (Queryable Encryption). Dane są odszyfrowywane po stronie użytkownika, a w trakcie przetwarzania zapytania pozostają zaszyfrowane (zapytanie jest realizowane na zaszyfrowanych danych, bez ich wcześniejszego odszyfrowania). W obecnej wersji w zapytaniach dozwolone są jedynie wyrażenia porównawcze, ale w przyszłości planowane jest dodanie wsparcia dla sprawdzania zakresów, prefiksów, sufiksów, podciągów i innych operacji.
- Rozszerzono możliwości związane z przechowywaniem danych w formie szeregów czasowych (time series collections), optymalizowanych do przechowywania przekrojów wartości parametrów rejestrowanych w określonych odstępach czasu (czas i zestaw odpowiadających temu czasowi wartości), na przykład, potrzeba przechowywania podobnych danych występuje w systemach monitorowania, platformach finansowych, systemach ankiety stanów czujników. W nowym wydaniu zapewniono możliwość użycia indeksów wtórnych i złożonych z kolekcjami danych w formie szeregów czasowych. Dodano wsparcie dla dołączania dodatkowych danych, takich jak informacje geograficzne do uwzględnienia odległości i lokalizacji. Zwiększono wydajność odczytu, wykonywania zapytań i sortowania.
- Dodano nowe narzędzia do śledzenia zmian („strumienie zmian”, API Change Streams), które umożliwiają aplikacjom otrzymywanie powiadomień o zmianach danych w bazie danych. Informacje o zmianach są dostarczane w czasie rzeczywistym i pozwalają na tworzenie aplikacji z wykorzystaniem metod programowania reaktywnego i zdarzeniowego. Wydarzenia są przetwarzane za pomocą metody watch, a potrzebne zdarzenia można filtrować i agregować przy pomocy operatorów $match, $project i $redact. W nowej wersji wprowadzono możliwość uzyskania wcześniejszego i późniejszego stanu dokumentu (na przykład, gdy dokument został usunięty lub zmieniony). Oprócz operacji przy użyciu języka DML (data manipulation language) dodano wsparcie dla operacji DDL (data definition language), takich jak tworzenie i usuwanie indeksów oraz kolekcji. Dodano narzędzia do filtrowania powiązanych powiadomień.
- W operatorach $lookup i $graphlookup wprowadzono pełne wsparcie dla podzielonych (sharded) magazynów. Optymalizowana wydajność operacji $lookup, na przykład w przypadku posiadania indeksu na kluczu obcym, doprowadziła do przyspieszenia dopasowywania niewielkiej liczby dokumentów od 5 do 10 razy, a dużej liczby - o dwa razy. W przypadku dopasowań bez użycia indeksów wzrost wydajności może wynosić do 100 razy.
- Wprowadzono możliwość wykonywania złożonych zapytań analitycznych na niesprzecznych migawkach (snapshot) stanu danych roboczych. Takie zapytania analityczne mogą działać na wielu segmentach w dużych rozproszonych konfiguracjach MongoDB.
- Dodano nowe operatory $maxN, $minN i $lastN do określania wartości w zbiorze danych, a także operator $sortArray do sortowania elementów tablicy.
- Znacząco zwiększono wydajność segmentacji. Domyślny rozmiar bloku dla segmentowanej kolekcji zwiększono do 128 MB. Dodano polecenie configureCollectionBalancing do defragmentacji segmentowanej kolekcji.
- W narzędziach klienta do szyfrowania danych na poziomie pól (CSFLE, client-side field-level encryption) dodano wsparcie dla dostawców kluczy zgodnych z KMIP.
- Dodano możliwość kompresji i szyfrowania dziennika audytu, który odzwierciedla aktywność użytkowników DBMS.
- Wprowadzono eksperymentalny tryb synchronizacji danych między klastrami MongoDB (Cluster-to-Cluster Sync).
Źródło: opennet.ru
