Wydanie relacyjnego grafu DBMS EdgeDB 2.0

Zaprezentowano wersję EdgeDB 2.0 DBMS, która implementuje relacyjny model danych grafowych i język zapytań EdgeQL, zoptymalizowany do pracy ze złożonymi danymi hierarchicznymi. Kod napisany jest w Pythonie i Rust (parser i części krytyczne dla wydajności) i jest rozpowszechniany na licencji Apache 2.0. Projekt jest rozwijany jako dodatek do PostgreSQL. Biblioteki klienckie przygotowane są dla Pythona, Go, Rusta i TypeScript/Javascript. Udostępnia narzędzia wiersza poleceń do zarządzania systemem DBMS i interaktywnego wykonywania zapytań (REPL).

Zamiast modelu danych opartego na tabelach, EdgeDB używa systemu deklaratywnego opartego na typach obiektów. Zamiast kluczy obcych do definiowania relacji między typami stosuje się łączenie przez referencję (jeden obiekt może być używany jako właściwość innego obiektu).

wpisz Osoba {wymagana nazwa właściwości -> str; } wpisz Film { wymagany tytuł właściwości -> str; aktorzy z wieloma linkami -> Osoba; }

Indeksy można wykorzystać do przyspieszenia przetwarzania zapytań. Obsługiwane są także funkcje, takie jak silne typowanie właściwości, ograniczenia wartości właściwości, właściwości obliczane i procedury składowane. Funkcje schematu obiektowego przechowywania danych EdgeDB, który nieco przypomina ORM, obejmują możliwość mieszania schematów, łączenia właściwości różnych obiektów i zintegrowaną obsługę JSON.

Dostępne są wbudowane narzędzia do przechowywania migracji schematu - po zmianie schematu określonego w osobnym pliku esdl wystarczy uruchomić komendę „edgedb migracja create”, a DBMS przeanalizuje różnice w schemacie i interaktywnie wygeneruje skrypt migracji do nowy schemat. Historia zmian schematu jest śledzona automatycznie.

Do generowania zapytań obsługiwany jest zarówno język zapytań GraphQL, jak i autorski język EdgeDB, będący adaptacją SQL dla danych hierarchicznych. Zamiast list wyniki zapytań są formatowane w sposób ustrukturyzowany, a zamiast podzapytań i JOINów można określić jedno zapytanie EdgeQL jako wyrażenie w innym zapytaniu. Obsługiwane są transakcje i cykle.

wybierz Film { tytuł, aktorzy: { imię } } filter .title = „Matrix” wstaw Film { tytuł := „Wskrzeszenia Matrixa”, aktorzy := ( wybierz Filtr osoby .name w { „Keanu Reeves”, „Carrie- Anne Moss', 'Laurence Fishburne' } ) } dla liczby w związku {0, 1, 2, 3} ( wybierz { liczba, liczba + 0.5 } );

W nowej wersji:

  • Do administrowania bazami danych dodano wbudowany interfejs WWW, umożliwiający przeglądanie i edycję danych, uruchamianie zapytań EdgeQL oraz analizę stosowanego schematu przechowywania. Interfejs jest uruchamiany za pomocą polecenia „edgedb ui”, po czym staje się dostępny podczas uzyskiwania dostępu do hosta lokalnego.
    Wydanie relacyjnego grafu DBMS EdgeDB 2.0
  • Zaimplementowano wyrażenie „GROUP”, umożliwiające dzielenie i agregowanie danych oraz grupowanie danych przy użyciu dowolnych wyrażeń EdgeQL, podobnie jak grupowanie w operacji SELECT.
  • Możliwość kontroli dostępu na poziomie obiektu. Reguły dostępu są definiowane na poziomie schematu przechowywania i pozwalają ograniczyć możliwość wykorzystania określonego zestawu obiektów w operacjach pobierania, wstawiania, usuwania i aktualizacji. Można na przykład dodać regułę zezwalającą tylko autorowi na aktualizację publikacji.
  • Dodano możliwość wykorzystania zmiennych globalnych w schemacie przechowywania. Zaproponowano nową zmienną globalną current_user do powiązania z użytkownikiem.
  • Dodano obsługę typów definiujących zakresy wartości.
  • Przygotowano oficjalną bibliotekę klienta dla języka Rust.
  • Ustabilizowano protokół binarny EdgeDB, dzięki czemu możliwe jest jednoczesne przetwarzanie kilku różnych sesji w ramach tego samego połączenia sieciowego, przesyłanie dalej poprzez HTTP, z wykorzystaniem zmiennych globalnych i stanów lokalnych.
  • Dodano obsługę aktywacji gniazd, która pozwala nie przechowywać procedury obsługi serwera w pamięci i uruchamiać ją tylko podczas próby nawiązania połączenia (przydatne do oszczędzania zasobów w systemach deweloperskich).

Źródło: opennet.ru

Dodaj komentarz