Opublikowano wydanie projektu FerretDB 1.0, które umożliwia zastąpienie dokumentowo-zorientowanej bazy danych MongoDB PostgreSQL bez wprowadzania zmian w kodzie aplikacji. FerretDB działa jako serwer proxy, który tłumaczy zapytania do MongoDB na zapytania SQL do PostgreSQL, co pozwala na użycie PostgreSQL jako rzeczywistego magazynu. Wersja 1.0 została oznaczona jako pierwsze stabilne wydanie, gotowe do ogólnoustrojowego użytku. Kod napisano w języku Go i jest udostępniany na licencji Apache 2.0.
Główną docelową grupą użytkowników FerretDB są ci, którzy nie korzystają w swoich aplikacjach z zaawansowanych funkcji MongoDB, ale chcą używać w pełni otwartego stosu oprogramowania. Na obecnym etapie rozwoju FerretDB wspiera podzbiór funkcji MongoDB, które są najczęściej stosowane w typowych aplikacjach. Konieczność wdrożenia FerretDB może wynikać z przejścia MongoDB na licencję SSPL, która opiera się na licencji AGPLv3, ale nie jest otwarta, ponieważ zawiera dyskryminujące wymaganie dostarczania nie tylko kodu samej aplikacji, ale także kodów źródłowych wszystkich składników zaangażowanych w świadczenie usługi w chmurze.
MongoDB zajmuje niszę pomiędzy szybkimi i skalowalnymi systemami operującymi danymi w formacie klucz/wartość a relacyjnymi bazami danych, funkcjonalnymi i wygodnymi w tworzeniu zapytań. MongoDB wspiera przechowywanie dokumentów w formacie podobnym do JSON, ma wystarczająco elastyczny język do formułowania zapytań, może tworzyć indeksy dla różnych przechowywanych atrybutów, efektywnie zapewnia przechowywanie dużych obiektów binarnych, wspiera logowanie operacji zmiany i dodawania danych do bazy danych, może działać zgodnie z paradygmatem Map/Reduce, wspiera replikację i budowanie konfiguracji odpornych na awarie.
Wśród zmian w FerretDB 1.0:
- Zaimplementowano polecenia createIndexes i dropIndexes do tworzenia i usuwania jednego lub wielu indeksów w kolekcji.
- Zaimplementowano polecenie getMore, które pozwala na uzyskanie nowej partii wyników z poleceń zwracających kursor, takich jak find i aggregate.
- Dodano wsparcie dla operatora agregacyjnego $sum do obliczania sumy wartości grupy.
- Dodano wsparcie dla operatorów $limit i $skip, aby ograniczyć liczbę i pominąć dokumenty podczas agregacji.
- Dodano wsparcie dla operatora $count do zliczania dokumentów w trakcie agregacji.
- Dodano wsparcie dla operatora $unwind do rozpakowywania pól tablicy w przychodzących dokumentach oraz tworzenia listy z osobnym dokumentem dla każdego elementu tablicy.
- Dodano częściowe wsparcie dla poleceń collStats, dbStats i dataSize, aby uzyskać statystyki dotyczące kolekcji i bazy danych, a także rozmiaru danych.
Źródło: opennet.ru
