Ръководство за GemFire ​​с пролетни данни

1. Общ преглед

GemFire ​​е високоефективна разпределена инфраструктура за управление на данни, която се намира между клъстера на приложения и източниците на данни от края.

С GemFire ​​данните могат да се управляват в паметта, което прави достъпа по-бърз. Spring Data осигурява лесна конфигурация и достъп до GemFire ​​от приложението Spring.

В тази статия ще разгледаме как можем да използваме GemFire, за да отговорим на изискванията за кеширане на нашето приложение.

2. Зависимости на Maven

За да използваме поддръжката Spring Data GemFire, първо трябва да добавим следната зависимост в нашия pom.xml:

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

Най-новата версия на тази зависимост можете да намерите тук.

3. Основни характеристики на GemFire

3.1. Кеш памет

Кешът в GemFire ​​предоставя основните услуги за управление на данни, както и управлява свързаността с други връстници.

Конфигурацията на кеша ( cache.xml ) описва как данните ще бъдат разпределени между различни възли:

     ...     ... 

3.2. Региони

Областите с данни са логическо групиране в кеш за един набор от данни.

Най-просто казано, регионът ни позволява да съхраняваме данни в множество виртуални машини в системата, без да се съобразяваме към кой възел данните се съхраняват в клъстера.

Регионите са класифицирани в три широки категории:

  • Репликираният регион съдържа пълния набор от данни за всеки възел. Той дава висока производителност при четене. Операциите по запис са по-бавни, тъй като актуализацията на данните трябва да се разпространява към всеки възел:
  • Разделеният регион разпределя данните, така че всеки възел съхранява само част от съдържанието на региона. Копие от данните се съхранява на един от останалите възли. Осигурява добра производителност при запис.
  • Локалният регион се намира на определящия член възел. Няма връзка с други възли в клъстера.

3.3. Заявете кеша

GemFire ​​предоставя език за заявки, наречен OQL (Object Query Language), който ни позволява да се позоваваме на обектите, съхранявани в регионите с данни на GemFire. Това е много подобно на SQL в синтаксиса. Нека да видим как изглежда една много основна заявка:

ИЗБЕРЕТЕ ДИСТИНКТ * ОТ exampleRegion

QueryService на GemFire предоставя методи за създаване на обект на заявка.

3.4. Сериализиране на данни

За да управлява сериализацията-десериализация на данни, GemFire ​​предоставя опции, различни от сериализацията на Java, която дава по-висока производителност, осигурява по-голяма гъвкавост за съхранение на данни и трансфер на данни, също поддръжка за различни езици.

Имайки това предвид, GemFire ​​е дефинирал формат за данни Portable Data eXchange (PDX). PDX е междуезичен формат за данни, който осигурява по-бърза сериализация и десериализация, чрез съхраняване на данните в посоченото поле, до които може да се осъществи директен достъп, без да е необходима пълната десериализация на обекта.

3.5. Изпълнение на функцията

В GemFire ​​функция може да се намира на сървър и може да бъде извикана от клиентско приложение или друг сървър, без да е необходимо да се изпраща самият код на функцията.

Повикващият може да насочи функция, зависима от данните, да работи върху определен набор от данни или може да доведе независима функция за данни да работи на определен сървър, член или група членове.

3.6. Непрекъснати заявки

При непрекъснато заявка клиентите се абонират за събития от страна на сървъра, като използват филтриране на заявки от тип SQL. Сървърът изпраща всички събития, които променят резултатите от заявката. Непрекъснатата заявка за доставка на събитие използва рамка за абонамент клиент / сървър.

Синтаксисът за непрекъсната заявка е подобен на основните заявки, написани в OQL. Например заявка, която предоставя най-новите данни за запасите от региона на запасите, може да бъде написана като:

SELECT * from StockRegion s where s.stockStatus='active';

За да получите актуализация на състоянието от тази заявка, трябва да се приложи изпълнение на CQListener със StockRegion:

   ...  ...  ...   

4. Spring Data GemFire ​​Поддръжка

4.1. Конфигурация на Java

За да се опрости конфигурацията, Spring Data GemFire ​​предоставя различни анотации за конфигуриране на основните компоненти на GemFire:

@Configuration public class GemfireConfiguration { @Bean Properties gemfireProperties() { Properties gemfireProperties = new Properties(); gemfireProperties.setProperty("name","SpringDataGemFireApplication"); gemfireProperties.setProperty("mcast-port", "0"); gemfireProperties.setProperty("log-level", "config"); return gemfireProperties; } @Bean CacheFactoryBean gemfireCache() { CacheFactoryBean gemfireCache = new CacheFactoryBean(); gemfireCache.setClose(true); gemfireCache.setProperties(gemfireProperties()); return gemfireCache; } @Bean(name="employee") LocalRegionFactoryBean getEmployee(final GemFireCache cache) { LocalRegionFactoryBean employeeRegion = new LocalRegionFactoryBean(); employeeRegion.setCache(cache); employeeRegion.setName("employee"); // ... return employeeRegion; } }

За да настроим кеша и региона на GemFire, първо трябва да настроим няколко специфични свойства. Тук mcast-port е зададен на нула, което показва, че този възел на GemFire ​​е деактивиран за откриване и разпространение на многоадресен достъп. След това тези свойства се предават на CacheFactoryBean, за да се създаде екземпляр на GemFireCache .

Използване GemFireCache боб, случай на LocalRegionFatcoryBean се създава който представлява регион в кеша за наети случаи.

4.2. Съставяне на обекти

The library provides support to map objects to be stored in GemFire grid. The mapping metadata is defined by using annotations at the domain classes:

@Region("employee") public class Employee { @Id public String name; public double salary; @PersistenceConstructor public Employee(String name, double salary) { this.name = name; this.salary = salary; } // standard getters/setters }

In the example above, we used the following annotations:

  • @Region, to specify the region instance of the Employee class
  • @Id, to annotate the property that shall be utilized as a cache key
  • @PersistenceConstructor, which helps to mark the one constructor that will be used to create entities, in case multiple constructors available

4.3. GemFire Repositories

Next, let's have a look at a central component in Spring Data – the repository:

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

4.4. Oql Query Support

The repositories allow the definition of query methods to efficiently run the OQL queries against the region the managed entity is mapped to:

@Repository public interface EmployeeRepository extends CrudRepository { Employee findByName(String name); Iterable findBySalaryGreaterThan(double salary); Iterable findBySalaryLessThan(double salary); Iterable findBySalaryGreaterThanAndSalaryLessThan(double salary1, double salary2); }

4.5. Function Execution Support

We also have annotation support available – to simplify working with GemFire function execution.

There are two concerns to address when we make use of functions, the implementation, and the execution.

Let's see how a POJO can be exposed as a GemFire function using Spring Data annotations:

@Component public class FunctionImpl { @GemfireFunction public void greeting(String message){ // some logic } // ... }

We need to activate the annotation processing explicitly for @GemfireFunction to work:

@Configuration @EnableGemfireFunctions public class GemfireConfiguration { // ... }

For function execution, a process invoking a remote function need to provide calling arguments, a function id, the execution target (onServer, onRegion, onMember, etc.):

@OnRegion(region="employee") public interface FunctionExecution { @FunctionId("greeting") public void execute(String message); // ... }

За да активираме обработката на анотациите за изпълнение на функцията, трябва да добавим, за да я активираме, използвайки възможностите за сканиране на компоненти на Spring:

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

5. Заключение

В тази статия разгледахме основните характеристики на GemFire ​​и разгледахме как предоставените API на Spring Data улесняват работата с него.

Пълният код за тази статия е достъпен в GitHub.