Poza SQL: 8 nowych języków zapytań do danych

Język SQL dominował w zapytaniach o dane przez dziesięciolecia. Nowsze języki zapytań oferują większą elegancję, prostotę i elastyczność w nowoczesnych zastosowaniach.

Poza SQL: 8 nowych języków zapytań do danych

Thinkstock

Przez ostatnie trzy dekady bazy danych i strukturalny język zapytań (SQL) były niemal synonimami. Każdy, kto chciał pobierać informacje z bazy danych, musiał nauczyć się SQL. Każdy, kto chciał opiekować się bazą danych lub podjąć pracę jako administrator bazy danych, musiał opanować jego niuanse.

Sam język to powrót do przeszłości, możliwość myślenia i kodowania w sposób, w jaki robili to użytkownicy komputerów mainframe. Podczas gdy reszta świata zaczęła używać małych liter, użytkownicy SQL nadal wpisywali słowa takie jak SELECT czy WHERE. Nawet dziś mało kto przejmuje się tym, że niektórzy użytkownicy Tik Tok wyśmiewają się z nich lub pytają, dlaczego krzyczą. Jeśli ALL CAPS było wystarczająco dobre dla bohaterów w krawatach i koszulach z krótkim rękawem, to jest ono również wystarczająco dobre dla dzisiejszych pracowników zdalnych ubranych w piżamy z misiami.

Zobacz również:

  • Gartner: ogromny wzrost na rynku baz danych
  • 10 najgorętszych języków programowania 2022

Jednak pozycja języka SQL w zakresie wyszukiwania danych wymyka się spod kontroli. Pojawiają się nowe bazy danych, a niektóre z nich posługują się zupełnie nowymi językami. Nie chodzi o to, że SQL staje się mniej popularny. Wręcz przeciwnie, pisze się go więcej niż kiedykolwiek. Po prostu świat przechowywania danych eksploduje jeszcze szybciej, a niektóre z tych eksplozji pobudzają chęć eksperymentowania i poszukiwania nowych rozwiązań.

W tym artykule przedstawiamy osiem nowych metod pobierania danych. W niektórych przypadkach innowacje te są jedynie kosmetyczne. Programiści unowocześnili składnię języka SQL, aby była bardziej przejrzysta i czytelna, dzięki czemu przełączanie się między pisaniem kodu dla przeglądarki a pobieraniem danych jest mniej kłopotliwe. Twórcy tych narzędzi podkreślają, że podstawowa struktura jest zasadniczo taka sama jak w przypadku języka SQL. Nadal więc łatwo będzie się jej nauczyć. Nie należy się tym przejmować.

Inne narzędzia zachęcają nas do myślenia w zupełnie inny sposób. Bazy danych, które przechowują dane w postaci wykresów lub szeregów czasowych, oferują nowe paradygmaty dotyczące sposobu, w jaki programiści określają, co chcą znaleźć.

Nie wszystkie z tych opcji będą lepsze od SQL w realizacji potrzeb użytkownika. Nie wszystkie z nich zapewnią możliwości, których szukasz. Ale wszystkie dają szansę na inne myślenie o morzu bajtów na serwerze, które tylko czeka, aż znajdziesz sposób, aby określić swoje potrzeby.

GraphQL

Nazwa GraphQL jest nieco myląca, ponieważ tak naprawdę nie jest to język zaprojektowany do wykorzystania wszystkich możliwości grafowych baz danych. Jest to raczej elegancki skrót do zapytań o dane, które są przechowywane w zagnieżdżonym formacie podobnym do JSON. Zapytanie to tylko krótki opis tego, jak powinny wyglądać wyniki. Back-end patrzy na listę pól, które mogą zawierać ograniczenia wartości, i próbuje znaleźć wyniki, które do nich pasują. Podczas gdy SQL określa, w jaki sposób baza danych powinna wykonać zapytanie, użytkownicy GraphQL podają po prostu listę pól. Niektórzy nazywają to „zapytaniem przez przykład”.

Język ten w naturalny sposób pasuje do niektórych baz danych JSON, ale GraphQL staje się również coraz bardziej popularny do przeszukiwania relacyjnych baz danych ze schematem tabelarycznym. Inteligentne zaplecze może przetłumaczyć zagnieżdżone zapytania na wzór JOIN-ów, które pasują do schematu.

