Stručný sprievodca pre Apache Geode

1. Prehľad

Apache Geode je distribuovaná mriežka dát v pamäti podporujúca ukladanie do vyrovnávacej pamäte a výpočet dát.

V tomto tutoriáli sa budeme zaoberať kľúčovými konceptmi Geode a prebehneme niekoľko ukážok kódu pomocou jeho klienta Java.

2. Inštalácia

Najskôr si musíme stiahnuť a nainštalovať Apache Geode a nastaviť gfsh prostredie. Aby sme to dosiahli, môžeme postupovať podľa pokynov v oficiálnom sprievodcovi Geode.

A po druhé, tento výukový program vytvorí niektoré artefakty súborového systému. Môžeme ich teda izolovať vytvorením dočasného adresára a spustením vecí odtiaľ.

2.1. Inštalácia a konfigurácia

Z nášho dočasného adresára musíme spustiť a Lokátor inštancia:

gfsh> spustiť lokátor --name = lokátor --bind-address = localhost

Lokátory sú zodpovední za koordináciu medzi rôznymi členmi Geode Klaster, ktoré môžeme ďalej spravovať cez JMX.

Ďalej začnime a Server napríklad hostiť jedno alebo viac údajov Regións:

gfsh> štart server --name = server1 --server-port = 0

Nastavili sme -Port servera možnosť 0, aby Geode vybral akýkoľvek dostupný port. Aj keď to vynecháme, server použije predvolený port 40404. Server je konfigurovateľný člen servera Klaster ktorý beží ako proces s dlhou životnosťou a je zodpovedný za správu údajov Regióny.

A nakoniec potrebujeme Región:

gfsh> vytvoriť región --name = baeldung --type = REPLICATE

The Región nakoniec budeme ukladať naše údaje.

2.2. Overenie

Skôr ako ideme ďalej, uistite sa, že máme všetko funkčné.

Najprv skontrolujme, či máme svoje Server a náš Lokátor:

gfsh> zoznam členov Meno | Id ------- | -------------------------------------------------- -------- server1 | 192.168.0.105 (server1: 6119): 1024 lokátor | 127.0.0.1 (lokátor: 5996: lokátor): 1024 [koordinátor]

A potom, že máme svoje Región:

gfsh> popíšte región --name = baeldung ......................................... ................. Názov: baeldung Pravidlá pre údaje: replikovať Hostiacich členov: server1 Predvolené atribúty zdieľané hosťujúcimi Členmi Typ | Meno | Hodnota ------ | ----------- | --------------- Región | politika v oblasti údajov | REPLIKÁCIA | veľkosť | 0 | rozsah | distribuovane-ack

Mali by sme mať aj nejaké adresáre v súborovom systéme v našom dočasnom adresári s názvom „locator“ a „server1“.

S týmto výstupom vieme, že sme pripravení ísť ďalej.

3. Maven závislosť

Teraz, keď máme spustený Geode, začnime sa pozerať na kód klienta.

Aby sme mohli pracovať s Geode v našom Java kóde, budeme musieť do nášho klienta pridať klientsku knižnicu Apache Geode Java pom:

 org.apache.geode geode-core 1.6.0 

Začnime jednoduchým uložením a načítaním niektorých údajov v niekoľkých regiónoch.

4. Jednoduché ukladanie a načítanie

Ukážme si, ako ukladať jednotlivé hodnoty, dávky hodnôt aj vlastné objekty.

Ak chcete začať ukladať údaje v našej oblasti „baeldung“, pripojte sa k nim pomocou vyhľadávača:

@Before public void connect () {this.cache = nový ClientCacheFactory () .addPoolLocator ("localhost", 10334) .create (); this.region = vyrovnávacia pamäť. createClientRegionFactory (ClientRegionShortcut.CACHING_PROXY) .create ("baeldung"); }

4.1. Ukladanie jednotlivých hodnôt

Teraz môžeme jednoducho ukladať a načítať údaje v našom regióne:

@Test public void whenSendMessageToRegion_thenMessageSavedSuccessfully () {this.region.put ("A", "Hello"); this.region.put ("B", "Baeldung"); assertEquals ("Dobrý deň", region.get ("A")); assertEquals ("Baeldung", region.get ("B")); }

4.2. Uloženie viacerých hodnôt naraz

Môžeme tiež uložiť viac hodnôt naraz, napríklad pri pokuse o zníženie latencie siete:

@Test public void whenPutMultipleValuesAtOnce_thenValuesSavedSuccessfully () {dodávateľ keys = () -> Stream.of ("A", "B", "C", "D", "E"); Hodnoty mapy = keys.get () .collect (Collectors.toMap (Function.identity (), String :: toLowerCase)); this.region.putAll (hodnoty); keys.get () .forEach (k -> assertEquals (k.toLowerCase (), this.region.get (k))); }

4.3. Ukladanie vlastných objektov

Reťazce sú užitočné, ale skôr ako neskôr budeme musieť ukladať vlastné objekty.

