26.3.2024

NoSQL databázy a D2000

Na začiatku sa skúsme spýtať jednoduchú otázku: je D2000 NoSQL databáza?

 

Skôr, ako kategoricky odpovieme „Samozrejme, že nie je!”, sa skúsme zamyslieť nad tým, čo vlastne NoSQL databáza je.

Prvá veta v článku o NoSQL databázach na Wikipédi hovorí o tom, čo je NoSQL s vyhranením sa voči SQL databázam – NoSQL databáza poskytuje iný mechanizmus na ukladanie a získavanie dát, ako sú tabuľkové relácie použité v relačných databázach:

„A NoSQL (originally referring to "non SQL" or "non relational") database provides a mechanism for storage and retrieval of data that is modeled in means other than the tabular relations used in relational databases.“

 

Wikipédia uvádza viacero odlišností NoSQL databáz od relačných SQL databáz. Používa výrazy ako „mnohé“ a „viaceré“ NoSQL databázy, či „väčsina“ NoSQL databáz.

 

Samotná skratka NoSQL najskôr znamenala „non SQL“, neskôr bola redefinovaná ako „Not Only SQL“.

Obr: podľa niektorých názorov mala skratka NoSQL viac ako dva významy 

Pán Martin Fowler vo svojom článku „NosqlDefinition“ uvádza viaceré charakteristiky spoločné pre NoSQL databázy, ale zároveň poznamenáva, že žiadne z nich nie sú definičné.

 

Podľa zoznamu na http://nosql-database.org patria do kategórie NoSQL napríklad aj Lotus Notes alebo Yserial, čo je Python wrapper nad sqlite3.

 

Tento rýchly prehľad naznačuje, že pojem NoSQL databáz zahŕňa pomerne širokú množinu technológií a „definuje“ sa skôr vymedzením voči SQL.

 

Skúsme sa pozrieť na jadro D2000-ky a na technológiu DODM (Dynamic Object Data Model). Podľa popisu z dokumentácie:
 „Požiadavka rýchlej odozvy aplikácie na udalosti v sledovanom technologickom procese viedla k vytvoreniu technológie ukladania a spracovania údajov - DODM (Dynamický Objektový Dátový Model). Táto technológia v sebe spája objektovo orientovaný prístup a vysokú výkonnosť dátového modelu aplikácie pracujúcej v reálnom čase.“

 

Takže DODM je technológia ukladania a spracovania údajov. DODM je implementovaný v procese D2000 Server, ktorý slúži ako základ alebo jadro systému D2000. Nezávisí od ostatných procesov D2000, takže samotný D2000 Server je možné vnímať ako „databázu“, ktorá uchováva údaje v pamäti (takže je in-memory) a prípadne ich sperzistentňuje (hodnoty objektov v konfiguračnej databáze, záznamy o udalostiach v monitorovacej databáze).  Ak je spustený proces D2000 Archív, tak v závislosti od konfigurácie jednotlivých objektov tieto uchováva v archívnej databáze ako optimalizované časové rady (timeseries) – produkčné aplikácie zvládajú archiváciu viac ako stotisíc objektov.

 

 D2000 Server obsahuje silnú podporu pre rýchlu distribúciu informácií o zmenách dát, ktorá je dostupná pre procesy systému D2000 ako aj pre externé procesy (pomocou rozhraní VBApi, OBJApiJava API). K dispozícii je aj ODBC ovládač pre prístup k aktuálnym hodnotám systému D2000 ako aj k údajom z archívu historických hodnôt.

Mimochodom, nedávno som mal možnosť pozorovať v praxi SCADA systém, ktorý bol síce tiež postavený na in-memory databáze, ale bez podpory distribúcie zmien dát. Klientské procesy namiesto toho cyklicky načítavali dáta (polling) z in-memory tabuliek. (Ne)praktický dôsledok bol, že napríklad užívateľské rozhranie bolo schopné zobrazovať zmeny dát maximálne s frekvenciou raz za dve sekundy. Takže keď z komunikácie prichádzala Boolean hodnota meniaca sa každú sekundu (True/False), zmeny nebolo v užívateľskom rozhraní vidieť!

 