Oryginalny język powstał jako wewnętrzny projekt Facebooka, ale po jego udostępnieniu jako niezależny projekt open source, inni zaczęli tworzyć zaplecze GraphQL. Obecnie istnieją wersje napisane we wszystkich głównych językach, a także w wielu nowoczesnych językach eksperymentalnych.

PRQL

Jeśli myślisz o oprogramowaniu jako o rurociągu lub języku asemblerowym, to może spodoba Ci się PRQL, który jest skrótem od Pipelined Relational Query Language (wymawianym jako „Prequel”). Zapytania w tym języku są zbudowane jako łańcuch małych poleceń. Po połączeniu tych poleceń powstaje wynik zawierający tylko te dane, które są potrzebne.

Podobnie jak w wielu współczesnych językach programowania, model myślowy zapytania opiera się na podejściu funkcjonalnym. Proste funkcje, takie jak zmienne, zmniejszają liczbę powtórzeń i upraszczają przepływ danych. Wyniki z jednego wiersza są przekazywane do następnego wiersza w długim łańcuchu. Jeśli chcesz usunąć jeden krok, często możesz po prostu wykomentować tę linię, a reszta potoku nadal będzie działać.

Kod PRQL jest napisany w Rust jako transpiler do konwersji PRQL na SQL. Podstawowa struktura ma być rozszerzalna, więc można dodawać kolejne abstrakcje, aby dopasować ją do danego przypadku użycia. Ta łatwość eksperymentowania gwarantuje, że język będzie szybko ewoluował.

WebAssembly

Wielu programistów myśli o WebAssembly (w skrócie Wasm) jako o narzędziu do tworzenia szybkich aplikacji uruchamianych w przeglądarkach internetowych. Kiedy Redpanda zaczęła budować narzędzie do strumieniowania danych, które zastąpiłoby Kafkę, chcieli dodać mechanizm nie tylko dostarczania danych, ale także okazjonalnego przekształcania ich po drodze. Wybór padł na WebAssembly.

Redpanda działa jak księga rachunkowa, tworząc strumień danych, który jest niezmienny i uporządkowany. Zdarzenia są dołączane, a programiści mogą sięgnąć do strumienia w dowolnym momencie w przeszłości. Większość z nich zaczyna od nowo utworzonych zdarzeń, ale niektórzy mogą zacząć od przeszłości, aby stworzyć historyczne agregacje.

WebAssembly jest oczywiście znacznie bardziej rozbudowany i niskopoziomowy niż nawet procedury składowane, które są częścią niektórych baz danych. Nie wszyscy programiści chcą pisać kod na poziomie bajtów. Jednak taka opcja otwiera strumień danych na skomplikowane transformacje, które znacznie wykraczają poza możliwości języka SQL.

GQL

Graph Query Language (GQL) jest proponowanym standardem, który łączy podobne języki deklaratywne, takie jak Cypher, PGQL i GSQL. Programiści tworzą zapytania, określając konkretny model dla zestawu węzłów, a następnie baza danych jest odpowiedzialna za znalezienie dopasowań. GQL pracuje z bardziej złożonymi grafami własności, które pozwalają parom węzłów dzielić kilka różnych połączeń.

Standard ten jest w trakcie aktywnego rozwoju. Obecnie najlepsze implementacje są narzędziami badawczymi, które nie są przeznaczone do długoterminowego wdrożenia.

Gremlin

Gremlin, jeden z oryginalnych języków przeszukiwania grafu, wymaga podania zestawu kroków służących do przeszukiwania połączeń między węzłami. Niektórzy nazywają go językiem „opartym na ścieżkach” lub „trawersującym graf”. Każde zapytanie jest zbudowane z kroków, a każdy krok może obejmować mapowanie bieżącego węzła, filtrowanie listy lub tabelaryzację wyniku.

Język ten jest często tylko punktem wyjścia. Niektórzy, na przykład, rozszerzają Gremlina poprzez osadzenie w nim interpretera Pythona, tak aby zapytania mogły zawierać kod Pythona. Inni umieszczają Gremlina w standardowym języku programowania, takim jak Java, aby programiści mogli wykorzystać jego możliwości z poziomu tego języka.

Gremlin został po raz pierwszy zbudowany dla projektu Apache TinkerPop i został zaadoptowany przez główne transakcyjne bazy danych grafów, takie jak Amazon Neptune i frameworki przetwarzania grafów wykorzystujące Apache Spark lub Hadoop.

