En guide til GemFire ​​med Spring Data

1. Oversigt

GemFire ​​er en distribueret datastyringsinfrastruktur med høj ydeevne, der sidder mellem applikationsklynge og back-end datakilder.

Med GemFire ​​kan data administreres i hukommelsen, hvilket gør adgangen hurtigere. Spring Data giver en nem konfiguration og adgang til GemFire ​​fra Spring-applikationen.

I denne artikel vil vi se på, hvordan vi kan bruge GemFire ​​til at opfylde vores applikations cachingkrav.

2. Maven-afhængigheder

For at gøre brug af Spring Data GemFire ​​support skal vi først tilføje følgende afhængighed i vores pom.xml:

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

Den seneste version af denne afhængighed kan findes her.

3. GemFire ​​grundlæggende funktioner

3.1. Cache

Cachen i GemFire ​​leverer de vigtige tjenester til datastyring samt styrer forbindelsen til andre jævnaldrende.

Cache-konfigurationen (cache.xml) beskriver, hvordan dataene fordeles mellem forskellige noder:

     ...     ... 

3.2. Regioner

Dataregioner er en logisk gruppering inden for en cache for et enkelt datasæt.

Kort fortalt, en region giver os mulighed for at gemme data i flere virtuelle computere i systemet uden hensyntagen til hvilken node dataene er gemt i klyngen.

Regioner er klassificeret i tre brede kategorier:

  • Replikeret region holder det komplette sæt data på hver node. Det giver en høj læseevne. Skrivoperationer er langsommere, da dataopdateringen skal spredes til hver node:
  • Partitioneret region distribuerer dataene, så hver node kun gemmer en del af regionens indhold. En kopi af dataene er gemt på en af ​​de andre knudepunkter. Det giver en god skriveydelse.
  • Lokal region bor på den definerende medlemsknude. Der er ingen forbindelse med andre noder i klyngen.

3.3. Forespørgsel om cachen

GemFire ​​giver et forespørgselssprog kaldet OQL (Object Query Language), der giver os mulighed for at henvise til de objekter, der er gemt i GemFire-dataregioner. Dette svarer meget til SQL i syntaks. Lad os se, hvordan en meget grundlæggende forespørgsel ser ud:

VÆLG DISTINCT * FRA eksempel Region

GemFire's QueryService giver metoder til at oprette forespørgselsobjektet.

3.4. Dataserialisering

For at administrere dataserialisering-deserialisering giver GemFire ​​andre muligheder end Java-serialisering, der giver en højere ydeevne, giver større fleksibilitet til datalagring og dataoverførsel, og understøtter også forskellige sprog.

Med dette i tankerne har GemFire ​​defineret PDX-dataformat (Portable Data eXchange). PDX er et dataformat på tværs af sprog, der giver en hurtigere serialisering og deserialisering ved at gemme dataene i det nævnte felt, som kan tilgås direkte uden behov for fuldstændig deserialisering af objektet.

3.5. Funktionsudførelse

I GemFire ​​kan en funktion opholde sig på en server og kan påberåbes fra et klientprogram eller en anden server uden behov for at sende selve funktionskoden.

Den, der ringer op, kan lede en dataafhængig funktion til at fungere på et bestemt datasæt eller kan føre en uafhængig datafunktion til at arbejde på en bestemt server, medlem eller medlemsgruppe.

3.6. Kontinuerlig forespørgsel

Ved kontinuerlig forespørgsel abonnerer klienterne på serversideshændelser ved hjælp af SQL-type forespørgselsfiltrering. Serveren sender alle de hændelser, der ændrer forespørgselsresultaterne. Den kontinuerlige forespørgsel om levering af begivenheder bruger klient / server-abonnementsrammen.

Syntaksen for en kontinuerlig forespørgsel svarer til grundlæggende forespørgsler skrevet i OQL. For eksempel en forespørgsel, der giver de nyeste lagerdata fra Lager region kan skrives som:

VÆLG * fra StockRegion s hvor s.stockStatus = 'aktiv';

For at få statusopdateringen fra denne forespørgsel skal en implementering af CQListener skal fastgøres med Lagerregion:

   ...  ...  ...   

4. Spring Data GemFire ​​Support

4.1. Java-konfiguration

For at forenkle konfigurationen giver Spring Data GemFire ​​forskellige kommentarer til konfiguration af centrale GemFire-komponenter:

