• Rezultati Niso Bili Najdeni

4.2.1 Podatkovna baza – PostgreSQL

Shranjevanje večje količine podatkov na verigi blokov je drago, predvsem za-radi visok cen plina pri spreminjanju informacij v pametni pogodbi. Priporo-čljivo je, da v pametni pogodbi hranimo le podatke, ki jih ta nujno potrebuje za delovanje, saj s tem zmanjšamo ceno transakcij. Ostale podatke, ki jih je lahko poljubno veliko, je zaradi omenjenih razlogov bolje hraniti v zunanjih podatkovnih virih.

PostgreSQL je brezplačna in odprtokodna relacijska podatkovna baza, ki je kompatibilna s standardom SQL. Podpira traksakcije z ACID lastnostmi (atomarnost, konsistentnost, izolacija in trajnost), poglede, sprožilce, tuje ključe in shranjene procedure. Narejena je za obdelavo velike količine

podat-4.2. ZALEDNI DEL 37

veriga blokov

prerok

REST API

tržni podatki

IoT podatki

umetna inteligenca

decentralizirane aplikacije

Slika 4.1: Vloga preroka pri pridobivanju podatkov iz zunanjega sveta.

kov s sočasnimi uporabniki. Za vse znane programske jezike obstajajo tudi knjižnice, ki poenostavljajo dostop do PostgreSQL podatkovne baze.

Relacijska podatkovna baza predstavlja množico entitet, med katerimi že ob ustvarjanju definiramo relacije. Podatke predstavimo v obliki tabel s stolpci in vrsticami. Tabele vsebujejo podatke o objektih, ki jih hranimo v podatkovni bazi. Vsak stolpec tabele predstavlja določen podatek o entiteti.

Vsaka vrstica tabele lahko vsebuje enolični identifikator, ki ga imenujemo primarni ključ (PK). Vrstice iz različnih tabel lahko med seboj povežemo s tujimi ključi (FK).

Standardni način za poizvedovanje po relacijskih podatkovnih bazah je je-zik SQL. Uporablja se za dodajanje, posodabljanje ali brisanje vrstic. Ponuja tudi napredne mehanizme za poizvedovanje po tabelah, vračanje podmnožice stolpcev, združevanje tabel glede na ključe in ustvarjanje novih tabel ter baz.

Spodnji izsek predstavlja nekaj preprostih operacij v jeziku SQL.

-- vrni imena oseb, katerih poštna številka je 1234

SELECT CustomerName FROM Customers WHERE PostalCode=1234;

-- vstavi novo osebo z imenom Daniel INSERT INTO Customers

(CustomerName, ContactName, Address, City, PostalCode, Country)

VALUES

(’Daniel’, ’Tom B. Erichsen’, ’Skagen 21’,

’Stavanger’, 4006, ’Norway’);

-- izbriši osebe, ki so iz Finske

DELETE FROM Customers WHERE Country=’Finland’;

-- posodobi mesto uporabnika z ID-jem 1 UPDATE Customers SET

City= ’Frankfurt’

WHERE

CustomerID = 1;

4.2.2 Decentralizirano shranjevanje podatkov – IPFS

Omrežje IPFS (angl. InterPlanetary File System) je decentraliziran P2P protokol za shranjevanje in dostop do datotek, spletnih strani, aplikacij in podatkov [106]. Navdih jemlje od drugih uspešnih P2P projektov, kot so BitTorrent, Git in SFS (Smart File System). Za razliko od interneta, kjer do virov dostopamo glede na njihov naslov z navedbo URL nasova, IPFS upo-rablja naslavljanje po vsebini (angl. content-based addressing). To pomeni, da do vsebine ne dostopamo preko njenega naslova, ampak preko vsebine same. Ko zaprosimo za informacijo, ne rabimo vedeti, kje je shranjena, saj

4.2. ZALEDNI DEL 39

bo za njeno iskanje poskrbel IPFS protokol. Za delovanje takega protokola je potrebno individualiziranje datotek. To je postopek dodeljevanja enoličnih identifikatorjev vsebine (CID) – zgoščenih vrednosti, ki poskrbi, da vsaka da-toteka prejme enolično vrednost preko katere jo lahko najdemo. Naslavljanje po vsebini ni edinstveno protokolu IPFS, saj podoben princip uporablja tudi veriga blokov pri povezovanju blokov in protokol Git pri generiranju zgoščene vrednosti za vsako potrditev (angl. commit).

Nekateri distribuirani sistemi za predstavitev relacij med podatki upo-rabljajo usmerjen aciklični graf (angl. directed acyclic graph, DAG). IPFS uporablja prilagojeno različico tega grafa, imenovano Merklov graf, ki je po-doben Merklovemu drevesu, le da se lahko podatki hranijo v vseh vozliščih in ne le v listih. Vsako vozlišče Merklovega grafa vsebuje enolično zgoščeno vrednost, ki predstavlja vsebino tega vozlišča. To omogoča identifikacijo objekta z zgoščeno vrednostjo vozlišča, kar predstavlja naslavljanje po vse-bini. Prednost uporabe take podatkovne strukture je, da si podobne datoteke lahko delijo dele Merklovega grafa. Ob posodobitvi datotečnega sistema se posodobi samo del grafa, ki je hranil posodobljene datoteke. Vsa preostala vozlišča ostanejo nespremenjena.

Kot smo že omenili, je shranjevanje večje količine podatkov na verigi blokov odsvetovano zaradi visokih stroškov. Namesto tega lahko vsebino datoteke shranimo na omrežje IPFS. Kot rezultat dobimo 46 bajtov dolg enolični identifikator shranjene datoteke, ki ga lahko zapišemo v pametno pogodbo [107]. Namesto hranjenja celotne vsebine datoteke na verigi blokov, shranimo le njen identifikator, kar predstavlja le majhen del velikosti vsebine datoteke.

4.2.3 Aplikacijski strežnik – Java Spring Boot

Sodobne aplikacije za pridobivanje in procesiranje podatkov potrebujejo za-ledne strežnike. Te jim na zahtevo vrnejo informacije, ki so relevantne za prikaz na uporabniškem vmesniku ali za nadaljnjo obdelavo. Zadolženi so tudi za posodabljanje, dodajanje in brisanje entitet v zaledni bazi, s katero

so povezani. Primeri zalednih jezikov so C#, Java, Node.js, PHP, Python in Go. Vse pogosteje jih uporabljamo v obliki mikrostoritev, kjer je vsaka zadolžena za določeno nalogo [108].

Programski jezik Java poganja zaledno infrastrukturo mnogih svetovno znanih podjetij. V manjši ali večji meri jo med drugim uporabljajo pri Goo-glu, Netflixu, Amazonu in Facebooku. Glavne značilnosti Jave so:

1. Enostavnost. Programski jezik Java je bil predstavljen leta 1996 [109].

Zaradi manj dvoumne sintaksne terminologije, ki izhaja iz C++, velja za enega najpreprostejših jezikov za učenje. Vsakdo, ki pozna osnovne koncepte programiranja, se lahko hitro nauči Jave.

2. Delovanje na različnih napravah (angl. cross-platform). Java se izvaja na javanskem navideznem stroju (angl. Java virtual machine, JVM).

Ta omogoča izvajanje vseh programov, ki se prevedejo v javansko zložno kodo (angl. Java bytecode). JVM je narejen po natančni specifikaciji, ki narekuje, kaj mora vsebovati njegova implementacija. Specifikacija zagotavlja interoperabilnost javanskih programov na različnih platfor-mah. Za razliko od nižjenivojskih jezikov, kot je denimo C, se razvijalci ne rabijo zavedati lastnosti in omejitev strojne opreme, kjer se javanski program izvaja [110].

3. Več-nitno izvajanje (angl. multi-threading). Java je bila že od samega začetka zasnovana z mislijo na večnitno delovanje [111]. V primeru spletnega strežnika to omogoča, da izvajamo več nalog sočasno. Ta lastnost naredi Javo odlično za procesorsko zahtevna opravila.

4. Varnost. Java ponuja veliko število knjižnic, orodij in implementacij pogostih varnostnih algoritmov, mehanizmov in protokolov. Knjižnice ponujajo kriptografske operacije, infrastrukturo za javne ključe, varno komunikacijo, avtentikacijo in avtorizacijo [112, 113].

5. Veliko število knjižnic. Na voljo so knjižnice za razčlenjevanje JSON-a in XML-ja, testiranje enot, generiranje datotek, kriptografijo in delo