En guide til GemFire ​​med vårdata

1. Oversikt

GemFire ​​er en distribuert infrastruktur for distribuert datastyring med høy ytelse som ligger mellom applikasjonsklyngen og back-end datakilder.

Med GemFire ​​kan data administreres i minnet, noe som gjør tilgangen raskere. Spring Data gir en enkel konfigurasjon og tilgang til GemFire ​​fra Spring-applikasjonen.

I denne artikkelen tar vi en titt på hvordan vi kan bruke GemFire ​​for å oppfylle applikasjonens caching-krav.

2. Maven-avhengigheter

For å gjøre bruk av Spring Data GemFire-støtten, må vi først legge til følgende avhengighet i vår pom.xml:

 org.springframework.data spring-data-gemfire 1.9.1.RELEASE 

Den siste versjonen av denne avhengigheten finner du her.

3. GemFire ​​grunnleggende funksjoner

3.1. Cache

Cachen i GemFire ​​tilbyr viktige datahåndteringstjenester, samt administrerer tilkoblingen til andre jevnaldrende.

Cache-konfigurasjonen (cache.xml) beskriver hvordan dataene vil bli distribuert mellom forskjellige noder:

     ...     ... 

3.2. Regioner

Dataregioner er en logisk gruppering i en cache for et enkelt datasett.

For å si det enkelt, en region lar oss lagre data i flere virtuelle maskiner i systemet uten hensyn til hvilken node dataene lagres i klyngen.

Regioner er klassifisert i tre brede kategorier:

  • Replikert region har hele datasettet på hver node. Det gir høy leseytelse. Skrivoperasjoner er tregere ettersom dataoppdateringen må overføres til hver node:
  • Partisjonert region distribuerer dataene slik at hver node bare lagrer en del av regioninnholdet. En kopi av dataene er lagret på en av de andre nodene. Det gir god skriveytelse.
  • Lokal region bor på den definerende medlemsnoden. Det er ingen tilkobling med andre noder i klyngen.

3.3. Spørre hurtigbufferen

GemFire ​​tilbyr et spørrespråk kalt OQL (Object Query Language) som lar oss referere til objektene som er lagret i GemFire-dataregionene. Dette ligner veldig på SQL i syntaksen. La oss se hvordan et veldig grunnleggende spørsmål ser ut:

VELG DISTINCT * FRA eksempel Region

GemFire's QueryService gir metoder for å opprette søkeobjektet.

3.4. Dataserialisering

For å administrere dataserialisering-deserialisering, gir GemFire ​​andre alternativer enn Java-serialisering som gir høyere ytelse, gir større fleksibilitet for datalagring og dataoverføring, også støtte for forskjellige språk.

Med det i tankene har GemFire ​​definert Portable Data eXchange (PDX) dataformat. PDX er et flerspråklig dataformat som gir raskere serialisering og deserialisering, ved å lagre dataene i det nevnte feltet som du kan få tilgang til direkte uten å måtte deserialisere objektet helt.

3.5. Funksjonsutførelse

I GemFire ​​kan en funksjon ligge på en server og kan påkalles fra et klientprogram eller en annen server uten å måtte sende selve funksjonskoden.

Den som ringer kan lede en dataavhengig funksjon til å operere på et bestemt datasett eller kan lede en uavhengig datafunksjon til å arbeide på en bestemt server, medlem eller medlemsgruppe.

3.6. Kontinuerlig spørring

Med kontinuerlig spørring abonnerer klientene på serverhendelser ved hjelp av SQL-type spørringsfiltrering. Serveren sender alle hendelsene som endrer søkeresultatene. Den kontinuerlige spørringshendelsen leverer rammeverket for klient / serverabonnement.

Syntaksen for en kontinuerlig forespørsel ligner på grunnleggende spørsmål skrevet i OQL. For eksempel et spørsmål som gir de nyeste lagerdataene fra Lager region kan skrives som:

VELG * fra StockRegion s der s.stockStatus = 'aktiv';

For å få statusoppdateringen fra dette spørsmålet, en implementering av CQListener må festes med Lagerregion:

   ...  ...  ...   

4. Vårdata GemFire-støtte

4.1. Java-konfigurasjon

For å forenkle konfigurasjonen, gir Spring Data GemFire ​​forskjellige merknader for konfigurering av kjernekomponenter fra GemFire:

@Configuration offentlig klasse GemfireConfiguration {@Bean Properties gemfireProperties () {Properties gemfireProperties = new Properties (); gemfireProperties.setProperty ("navn", "SpringDataGemFireApplication"); gemfireProperties.setProperty ("mcast-port", "0"); gemfireProperties.setProperty ("log-level", "config"); returnere gemfireProperties; } @Bean CacheFactoryBean gemfireCache () {CacheFactoryBean gemfireCache = ny CacheFactoryBean (); gemfireCache.setClose (true); gemfireCache.setProperties (gemfireProperties ()); returner gemfireCache; } @Bean (navn = "ansatt") LocalRegionFactoryBean getEmployee (endelig GemFireCache-cache) {LocalRegionFactoryBean medarbeiderregion = ny LocalRegionFactoryBean (); employeeRegion.setCache (cache); ansatteRegion.setName ("ansatt"); // ... retur ansattRegion; }}

For å sette opp GemFire-hurtigbufferen og regionen, må vi først sette opp noen spesifikke egenskaper. Her mcast-port er satt til null, noe som indikerer at denne GemFire-noden er deaktivert for multicast-oppdagelse og distribusjon. Disse egenskapene overføres deretter til CacheFactoryBean å lage en GemFireCache forekomst.

Ved hjelp av GemFireCache bønne, en forekomst av LocalRegionFatcoryBean blir opprettet som representerer regionen i hurtigbufferen for Ansatt tilfeller.

4.2. Enhetskartlegging

Biblioteket gir støtte til å kartlegge objekter som skal lagres i GemFire-rutenettet. Kartleggingsmetadataene defineres ved å bruke merknader i domeneklassene:

@Region ("ansatt") offentlig klasse Ansatt {@Id offentlig Strengnavn; offentlig dobbeltlønn; @PersistenceConstructor offentlig ansatt (strengnavn, dobbeltlønn) {this.name = navn; denne. lønn = lønn; } // standard getters / setters}

I eksemplet ovenfor brukte vi følgende merknader:

  • @Region, for å spesifisere regionforekomsten av Ansatt klasse
  • @Id, å kommentere eiendommen som skal brukes som hurtigbuffernøkkel
  • @PersistenceConstructor, som hjelper til med å markere den ene konstruktøren som skal brukes til å opprette enheter, hvis flere konstruktører er tilgjengelige

4.3. GemFire ​​Repositories

Deretter, la oss ta en titt på en sentral komponent i Spring Data - depotet:

@Configuration @EnableGemfireRepositories (basePackages = "com.baeldung.spring.data.gemfire.repository") offentlig klasse GemfireConfiguration {@Autowired EmployeeRepository employeeRepository; // ...}

4.4. Oql Query Support

Repositoriene tillater definering av spørringsmetoder for effektivt å kjøre OQL-spørringene mot regionen den administrerte enheten er kartlagt til:

@Repository offentlig grensesnitt EmployeeRepository utvider CrudRepository {Employee findByName (strengnavn); Iterable findBySalaryGreaterThan (dobbel lønn); Iterable findBySalaryLessThan (dobbel lønn); Iterable findBySalaryGreaterThanAndSalaryLessThan (dobbel lønn1, dobbel lønn2); }

4.5. Funksjon Utførelsesstøtte

Vi har også tilgjengelig kommentarstøtte - for å forenkle arbeidet med kjøring av GemFire-funksjoner.

Det er to bekymringer å ta opp når vi bruker funksjoner, implementering og utførelse.

La oss se hvordan en POJO kan eksponeres som en GemFire-funksjon ved hjelp av Spring Data-merknader:

@Komponent offentlig klasse FunctionImpl {@GemfireFunction offentlig tom hilsen (strengmelding) {// litt logikk} // ...}

Vi må aktivere kommentarbehandlingen eksplisitt for @GemfireFunction å jobbe:

@Configuration @EnableGemfireFunctions offentlig klasse GemfireConfiguration {// ...}

For funksjonskjøring, må en prosess som påkaller en ekstern funksjon gi anropsargumenter, en funksjon id, utførelsesmålet (onServer, onRegion, onMember, etc.):

@OnRegion (region = "ansatt") offentlig grensesnitt FunctionExecution {@FunctionId ("hilsen") offentlig tomrom utføre (strengmelding); // ...}

For å aktivere prosessering av funksjonskjøring av merknader, må vi legge til for å aktivere den ved hjelp av Spring's komponentskanningsfunksjoner:

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

5. Konklusjon

I denne artikkelen har vi utforsket GemFire ​​viktige funksjoner og undersøkt hvordan Spring Data ga APIer som gjør det enkelt å jobbe med det.

Den komplette koden for denne artikkelen er tilgjengelig på GitHub.


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