Naproti tomu klient systému D2000 dostáva cez API push notifikácie o každej zmene hodnoty objektu, o ktorý má záujem. D2000 Server je schopný spracovávať a distribuovať desiatky až stovky tisíc zmien hodnôt za sekundu. Odkiaľ vlastne zmeny hodnôt prichádzajú? Hodnoty niektorých objektov (systémové premenné a predefinované štruktúrované premenné) generuje priamo D2000 Server. Hodnoty ostatných objektov do systému dodávajú klienti – natívni alebo externé procesy cez vyššie spomenuté API.

 

redundantných D2000 systémoch je k aktívnemu („master“) D2000 serveru  pripojený jeden alebo viacero pohotovostných („standby“) D2000 Serverov. Aktívny D2000 server replikuje realtime dáta na pohotovostné servery, aby všetky mali identický obraz dát v pamäti, čo sa dá chápať ako asynchrónna master-slave replikácia. Aj toto je v súlade s popisom na Wikipédii:

„Most NoSQL stores lack true ACID transactions, although a few databases have made them central to their designs. Instead, most NoSQL databases offer a concept of "eventual consistency" in which database changes are propagated to all nodes "eventually" (typically within milliseconds) so queries for data might not return updated data immediately or might result in reading data that is not accurate, a problem known as stale reads.“

 

Dynamický objektový dátový model je technológia vyvinutá vo firme Ipesoft. Definuje rôzne relácie medzi objektami, ktoré sú ale inej povahy ako relácie v SQL databázach. Príkladom je relácia „objekt je používaný iným objektom“ alebo relácia „rodič-potomok“. DODM vznikol ako odpoveď na konkrétne problémy, ktoré musia systémy triedy SCADA alebo MES riešiť. Tieto všetky fakty sú tiež v súlade s popisom Wikipédie:

„The particular suitability of a given NoSQL database depends on the problem it must solve. Sometimes the data structures used by NoSQL databases are also viewed as "more flexible" than relational database tables“.

 

Mimochodom, Wikipédia uvádza medzi NoSQL databázami aj IBM Domino (predtým Lotus Notes).

Kedysi dávno som čítal sci-fi poviedku, v ktorej americký vynálezca vymyslel jednosmerný teleport. Problém bol, že nevedel, kam sa veci vložené do teleportu premiestnia. Takže ho začal predávať ako  ... drtič odpadkov. Na rozdiel od štandardných drtičov odpadkov ale nevypúšťal  rozmixované odpadky do kanalizácie, ale teleportoval  ich niekam do vesmíru :-)

Vynálezcu pomerne rýchlo zatvorili a začali vypočúvať. Bránil sa s tým, že predáva iba drtiče odpadkov. Na čo vyšetrovateľ reagoval „Vyhlásiť Váš vynález za drtič odpadkov je niečo podobné, ako otvoriť si na hrane nukleárnej ponorky Polaris pivovú fľašu a následne vyhlásiť Polaris za otvárač fliaš“.

 

Takže – použijúc túto analógiu – môžeme odpovedať na otázku z úvodu a vyhlásiť Lotus Notes alebo D2000 za špecializované NoSQL databázy, hoci ich použitie je oveľa širšie. Lotus Notes je zároveň aplikačný, poštový a web server a systém pre podporu tímovej spolupráce. D2000 je aplikačný server reálneho času a technológia s pomocou ktorej je možné vytvárať veľké SCADA a MES riešenia.

 

Mimochodom, na stránke http://nosql-database.org už môžete popri Lotus Notes nájsť v zozname NoSQL databáz aj D2000-ku ...

 

A posledná poznámka - existuje veľmi zaujímavý blog, kde autor píše o návrate SQL databáz po dekáde, v ktorej boli presadzované NoSQL databázy. Oproti výhodám NoSQL databáz (výkon, škálovanie) kladie práve problémy s neštandardnosťou (neexistencia spoločného dotazovacieho jazyka, denormalizácia dát spôsobujúca zvýšenie ich objemu, rozdielnosť jednotlivých databáz). Ako príklad uvádza pôvodne NoSQL databázu Spanner vyvíjanú firmou Google pre ich interné potreby, ktorá sa v priebehu rokov 2010-2017 vyvinula do relačného databázového systému s dotazovacím jazykom SQL.

Iné blogy