Architektura systemu
Konstrukcja systemu przetwarzania danych to rozdział stricte techniczny. Przedstawię tutaj jak system został zaprojektowany, zbudowany gdzie i jak obecnie rozmieszczone są jego funkcjonalności.
System RetractorDB został zaimplementowany w języku C++ pod kontrolą systemu Linux. Kod źródłowy podlega procesowi ciągłej integracji i testowania na platformie GitHub wspieranej przez CircleCI. Kod uruchamiany i rozwijany jest lokalnie na platformie Linux WSL2. Porzuciłem rozwój i implementację systemu pod kontrolą systemu Windows. W początkowej fazie utrzymywałem taką opcję i być może w przyszłości do niej powrócę. Jednak utrzymanie zbyt wielu platform rozwojowych znacząco opóźnia proces szybkiego prototypowania i rozwoju systemu. Nadal zachowuję i utrzymuję funkcjonalność systemu na platformie Linux ARM. Kod kompiluję i testuje się pod kontrolą maszyn opartych na architekturze ARM i x86-64 pracujących w zasobach CircleCI. Raspberry PI to jedna z docelowych platform produkcyjnych systemu RetractorDB przewidziana dla potrzeb Edge IoT.
Kompilacja kodu systemu korzysta z Conan 2, CMake i Ninja. Przygotowanie narzędzi, budowanie ze źródeł i instalację gotowych pakietów opisuje Proces instalacji. Linux pozostaje ogólnym kontraktem wdrożeniowym tej instrukcji; port Apple służy wyłącznie do rozwoju i testów, a jego ograniczenia opisano w wydzielonej sekcji tego załącznika.
Przegląd poruszonych w rozdziale tematów
Rozdział zbudowany jest warstwowo - od widoku ogólnego do szczegółów implementacyjnych.
-
System jako trójka współpracujących programów:
xretractorjako proces realizujący plan zapytań,xqryjako wieloinstancyjny klient danych bieżących,xtrdbjako narzędzie inspekcji plików binarnych. Na jednym hoście może działać wiele nazwanych procesówxretractor, każdy z własnym obszarem Boost IPC. Na schemacie Rys. 12 widać granicę odpowiedzialności komponentów dla jednej takiej instancji. -
Nazwy instancji, rozdzielenie obiektów IPC, rejestr
xrdbbus, globalna ochrona nazw strumieni i plików magazynu oraz reguły automatycznego kierowania poleceńxqry. Rozdział opisuje również stałą tożsamośćservice, wymianę całego planu przezxqry --reseti znaczenie trybów pokazywanych przezxqry --bus. -
Które ścieżki danych są zawsze aktywne (napływ danych → xretractor → artefakty), a które opcjonalne lub diagnostyczne. Opisano też mechanizm graceful shutdown - xretractor reaguje na sygnały
SIGINT,SIGTERMiSIGHUPkończąc bieżący cykl bez ryzyka uszkodzenia plików. -
Artefakty, substraty i efemerydy
Kluczowy podział taksonomiczny systemu. Każdy typ strumienia ma inne przeznaczenie i inną strategię składowania: artefakty materializowane na dysku jako trwały wynik, substraty to strumienie pośrednie niezbędne podczas obliczeń, efemerydy - ulotne źródła danych, których nie można ani nie warto przechowywać.
-
Czteroplikowa struktura artefaktu: plik binarny z danymi (stałej długości rekordy, brak nagłówka), deskryptor
.descopisujący schemat rekordu w gramatyce ANTLR4, plik metadanych.metaz indeksem wartości null i przerw w transmisji (kodowanie RLE), opcjonalny plik cienia.shadowdo niedestruktywnej modyfikacji historycznych rekordów. Deskryptor określa strategię składowania przez poleTYPE. -
Proces przekształcania pliku
.rqlw gotowy plan realizacji zapytania. Flaga-curuchamia tryb kompilacji bez wykonania; połączona z-d -f -sgeneruje wyjście DOT, któregraphvizzamienia w graf przepływu danych. Graf pokazuje dwie domeny: stos wyrażeń arytmetycznych (PUSH, ADD, itp.) i algebrę strumieniową. Opisano pełny zestaw flag trybu kompilacji i wykonania. -
Przetwarzanie i dystrybucja danych
Kompletny walkthrough: od przygotowania pliku danych przez uruchomienie
xretractor, przez podgląd statystyk strumieniowania (xqry -d), po wizualizację na żywo w gnuplot (xqry -s str1 -p 50,50 | gnuplot) i transmisję przez sieć za pomocąnc. Przykład łączy dwa źródła - plik tekstowy i/dev/urandom- ilustrując jak operator+w klauzuli FROM realizuje algebraiczne łączenie strumieni. -
Narzędzie
xtrdb- interaktywny inspektor plików binarnych wzorowany na stylu dbase. Polecenia.open,.desc,.list,.rlisti.metapozwalają przeglądać zawartość artefaktów bez znajomości formatu binarnego. Narzędzie służy też do weryfikacji deterministyczności: te same dane wejściowe powinny zawsze dawać identyczne wyniki.
Trzy polecenia wystarczające do uruchomienia kompletnego przepływu:
xretractor -c query.rql # weryfikacja poprawności pliku zapytań
xretractor query.rql # uruchomienie przetwarzania
xqry -s <strumień> # odczyt danych bieżących
Czwarty element - xtrdb - pojawia się przy diagnostyce i testowaniu, nie w typowym przepływie produkcyjnym.