Wydanie relacyjno-grafowej bazy danych EdgeDB 2.0

Wydano wydanie DBMS EdgeDB 2.0, które implementuje relacyjno-grafowy model danych oraz język zapytań EdgeQL, optymalizowane do pracy z złożonymi danymi hierarchicznymi. Kod napisany jest w językach Python i Rust (parser oraz krytyczne dla wydajności części) i jest udostępniany na licencji Apache 2.0. Projekt rozwija się jako nakładka na PostgreSQL. Biblioteki klienckie zostały przygotowane dla języków Python, Go, Rust oraz TypeScript/Javascript. Zapewnia narzędzia wiersza poleceń do zarządzania DBMS i interaktywnego wykonywania zapytań (REPL).

Zamiast modelu danych opartego na tabelach, w EdgeDB zastosowano deklaratywny system oparty na typach obiektowych. Zamiast kluczy obcych (foreign key) do określania powiązań między typami stosuje się łączenie przez odwołania (jeden obiekt może być używany jako właściwość innego obiektu).

type Person { required property name -> str; } type Movie { required property title -> str; multi link actors -> Person; }

Aby przyspieszyć przetwarzanie zapytań, mogą być stosowane indeksy. Obsługiwane są również takie funkcje jak ścisła typizacja właściwości, ograniczenia wartości właściwości, właściwości obliczeniowe i procedury składowane. Z charakterystyk obiektowego schematu przechowywania EdgeDB, który przypomina ORM, można zauważyć możliwość mieszania schematów, wiązania właściwości z różnych obiektów oraz zintegrowane wsparcie dla JSON.

Dostarczane są wbudowane narzędzia do migracji schematu przechowywania – po zmianie schematu, określanego w oddzielnym pliku esdl, wystarczy wykonać polecenie 'edgedb migration create', a baza danych przeanalizuje różnice w schemacie i interaktywnie wygeneruje skrypt na przejście do nowego schematu. Historia zmian schematu jest automatycznie śledzona.

Dla formułowania zapytań obsługiwany jest zarówno język zapytań GraphQL, jak i własny język EdgeDB, stanowiący adaptację SQL dla danych hierarchicznych. Zamiast list, wyniki zapytania są przedstawiane w postaci zorganizowanej, a zamiast podzapytań i operacji JOIN dostępna jest możliwość wskazania jednego zapytania EdgeQL jako wyrażenia wewnątrz innego zapytania. Obsługiwane są transakcje i pętle.

select Movie { title, actors: { name } } filter .title = "The Matrix" insert Movie { title := "The Matrix Resurrections", actors := ( select Person filter .name in { 'Keanu Reeves', 'Carrie-Anne Moss', 'Laurence Fishburne' } ) } for number in {0, 1, 2, 3} union ( select { number, number + 0.5 } );

W nowej wersji:

  • Dodano wbudowany interfejs webowy do administracji bazą danych, umożliwiający przeglądanie i edytowanie danych, wykonywanie zapytań EdgeQL oraz analizowanie zastosowanego schematu przechowywania. Interfejs uruchamiany jest za pomocą polecenia "edgedb ui", po którego wykonaniu staje się dostępny pod adresem localhost.
    Wydanie relacyjno-grafowej bazy danych EdgeDB 2.0
  • Zrealizowano wyrażenie "GROUP", umożliwiające sekcjonowanie i agregowanie danych oraz wykonywanie grupowania danych według dowolnych wyrażeń EdgeQL, analogicznie do grupowania w operacji SELECT.
  • Możliwość zarządzania dostępem na poziomie obiektów. Zasady dostępu są określane na poziomie schematu przechowywania i pozwalają ograniczyć możliwość użycia określonego zestawu obiektów w operacjach pobierania, wstawiania, usuwania i aktualizacji. Na przykład, można dodać zasadę, która umożliwia aktualizację publikacji tylko autorowi.
  • Dodano możliwość używania globalnych zmiennych w schemacie przechowywania. Została zaproponowana nowa globalna zmienna current_user do powiązania z użytkownikiem.
  • Dodano wsparcie dla typów definiujących zakresy wartości (range).
  • Przygotowano oficjalną bibliotekę kliencką dla języka Rust.
  • Został ustabilizowany binarny protokół EdgeDB, który umożliwia jednoczesne przetwarzanie wielu różnych sesji w ramach jednego połączenia sieciowego, przekazywanie przez HTTP, korzystanie z globalnych zmiennych oraz lokalnych stanów.
  • Dodano wsparcie dla aktywacji przez gniazdo, co pozwala nie trzymać serwera przetwarzającego w pamięci i uruchamiać go tylko w momencie próby nawiązania połączenia (przydatne dla oszczędności zasobów na systemach deweloperów).

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster