Sprievodca Apache Ignite

1. Úvod

Apache Ignite je distribuovaná platforma zameraná na pamäť s otvoreným zdrojom. Môžeme ho použiť ako databázu, kešovací systém alebo na spracovanie údajov v pamäti.

Platforma využíva pamäť ako úložnú vrstvu, a preto má pôsobivú mieru výkonu. Jednoducho povedané, toto je jedna z najrýchlejších platforiem na spracovanie atómových dát, ktorá sa v súčasnosti používa pri výrobe.

2. Inštalácia a nastavenie

Na začiatku si pozrite úvodnú stránku s úvodnými pokynmi na nastavenie a inštaláciu.

Závislosti Maven pre aplikáciu, ktorú vytvoríme:

 org.apache.ignite ignite-core $ {ignite.version} org.apache.ignite ignite-indexing $ {ignite.version} 

zapáliť-jadro je jedinou povinnou závislosťou od projektu. Pretože chceme tiež komunikovať s SQL, indexovanie vznietenia je tu tiež. $ {ignite.version} je najnovšia verzia Apache Ignite.

Ako posledný krok spustíme uzol Ignite:

Ignite node started OK (id = 53c77dea) Snímka topológie [ver = 1, servery = 1, klienti = 0, CPU = 4, offheap = 1,2 GB, halda = 1,0 GB] Konfigurované dátové oblasti: ^ - predvolené [initSize = 256.0 MiB, maxSize = 1,2 GiB, persistenceEnabled = false]

Vyššie uvedený výstup z konzoly ukazuje, že sme pripravení vyraziť.

3. Pamäťová architektúra

Platforma je založená na architektúre odolnej pamäte. To umožňuje ukladať a spracovávať údaje na disku aj v pamäti. Zvyšuje výkon efektívnym využívaním zdrojov RAM klastra.

Dáta v pamäti a na disku majú rovnaké binárne zastúpenie. To znamená, že pri prechode z jednej vrstvy do druhej nie je potrebná ďalšia konverzia údajov.

Architektúra odolnej pamäte sa rozdelí na bloky pevnej veľkosti, ktoré sa nazývajú stránky. Stránky sú uložené mimo haldy Java a sú usporiadané v pamäti RAM. Má jedinečný identifikátor: FullPageId.

Stránky interagujú s pamäťou pomocou PageMemory abstrakcia.

Pomáha čítať, písať stránku a tiež prideľovať ID stránky. Vo vnútri pamäte program Ignite spája stránky s Vyrovnávacia pamäť.

4. Pamäťové stránky

Stránka môže mať nasledujúce stavy:

  • Unloaded - v pamäti nie je načítaný žiadny medzipamäť stránky
  • Vymazať - vyrovnávacia pamäť stránky sa načíta a synchronizuje s údajmi na disku
  • Durty - medzipamäť stránky obsahuje údaje, ktoré sa líšia od údajov na disku
  • Špinavý kontrolný bod - existuje ďalšia úprava, ktorá sa spustí skôr, ako prvá z nich vydrží na disku. Tu začína kontrolný bod a PageMemory uchováva dve vyrovnávacie pamäte pre každú stránku.

Odolná pamäť alokuje lokálne pamäťový segment s názvom Dátová oblasť. Štandardne má kapacitu 20% pamäte klastra. Konfigurácia viacerých oblastí umožňuje uchovať použiteľné údaje v pamäti.

Maximálna kapacita regiónu je pamäťový segment. Je to fyzická pamäť alebo spojité bajtové pole.

Aby sa zabránilo fragmentácii pamäte, na jednej stránke sa nachádza viac záznamov kľúč - hodnota. Každý nový záznam bude pridaný na najoptimálnejšiu stránku. Ak veľkosť páru kľúč - hodnota presahuje maximálnu kapacitu stránky, program Ignite uloží údaje na viac ako jednej stránke. Rovnaká logika platí aj pre aktualizáciu údajov.

Indexy SQL a medzipamäte sú uložené v štruktúrach známych ako stromy B +. Klíče pamäte cache sú zoradené podľa ich hodnôt kľúča.

5. Životný cyklus

Každý uzol Ignite beží na jednej inštancii JVM. Je však možné nakonfigurovať tak, aby v jednom procese JVM bežalo viac uzlov Ignite.

Prejdime si typy udalostí životného cyklu:

  • BEFORE_NODE_START - pred spustením uzla Ignite
  • AFTER_NODE_START - vystrelí tesne po štarte uzla Ignite
  • BEFORE_NODE_STOP - pred spustením zastavenia uzla
  • AFTER_NODE_STOP - po zastavení uzla Ignite

Spustenie predvoleného uzla Ignite:

Ignite ignite = Ignition.start ();

Alebo z konfiguračného súboru:

Ignite ignite = Ignition.start ("config / example-cache.xml");

V prípade, že potrebujeme väčšiu kontrolu nad procesom inicializácie, existuje ďalší spôsob pomocou LifecycleBean rozhranie:

verejná trieda CustomLifecycleBean implementuje LifecycleBean {@Override public void onLifecycleEvent (LifecycleEventType lifecycleEventType) hodí IgniteException {if (lifecycleEventType == LifecycleEventType.AFTER_NODE_START) {...}

Tu môžeme použiť typy udalostí životného cyklu na vykonávanie akcií pred alebo po spustení / zastavení uzla.

Z tohto dôvodu odovzdáme inštanciu konfigurácie s CustomLifecycleBean k štartovacej metóde:

Konfigurácia IgniteConfiguration = nová IgniteConfiguration (); configuration.setLifecycleBeans (nový CustomLifecycleBean ()); Ignite ignite = Ignition.start (konfigurácia);

6. Mriežka dát v pamäti

Mriežka dát Ignite je distribuované úložisko kľúč - hodnota, veľmi dobre rozdelený HashMap. Je horizontálne zmenšený. To znamená, že pridávame viac uzlov klastra, viac údajov sa ukladá do medzipamäte alebo ukladá do pamäte.

Môže poskytnúť výrazné zlepšenie výkonu softvéru tretích strán, ako sú NoSql, databázy RDMS ako ďalšia vrstva pre ukladanie do pamäte cache.

6.1. Podpora ukladania do pamäte cache

Rozhranie API na prístup k údajom je založené na špecifikácii JCache JSR 107.

Ako príklad si vytvoríme medzipamäť pomocou konfigurácie šablón:

IgniteCache cache = ignite.getOrCreateCache ("baeldingCache");

Pozrime sa, čo sa tu deje, pre ďalšie podrobnosti. Najprv program Ignite vyhľadá oblasť pamäte, kde bola uložená vyrovnávacia pamäť.

Potom bude indexová stránka stromu B + umiestnená na základe kódu hash kľúča. Ak index existuje, bude nájdená údajová stránka príslušného kľúča.

Keď je index NULL, platforma vytvorí nový údajový záznam pomocou daného kľúča.

Ďalej pridáme nejaké Zamestnanec objekty:

cache.put (1, nový zamestnanec (1, "John", true)); cache.put (2, nový zamestnanec (2, "Anna", false)); cache.put (3, nový zamestnanec (3, "George", true));

Odolná pamäť opäť vyhľadá oblasť pamäte, kam patrí vyrovnávacia pamäť. Na základe kľúča medzipamäte bude indexová stránka umiestnená v stromovej štruktúre B +.

Ak indexová stránka neexistuje, vyžiada sa nová a pridá sa do stromu.

Ďalej sa k indexovej stránke priraďuje údajová stránka.

Na prečítanie zamestnanca z vyrovnávacej pamäte použijeme iba kľúčovú hodnotu:

Zamestnanec zamestnanec = cache.get (1);

6.2. Podpora streamovania

V pamäti poskytuje streamovanie dát alternatívny prístup pre aplikácie na spracovanie údajov založené na diskových a súborových systémoch. Streaming API rozdeľuje tok dát s vysokým zaťažením do viacerých etáp a smeruje ich na spracovanie.

Náš príklad môžeme upraviť a dáta zo súboru streamovať. Najskôr definujeme streamer údajov:

IgniteDataStreamer streamer = zapáliť .dataStreamer (cache.getName ());

Ďalej môžeme zaregistrovať prúdový transformátor na označenie prijatých zamestnancov ako zamestnancov:

streamer.receiver (StreamTransformer.from ((e, arg) -> {zamestnanec zamestnanec = e.getValue (); employee.setEmployed (true); e.setValue (zamestnanec); návrat zamestnanca;}));

Ako posledný krok iterujeme zamestnanci.txt riadky súborov a konvertovať ich na objekty Java:

Cesta cesty = Paths.get (IgniteStream.class.getResource ("Zamestnanci.txt") .toURI ()); Gson gson = nový Gson (); Files.lines (cesta). ForEach (l -> streamer.addData (employee.getId (), gson.fromJson (l, Employee.class)));

S použitím streamer.addData () vložiť objekty zamestnanca do streamu.

7. Podpora SQL

Platforma poskytuje databázu SQL zameranú na pamäť a odolnú voči chybám.

Môžeme sa spojiť buď s čistým SQL API, alebo s JDBC. Syntax jazyka SQL je tu ANSI-99, takže sú podporované všetky štandardné agregačné funkcie v dotazoch, operácie jazykov DML a DDL.

7.1. JDBC

Aby sme to dosiahli praktickejšie, vytvorme tabuľku zamestnancov a pridajme k nej nejaké údaje.

Z tohto dôvodu zaregistrujeme ovládač JDBC a otvoríme pripojenie ako ďalší krok:

Class.forName ("org.apache.ignite.IgniteJdbcThinDriver"); Pripojenie conn = DriverManager.getConnection ("jdbc: ignite: thin: //127.0.0.1/");

Pomocou štandardného príkazu DDL vypĺňame Zamestnanec tabuľka:

sql.executeUpdate ("CREATE TABLE Employee (" + "id LONG PRIMARY KEY, name VARCHAR, isEmployed tinyint (1))" + "WITH \" template = replicated \ "");

Po kľúčovom slove WITH môžeme nastaviť šablónu konfigurácie cache. Tu používame REPLIKOVANÉ. Predvolene je nastavený režim šablóny ROZDELENÝ. Môžeme tiež určiť počet kópií údajov ZÁLOHY parameter, ktorý je predvolene 0.

Potom poďme pridať nejaké údaje pomocou príkazu INSERT DML:

PreparedStatement sql = conn.prepareStatement ("INSERT INTO Employee (id, name, isEmployed) VALUES (?,?,?)"); sql.setLong (1, 1); sql.setString (2, "James"); sql.setBoolean (3, true); sql.executeUpdate (); // pridať zvyšok 

Potom vyberieme záznamy:

ResultSet rs = sql.executeQuery ("SELECT e.name, e.isEmployed" + "FROM Employee e" + "WHERE e.isEmployed = TRUE")

7.2. Dotaz na objekty

Je tiež možné vykonať dotaz na objekty Java uložené v pamäti cache. Ignite zaobchádza s objektom Java ako so samostatným záznamom SQL:

IgniteCache cache = ignite.cache ("baeldungCache"); SqlFieldsQuery sql = nový SqlFieldsQuery ("vyberte meno od zamestnanca, kde jeEmployed = 'true'"); QueryCursor cursor = cache.query (sql); pre (riadok zoznamu: kurzor) {// urobte niečo s riadkom}

8. Zhrnutie

V tomto tutoriáli sme sa rýchlo pozreli na projekt Apache Ignite. Táto príručka zdôrazňuje výhody platformy v porovnaní s inými simulačnými produktmi, ako sú zvýšenie výkonu, životnosť a ľahké API.

Ako výsledok, Naučili sme sa, ako používať jazyk SQL a rozhranie Java API na ukladanie, načítanie a streamovanie údajov vo vnútri perzistencie alebo mriežky v pamäti.

Úplný kód tohto článku je ako obvykle k dispozícii na serveri GitHub.


$config[zx-auto] not found$config[zx-overlay] not found