Wydanie DBMS SQLite 3.42 i DuckDB 0.8.0. CG/SQL z implementacją procedur składowanych dla SQLite

Opublikowano wydanie SQLite 3.42, lekkiego systemu DBMS zaprojektowanego jako biblioteka wtyczek. Kod SQLite jest rozpowszechniany w domenie publicznej, tj. mogą być wykorzystywane bez ograniczeń i bezpłatnie w dowolnym celu. Wsparcie finansowe dla programistów SQLite zapewnia specjalnie utworzone konsorcjum, w skład którego wchodzą takie firmy jak Adobe, Oracle, Mozilla, Bentley czy Bloomberg.

Główne zmiany:

  • W przypadku indeksów pełnotekstowych FTS5 zaimplementowano polecenie bezpiecznego usuwania, które całkowicie czyści wszystkie pozostałe dane po usunięciu.
  • Funkcje do przetwarzania danych w formacie JSON obsługują teraz rozszerzenia JSON5.
  • Ulepszony planer zapytań. Optymalizacja liczby wyświetleń jest domyślnie włączona. Wyeliminowano obsługę nieużywanych kolumn w podzapytaniach. Ulepszona implementacja optymalizacji push-down.
  • Dodano opcję „--unsafe-testing” do interfejsu CLI, aby umożliwić używanie podczas testowania niektórych niebezpiecznych poleceń, takich jak „.testctrl”. W trybie bezpiecznym („--safe”) dozwolone są polecenia „.log on” i „.log off”. Dodano obsługę separatora „—”, dla argumentów, po których przetwarzanie opcji jest wyłączone. Dodano parametry ":inf" i ":nan" powiązane z wartościami nieskończoności i NaN.
  • Nazwy funkcji SQL zdefiniowanych przez aplikację mogą przecinać się ze słowami kluczowymi CROSS, FULL, INNER, LEFT, NATURAL, OUTER i RIGHT.
  • Rozszerzone możliwości sprawdzania integralności PRAGMA. Dodano sprawdzanie określania wartości NaN w kolumnach z warunkiem NOT NULL. Poprawiona zawartość informacyjna komunikatów o błędach.
  • Dodanie sesji umożliwia przechwytywanie zmian z tabel bez ROWID-ów.
  • Modyfikator „subsec” został dodany do funkcji do pracy z czasem i datami w celu wykorzystania ułamków sekund.
  • Zmniejszono domyślną głębokość rekurencji dla tablic i obiektów JSON z 2000 do 1000.

Ponadto powstało wydanie DuckDB 0.8.0 DBMS, które rozwija wariant SQLite, wzbogacony o funkcje i optymalizacje do wykonywania zapytań analitycznych obejmujących znaczną część przechowywanych danych, na przykład agregowanie całej zawartości tabel lub łączenie kilku duże stoły. Udostępniono rozszerzony dialekt języka SQL, w tym dodatkowe możliwości obsługi bardzo złożonych i długotrwałych zapytań, a także obsługę typów złożonych (tablice, struktury, związki), jednoczesne wykonywanie wielu zapytań oraz wykonywanie zapytań bezpośrednio z pliki w formacie CSV, JSON i Parquet. Możliwy jest import z PostgreSQL DBMS.

Oprócz kodu powłoki z SQLite, projekt wykorzystuje przeniesiony do osobnej biblioteki parser z PostgreSQL, komponent Date Math z MonetDB, własną implementację funkcji okna (opartą na algorytmie Segment Tree Aggregation), procesor wyrażeń regularnych oparty na bibliotece RE2, własnym optymalizatorze zapytań, mechanizmie kontrolnym MVCC równoczesnej realizacji zadań (Multi-Version Concurrency Control), a także wektorowym silniku wykonywania zapytań opartym na algorytmie Hyper-Pipelining Query Execution, który pozwala przetwarzać duże zbiory wartości jednocześnie w jednej operacji. Kod projektu jest rozpowszechniany na licencji MIT.

W nowej wersji DuckDB:

  • Dodano nowe wyrażenia „PIVOT” i „UNPIVOT”, aby przekształcić wiersze w kolumny i odwrotnie.
  • Ulepszona równoległość podczas importowania i eksportowania danych. Domyślnie odczyt z plików w formacie CSV do wielu strumieni i zapis wielowątkowy są realizowane przy użyciu formatów Parquet, CSV i JSON.
  • Dodano operatora „**” do rekurencyjnej iteracji po katalogach podczas definiowania ścieżek plików (np. FROM „'data/glob/crawl/stackoverflow/**/*.csv';”).
  • Dodano obsługę operacji scalania (JOIN) dla danych w postaci szeregów czasowych (wycinków wartości parametrów w określonych przedziałach czasowych), w których kryterium scalania rekordów nie jest dokładne, a przybliżone dopasowanie wartości w polu z czasem (np. można łączyć rekordy, których czas różni się nie więcej niż o 1 minutę).
  • Zaimplementowano odroczone ładowanie metadanych bazy danych, co pozwoliło dziesięciokrotnie przyspieszyć uruchamianie DBMS.
  • Dodano obsługę łączenia niestandardowych funkcji w języku Python.
  • Dodano obsługę interfejsu API ADBC ​​(Arrow Database Connectivity) do przesyłania danych przy użyciu Apache Arrow.
  • Zaimplementowano powiązanie do integracji z kodem Swift.
  • Zmieniono zachowanie operatora dzielenia („/”), który teraz domyślnie wykonuje obliczenia zmiennoprzecinkowe zamiast operacji na liczbach całkowitych. Zaproponowano nowy operator „//” do dzielenia liczb całkowitych. Stare zachowanie można przywrócić, ustawiając „SET integer_division=true;”.
  • Zmieniono sposób rozliczania rekordów zerowych podczas sortowania z „NULLS FIRST” na „NULLS LAST”, tj. Wartości NULL będą teraz wyświetlane na końcu zamiast na początku listy. Stare zachowanie można przywrócić za pomocą ustawienia „SET default_null_order='nulls_first';”.

Dodatkowo na uwagę zasługuje projekt CG/SQL rozwijany przez Facebooka, który dostarcza generator kodu do wykorzystania procedur składowanych z SQLite. CG/SQL umożliwia pisanie procedur składowanych w specjalnym dialekcie T-SQL (Transact-SQL), co pozwala na wywoływanie funkcji standardowej biblioteki C i dostęp do danych w SQLite. Wygenerowane procedury składowane są kompilowane do kodu C, który używa SQLite C API do wykonywania określonych działań i przetwarzania złożonych zapytań. Skompilowane procedury składowane można łączyć z programami C, Java i Objective-C. Kod projektu jest napisany w C i rozpowszechniany na licencji MIT.

Źródło: opennet.ru

Dodaj komentarz