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.