Predstavme si, že máme záznam zákazníka, ktorý chceme uložiť, pomocou nasledujúceho typu kľúča:

verejná trieda CustomerKey implementuje Serializable {private long id; súkromná reťazcová krajina; // hľadači a nastavovatelia // rovná sa a hashcode}

A nasledujúci typ hodnoty:

public class Zákazník implementuje Serializable {private CustomerKey key; private String meno; private String priezvisko; vek súkromných celých čísel; // zakladatelia a zakladatelia}

Existuje niekoľko ďalších krokov, vďaka ktorým je možné tieto uložiť:

Najprv, mali by realizovať Serializovateľné. Aj keď to nie je prísna požiadavka, ich výroba Serializovateľné, Geode ich môže uložiť robustnejšie.

Po druhé, musia byť na triednej ceste našej aplikácie, ako aj na triednej ceste našej Geode Server.

Aby sme ich dostali do triedy servera, zabalme ich, povedzme pomocou mvn čistý balíček.

Potom môžeme výslednú nádobu odkazovať na novú spustiť server príkaz:

gfsh> stop server --name = server1 gfsh> start server --name = server1 --classpath = .. / lib / apache-geode-1.0-SNAPSHOT.jar --server-port = 0

Opäť musíme tieto príkazy spustiť z dočasného adresára.

Nakoniec vytvoríme nový Región s názvom „zákazníci baeldung“ na internete Server rovnakým príkazom, aký sme použili na vytvorenie oblasti „baeldung“:

gfsh> vytvoriť región --name = baeldung-customers --type = REPLICATE

V kóde oslovíme lokátor ako predtým a zadáme vlastný typ:

@Before public void connect () {// ... pripojte sa cez lokátor this.customerRegion = this.cache. createClientRegionFactory (ClientRegionShortcut.CACHING_PROXY) .create ("baeldung-customers"); }

A potom môžeme nášho zákazníka uložiť ako predtým:

@Test public void whenPutCustomKey_thenValuesSavedSuccessfully () {CustomerKey key = new CustomerKey (123); Zákazník zákazník = nový zákazník (kľúč, „William“, „Russell“, 35); this.customerRegion.put (kľúč, zákazník); Zákazník storedCustomer = this.customerRegion.get (kľúč); assertEquals ("William", storedCustomer.getFirstName ()); assertEquals ("Russell", storedCustomer.getLastName ()); }

5. Typy regiónov

Pre väčšinu prostredí budeme mať viac ako jednu kópiu alebo viac ako jeden oddiel našej oblasti v závislosti na našich požiadavkách na priepustnosť čítania a zápisu.

Doteraz sme používali oblasti replikované v pamäti. Pozrime sa bližšie.

5.1. Replikovaný región

Ako už názov napovedá, a Replikovaný región uchováva kópie svojich údajov na viacerých Server. Poďme to otestovať.

Z gfsh konzolu v pracovnom adresári, pridajme ešte jednu Server menovaný server2 do klastra:

gfsh> štart server --name = server2 --classpath = .. / lib / apache-geode-1.0-SNAPSHOT.jar --server-port = 0

Pamätajte, že keď sme robili „baeldung“, používali sme –Typ = REPLIKÁCIA. Kvôli tomu, Geode bude automaticky replikovať naše údaje na nový server.

Overme to zastavením server1:

gfsh> stop server --name = server1

A potom vykonajme rýchly dopyt po oblasti „baeldung“.

Ak boli dáta úspešne replikované, dostaneme výsledky späť:

gfsh> query --query = 'vyberte e.key z /baeldung.entries e' Výsledok: true Limit: 100 Riadky: 5 Výsledok ------ C B A E D

Zdá sa teda, že replikácia prebehla úspešne!

Pridanie repliky do našej oblasti zlepšuje dostupnosť údajov. A pretože na dotazy môže odpovedať viac ako jeden server, dosiahneme tiež vyššiu priepustnosť čítania.

Ale, čo keď sa obaja zrazia? Pretože sa jedná o oblasti v pamäti, dáta sa stratia.Namiesto toho môžeme použiť –Typ = REPLICATE_PERSISTENT ktorá pri replikácii tiež ukladá údaje na disk.

5.2. Rozdelený región

Vďaka väčším súborom údajov môžeme systém lepšie škálovať nakonfigurovaním Geode tak, aby sa oblasť rozdelila na samostatné oddiely alebo segmenty.

Vytvorme jeden oddiel Región s názvom „baeldung-partitioned“:

gfsh> create region --name = baeldung-partitioned --type = PARTITION

Pridajte nejaké údaje:

gfsh> put --region = baeldung-partitioned --key = "1" --value = "one" gfsh> put --region = baeldung-partitioned --key = "2" --value = "two" gfsh> put --region = baeldung-partitioned --key = "3" --value = "tri"

A rýchlo overte:

gfsh> query --query = 'vyberte e.key, e.value z /baeldung-partitioned.entries e' Výsledok: true Limit: 100 Riadky: 3 kľúč | hodnota --- | ----- 2 | dve 1 | jeden 3 | tri

Potom, aby sme overili, že sa údaje rozdelili na časti, zastavme server1 znova a znova zadajte dopyt:

gfsh> stop server --name = server1 gfsh> query --query = 'vyberte e.key, e.value z /baeldung-partitioned.entries e' Výsledok: true Limit: 100 Riadky: 1 kľúč | hodnota --- | ----- 2 | dva

Tentokrát sme dostali späť iba niektoré dátové položky, pretože tento server má iba jeden oddiel dát, takže kedy server1 klesol, jeho údaje sa stratili.

Ale čo keď potrebujeme rozdelenie aj redundanciu? Geode podporuje aj množstvo ďalších typov. Nasledujúce tri sú užitočné:

  • PARTITION_REDUNDANT priečky a replikuje naše údaje medzi rôznymi členmi klastra
  • PARTITION_PERSISTENT rozdelí dáta ako PRIEČOK, ale na disk a
  • PARTITION_REDUNDANT_PERSISTENT nám všetkým dáva tri spôsoby správania.

6. Objektový dotazovací jazyk

Geode tiež podporuje Object Query Language alebo OQL, ktoré môžu byť výkonnejšie ako jednoduché vyhľadávanie kľúčov. Je to niečo podobné ako s SQL.

Pre tento príklad použijeme oblasť „baeldung-customer“, ktorú sme vytvorili skôr.

Ak k tomu pridáme ďalších pár zákazníkov:

Údaje mapy = nový HashMap (); data.put (new CustomerKey (1), new Customer ("Gheorge", "Manuc", 36)); data.put (nový CustomerKey (2), nový zákazník ("Allan", "McDowell", 43)); this.customerRegion.putAll (údaje);

Potom môžeme použiť QueryService nájsť zákazníkov, ktorých meno je „Allan“:

QueryService queryService = this.cache.getQueryService (); Reťazec query = "select * from / baeldung-customers c where c.firstName = 'Allan'"; SelectResults results = (SelectResults) queryService.newQuery (query) .execute (); assertEquals (1, results.size ());

7. Funkcia

Jedným z najsilnejších pojmov dátových mriežok v pamäti je myšlienka „preniesť výpočty do dát“.

Jednoducho povedané, pretože Geode je čistá Java, je pre nás ľahké nielen odosielať údaje, ale aj logicky s nimi pracovať.

To by nám mohlo pripomínať myšlienku rozšírení SQL, ako sú PL-SQL alebo Transact-SQL.

7.1. Definovanie funkcie

Ak chcete definovať jednotku práce pre Geode,implementujeme Geode Funkcia rozhranie.

Predstavme si napríklad, že musíme zmeniť všetky mená zákazníkov na veľké písmená.

Namiesto toho, aby sme sa pýtali na údaje a nechali našu aplikáciu vykonať svoju prácu, môžeme iba implementovať Funkcia:

verejná trieda UpperCaseNames implementuje funkciu {@Override public void execute (FunctionContext kontext) {RegionFunctionContext regionContext = (RegionFunctionContext) kontext; Región region = regionContext.getDataSet (); pre (položka Map.Entry: region.entrySet ()) {Zákazník zákazníka = entry.getValue (); customer.setFirstName (customer.getFirstName (). toUpperCase ()); } context.getResultSender (). lastResult (true); } @Override public String getId () {return getClass (). GetName (); }}

Poznač si to getId musí vrátiť jedinečnú hodnotu, takže názov triedy je zvyčajne dobrý výber.

The FunctionContext obsahuje všetky naše regionálne údaje, a preto z neho môžeme urobiť zložitejší dotaz alebo ho, ako sme to tu urobili, zmutovať.

A Funkcia má oveľa viac energie ako tento, takže si pozrite oficiálnu príručku, najmä getResultSender metóda.

7.2. Funkcia nasadenia

Musíme Geode dať pozor na našu funkciu, aby sme ju mohli spustiť. Rovnako ako sme to urobili s našimi vlastnými dátovými typmi, aj tento balíček zabalíme.

Tentokrát však môžeme použiť iba nasadiť príkaz:

gfsh> nasadiť --jar =. / lib / apache-geode-1.0-SNAPSHOT.jar

7.3. Vykonávacia funkcia

Teraz môžeme vykonať Funkcia z aplikácie pomocou Funkčná služba:

@Test public void whenExecuteUppercaseNames_thenCustomerNamesAreUppercased () {Execution execution = FunctionService.onRegion (this.customerRegion); execution.execute (UpperCaseNames.class.getName ()); Zákazník zákazník = this.customerRegion.get (nový CustomerKey (1)); assertEquals ("GHEORGE", customer.getFirstName ()); }

8. Záver

V tomto článku sme sa dozvedeli základné pojmy Apache Geode ekosystém. Pozreli sme sa na jednoduché príklady so štandardnými a vlastnými typmi, replikovanými a rozdelenými oblasťami a podporou oql a funkcií.

A ako vždy, všetky tieto vzorky sú k dispozícii na GitHub.


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