@Configuration offentlig klasse GemfireConfiguration {@Bean Properties gemfireProperties () {Properties gemfireProperties = nye egenskaber (); gemfireProperties.setProperty ("navn", "SpringDataGemFireApplication"); gemfireProperties.setProperty ("mcast-port", "0"); gemfireProperties.setProperty ("log-niveau", "config"); returnere gemfireProperties; } @Bean CacheFactoryBean gemfireCache () {CacheFactoryBean gemfireCache = ny CacheFactoryBean (); gemfireCache.setClose (sand); gemfireCache.setProperties (gemfireProperties ()); returner gemfireCache; } @Bean (navn = "medarbejder") LocalRegionFactoryBean getEmployee (endelig GemFireCache-cache) {LocalRegionFactoryBean medarbejderregion = ny LocalRegionFactoryBean (); medarbejderRegion.setCache (cache); workerRegion.setName ("medarbejder"); // ... returner medarbejderRegion; }}

For at konfigurere GemFire-cachen og regionen skal vi først konfigurere nogle få specifikke egenskaber. Her mcast-port er sat til nul, hvilket indikerer, at denne GemFire-node er deaktiveret til multicast-opdagelse og distribution. Disse egenskaber overføres derefter til CacheFactoryBean at oprette en GemFireCache eksempel.

Ved brug af GemFireCache bønne, en forekomst af LocalRegionFatcoryBean oprettes, som repræsenterer regionen inden for cachen for Medarbejder tilfælde.

4.2. Enhedskortlægning

Biblioteket understøtter kortlægning af objekter, der skal gemmes i GemFire-gitteret. Kortlægningsmetadataene defineres ved hjælp af annoteringer i domæneklasserne:

@Region ("medarbejder") offentlig klasse medarbejder {@Id offentlig Stringnavn; offentlig dobbelt løn @PersistenceConstructor offentlig ansat (strengnavn, dobbelt løn) {this.name = navn; denne. løn = løn; } // standard getters / setters}

I eksemplet ovenfor brugte vi følgende kommentarer:

  • @Område, for at specificere regionforekomsten af Medarbejder klasse
  • @Id, at kommentere ejendommen, der skal bruges som en cache-nøgle
  • @PersistenceConstructor, som hjælper med at markere den ene konstruktør, der vil blive brugt til at oprette enheder, hvis flere konstruktører er tilgængelige

4.3. GemFire-arkiver

Lad os derefter se på en central komponent i Spring Data - lageret:

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

4.4. Oql-forespørgselssupport

Repositories tillader definition af forespørgselsmetoder til effektivt at køre OQL-forespørgsler mod den region, den administrerede enhed er kortlagt til:

@Repository offentlig grænseflade EmployeeRepository udvider CrudRepository {Medarbejder findByName (strengnavn); Iterabel findBySalaryGreaterThan (dobbelt løn); Iterabel findBySalaryLessThan (dobbelt løn); Iterabel findBySalaryGreaterThanAndSalaryLessThan (dobbelt løn1, dobbelt løn2); }

4.5. Support til udførelse af funktioner

Vi har også annoteringssupport tilgængelig - for at forenkle arbejdet med udførelse af GemFire-funktioner.

Der er to bekymringer, der skal løses, når vi bruger funktioner, implementering og udførelse.

Lad os se, hvordan en POJO kan eksponeres som en GemFire-funktion ved hjælp af Spring Data-kommentarer:

@Komponent offentlig klasse FunctionImpl {@GemfireFunction offentlig tom hilsen (strengbesked) {// noget logik} // ...}

Vi er nødt til at aktivere annoteringsbehandlingen eksplicit til @GemfireFunction at arbejde:

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

Til udførelse af funktioner skal en proces, der påberåber sig en fjernfunktion, give kaldende argumenter, en funktion id, udførelsesmålet (onServer, onRegion, onMember, etc.):

@OnRegion (region = "medarbejder") offentlig grænseflade FunctionExecution {@FunctionId ("hilsen") offentlig ugyldig udførelse (streng besked); // ...}

For at aktivere behandling af annonceringsfunktioner til udførelse af funktioner skal vi tilføje for at aktivere den ved hjælp af Spring's komponentscanningsfunktioner:

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

5. Konklusion

I denne artikel har vi undersøgt vigtige funktioner fra GemFire ​​og undersøgt, hvordan Spring Data leverede API'er gør det let at arbejde med det.

Den komplette kode til denne artikel er tilgængelig på GitHub.