N1QL

Przez lata Couchbase poszukiwał najlepszego sposobu na zadawanie zapytań do dokumentów ogólnych. Na początku zapytanie było zapisywane jako funkcja JavaScript, która była przekazywana do bazy danych w celu wykonania. Było to ładne, ogólne rozwiązanie, które czasami trwało wieki, aby wygenerować wynik, ale wymagało od programistów nieco innego myślenia.

N1QL (wymawiane jako angielskie „nickel”) zostało zaprojektowane tak, aby ułatwić natywnym użytkownikom SQL pracę z obiektami JSON, które mogą być przechowywane w Couchbase. Podstawowe zapytanie składa się z kilku sekcji określonych przez słowa kluczowe SELECT, FROM i WHERE, tak jak w SQL. Szczegóły dotyczące określania ścieżki do struktury danych, z której będą pochodzić dane, są dostosowane do zagnieżdżonego świata obiektów JSON.

Aby zachęcić do eksperymentowania, N1QL oferuje warsztat do tworzenia zapytań z wizualnym interfejsem do testowania i udoskonalania zapytań. Couchbase oferuje również ogólną opcję wyszukiwania pełnotekstowego, która działa niezależnie dla zapytań szukających słów tekstowych zamiast danych strukturalnych.

Malloy

Według twórców Malloya problem z językiem SQL leży w szczegółach składni. Wyrażenie nawet najprostszego zapytania zajmuje dużo czasu, ponieważ język ten jest bardzo rozbudowany i pełen ukrytych pułapek wydajnościowych. Stworzyli więc nowoczesny język programowania z naturalnymi domyślnymi ustawieniami i prostszą składnią, który można skompilować do języka SQL, dzięki czemu nikt nie musi modernizować bazy danych.

W rezultacie powstała składnia, która przypomina bardziej rozbudowany GraphQL. Zapytanie jest bardziej jak model lub wizja wyniku, w tym wszelkie ograniczenia, dopasowania i wartości domyślne. Malloy zajmuje się w tle pewną optymalizacją. Na przykład, inteligentne JOINy mogą być generowane automatycznie, aby uniknąć pułapek wydajnościowych typu chasm i fan. Podzapytania mogą być agregowane w celu zaoszczędzenia czasu. W razie potrzeby dodawane są również indeksy. W rezultacie pisanie zapytań przypomina pisanie nowoczesnego kodu, a interpunkcja pozwala zachować zwięzłość struktury.

Rdzeń Malloya, dostępny na zasadach open source, jest zbudowany w języku TypeScript, co umożliwia włączenie go do kodu Node.js. Wtyczka VS Code upraszcza rozwój.

Basis

Większość języków zapytań jest powiązana bezpośrednio z konkretną bazą danych. Obrazowo rzecz ujmując, Basis tworzy raczej rurociąg, który może czerpać z różnych źródeł, a następnie filtrować je za pomocą mieszanki SQL i Pythona. Na końcu rurociągu znajdują się eksporterzy, którzy dostarczają dane do różnych standardowych opcji, od uruchamiania kodu, przez algorytmy sztucznej inteligencji, po wykresy i pulpity.

Programiści już budują takie „potoki” we własnym kodzie, a wiele projektów opiera się na podobnych strukturach. Basis oferuje gotową opcję, którą można dostosować na bardziej złożone sposoby. Zakres danych wejściowych obejmuje zarówno standardowe zapytania do bazy danych, jak i interfejsy API czy własny kod Pythona. Transformatory nie są ograniczone do podstawowych klauzul WHERE w SQL, ponieważ można napisać kod Pythona, który nie tylko filtruje dane, ale także przesuwa je w dół rurociągu.

Baza jest tylko jednym z przykładów nowszych narzędzi potoków danych, które otwierają proces zapytań na czerpanie z więcej niż jednego źródła, filtrowanie za pomocą więcej niż jednego języka i dostarczanie danych w więcej niż jednej formie. Jest to wizja możliwości pobierania danych z niemal dowolnego źródła i dostarczania ich do niemal dowolnego odbiorcy.

Źródło: InfoWorld

W celu komercyjnej reprodukcji treści Computerworld należy zakupić licencję. Skontaktuj się z naszym partnerem, YGS Group, pod adresem [email protected]

TOP 200