Vodič za GemFire ​​s proljetnim podacima

1. Pregled

GemFire ​​je distribuirana infrastruktura za upravljanje podacima visokih performansi koja se nalazi između klastera aplikacija i pozadinskih izvora podataka.

Pomoću GemFire-a podacima se može upravljati u memoriji, što ubrzava pristup. Spring Data pruža jednostavnu konfiguraciju i pristup GemFire-u iz Spring aplikacije.

U ovom ćemo članku pogledati kako možemo koristiti GemFire ​​kako bismo zadovoljili zahtjeve predmemoriranja naše aplikacije.

2. Ovisnosti Mavena

Da bismo iskoristili podršku za Spring Data GemFire, prvo moramo dodati sljedeću ovisnost u našu pom.xml:

 org.springframework.data spring-data-gemfire 1.9.1.OBLAŽENJE 

Najnoviju verziju ove ovisnosti možete pronaći ovdje.

3. Osnovne značajke GemFire-a

3.1. Predmemorija

Predmemorija u GemFire ​​pruža osnovne usluge upravljanja podacima, kao i upravljanje povezivanjem s drugim vršnjacima.

Konfiguracija predmemorije (cache.xml) opisuje kako će se podaci distribuirati između različitih čvorova:

     ...     ... 

3.2. Regije

Područja podataka logično su grupiranje unutar predmemorije za jedan skup podataka.

Jednostavno rečeno, regija nam omogućuje pohranu podataka u više VM-ova u sustavu bez razmatranja na kojem se čvoru podaci pohranjuju unutar klastera.

Regije su klasificirane u tri široke kategorije:

  • Replicirana regija sadrži kompletni skup podataka o svakom čvoru. Daje visoku izvedbu čitanja. Operacije zapisivanja sporije su jer se ažuriranje podataka mora širiti na svaki čvor:
  • Podijeljena regija distribuira podatke tako da svaki čvor pohranjuje samo dio sadržaja regije. Kopija podataka pohranjena je na jednom od ostalih čvorova. Pruža dobru izvedbu pisanja.
  • Lokalna regija nalazi se na čvoru definirajućeg člana. Ne postoji povezanost s drugim čvorovima unutar klastera.

3.3. Upitajte u predmemoriju

GemFire ​​nudi jezik upita nazvan OQL (Object Query Language) koji nam omogućuje upućivanje na objekte pohranjene u podatkovnim regijama GemFire. Ovo je vrlo slično SQL-u u sintaksi. Pogledajmo kako izgleda vrlo osnovni upit:

ODABERITE DISTINCT * IZ exampleRegion

GemFire-ove QueryService pruža metode za stvaranje objekta upita.

3.4. Serijalizacija podataka

Za upravljanje serializacijom-deserializacijom podataka, GemFire ​​nudi opcije koje nisu Java serializacija, što daje veće performanse, pruža veću fleksibilnost za pohranu podataka i prijenos podataka, također podršku za različite jezike.

Imajući to na umu, GemFire ​​je definirao format podataka Portable Data eXchange (PDX). PDX je višejezični format podataka koji omogućuje bržu serializaciju i deserializaciju, spremanjem podataka u imenovano polje kojem se može pristupiti izravno, bez potrebe potpune deserializacije objekta.

3.5. Izvršenje funkcije

U GemFire-u funkcija može boraviti na poslužitelju i može se pozvati iz klijentske aplikacije ili drugog poslužitelja bez potrebe za slanjem samog koda funkcije.

Pozivatelj može usmjeriti funkciju ovisnu o podacima na rad na određenom skupu podataka ili može voditi neovisnu podatkovnu funkciju da radi na određenom poslužitelju, članu ili grupi članova.

3.6. Kontinuirano postavljanje upita

Uz kontinuirano postavljanje upita, klijenti se pretplaćuju na događaje na poslužitelju pomoću filtriranja upita tipa SQL. Poslužitelj šalje sve događaje koji mijenjaju rezultate upita. Kontinuirana isporuka upita za upit koristi okvir pretplate klijent / poslužitelj.

Sintaksa kontinuiranog upita slična je osnovnim upitima napisanim u OQL-u. Na primjer, upit koji pruža najnovije podatke o zalihama iz Zaliha regija može se zapisati kao:

ODABERITE * iz StockRegion s gdje je s.stockStatus = 'aktivan';

Da biste dobili ažuriranje statusa iz ovog upita, implementacija CQListener trebate priložiti StockRegion:

   ...  ...  ...   

4. Proljetna podrška za GemFire

4.1. Java konfiguracija

Da bi se pojednostavila konfiguracija, Spring Data GemFire ​​nudi razne napomene za konfiguriranje osnovnih komponenata GemFire:

@Configuration javna klasa GemfireConfiguration {@Bean Properties gemfireProperties () {Properties gemfireProperties = new Properties (); gemfireProperties.setProperty ("ime", "SpringDataGemFireApplication"); gemfireProperties.setProperty ("mcast-port", "0"); gemfireProperties.setProperty ("razina dnevnika", "config"); vratiti gemfireProperties; } @Bean CacheFactoryBean gemfireCache () {CacheFactoryBean gemfireCache = novi CacheFactoryBean (); gemfireCache.setClose (true); gemfireCache.setProperties (gemfireProperties ()); vratiti gemfireCache; } @Bean (name = "zaposlenik") LocalRegionFactoryBean getEfficiee (konačna predmemorija GemFireCache) {LocalRegionFactoryBean workerRegion = nova LocalRegionFactoryBean (); workerRegion.setCache (predmemorija); workerRegion.setName ("zaposlenik"); // ... povratak workerRegion; }}

Da bismo postavili GemFire ​​predmemoriju i regiju, prvo moramo postaviti nekoliko specifičnih svojstava. Ovdje mcast-port je postavljeno na nulu, što znači da je ovaj GemFire ​​čvor onemogućen za otkrivanje i distribuciju višestrukog slanja. Ta se svojstva zatim prosljeđuju CacheFactoryBean stvoriti a GemFireCache primjer.

Koristeći GemFireCache grah, primjerak LocalRegionFatcoryBean stvoren je koji predstavlja regiju unutar predmemorije za Zaposlenik instance.

4.2. Mapiranje entiteta

Biblioteka pruža podršku za mapiranje objekata koji će se pohraniti u GemFire ​​mrežu. Metapodaci mapiranja definiraju se korištenjem napomena na klasama domene:

@Region ("zaposlenik") javni razred Zaposlenik {@Id public String name; javna dvostruka plaća; @PersistenceConstructor javni zaposlenik (Ime niza, dvostruka plaća) {this.name = name; ovo.plata = plaća; } // standardni getteri / postavljači}

U gornjem primjeru koristili smo sljedeće bilješke:

  • @Regija, kako bi se odredila regija regije Zaposlenik razred
  • @Iskaznica, za bilježenje svojstva koje će se koristiti kao ključ predmemorije
  • @PersistenceConstructor, što pomaže označiti jedan konstruktor koji će se koristiti za stvaranje entiteta, u slučaju da je na raspolaganju više konstruktora

4.3. GemFire ​​spremišta

Dalje, pogledajmo središnju komponentu Spring Data - spremište:

@Configuration @EnableGemfireRepositories (basePackages = "com.baeldung.spring.data.gemfire.repository") javna klasa GemfireConfiguration {@Autowired EmployeeRepository workerRepository; // ...}

4.4. Oql podrška za upite

Spremišta omogućuju definiciju metoda upita za učinkovito pokretanje OQL upita prema regiji u koju se preslikava upravljani entitet:

Javno sučelje @Repository EmployeeRepository proširuje CrudRepository {Employee findByName (naziv niza); Iterable findBySalaryGreaterThan (dvostruka plaća); Iterable findBySalaryLessThan (dvostruka plaća); Iterable findBySalaryGreaterThanAndSalaryLessThan (dvostruka plaća1, dvostruka plaća2); }

4.5. Podrška za izvršavanje funkcija

Dostupna nam je i podrška za bilješke - kako bismo pojednostavili rad s izvršavanjem funkcije GemFire.

Dvije su zabrinutosti koje treba riješiti kada koristimo funkcije, provedbu i izvršenje.

Pogledajmo kako POJO može biti izložen kao funkcija GemFire ​​pomoću bilješki Spring Data:

@Component javna klasa FunctionImpl {@GemfireFunction javni void pozdrav (String poruka) {// neka logika} // ...}

Moramo eksplicitno aktivirati obradu napomena za @GemfireFunction raditi:

@Configuration @EnableGemfireFunctions javna klasa GemfireConfiguration {// ...}

Za izvršavanje funkcije, postupak koji poziva udaljenu funkciju mora pružiti pozivne argumente, funkciju iskaznica, cilj izvršenja (onServer, onRegion, onMemberitd.):

@OnRegion (region = "zaposlenik") javno sučelje FunctionExecution {@FunctionId ("pozdrav") javno void izvršenje (String poruka); // ...}

Da bismo omogućili obradu napomena o izvršavanju funkcije, moramo dodati da bismo je aktivirali pomoću mogućnosti skeniranja komponenata Spring:

@Configuration @EnableGemfireFunctionExecutions (basePackages = "com.baeldung.spring.data.gemfire.function") javna klasa GemfireConfiguration {// ...}

5. Zaključak

U ovom smo članku istražili osnovne značajke GemFire-a i ispitali kako API-ji koji pružaju Spring Spring olakšavaju rad s njima.

Kompletni kôd za ovaj članak dostupan je na GitHubu.