Panduan untuk GemFire ​​dengan Spring Data

1. Gambaran keseluruhan

GemFire ​​adalah infrastruktur pengurusan data diedarkan berprestasi tinggi yang terletak di antara kelompok aplikasi dan sumber data belakang.

Dengan GemFire, data dapat dikendalikan dalam memori, yang menjadikan akses lebih cepat. Spring Data memberikan konfigurasi dan akses mudah ke GemFire ​​dari aplikasi Spring.

Dalam artikel ini, kita akan melihat bagaimana kita dapat menggunakan GemFire ​​untuk memenuhi keperluan cache aplikasi kita.

2. Pergantungan Maven

Untuk menggunakan sokongan Spring Data GemFire, pertama-tama kita perlu menambahkan kebergantungan berikut di pom.xml kami :

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

Versi terbaru dari ketergantungan ini boleh didapati di sini.

3. Ciri-ciri Asas GemFire

3.1. Cache

Cache di GemFire ​​menyediakan perkhidmatan pengurusan data penting serta menguruskan hubungan dengan rakan sebaya yang lain.

Konfigurasi cache ( cache.xml ) menerangkan bagaimana data akan diedarkan di antara nod yang berbeza:

     ...     ... 

3.2. Kawasan

Kawasan data adalah pengelompokan logik dalam cache untuk satu set data.

Ringkasnya, wilayah memungkinkan kita menyimpan data dalam beberapa VM dalam sistem tanpa mempertimbangkan simpul data yang disimpan dalam kluster.

Kawasan dikelaskan kepada tiga kategori luas:

  • Kawasan yang direplikasi menyimpan set lengkap data pada setiap nod. Ia memberikan prestasi membaca yang tinggi. Operasi penulisan lebih perlahan kerana kemas kini data perlu disebarkan ke setiap nod:
  • Kawasan berpisah menyebarkan data sehingga setiap simpul hanya menyimpan sebahagian kandungan wilayah. Salinan data disimpan di salah satu nod lain. Ia memberikan prestasi menulis yang baik.
  • Kawasan tempatan terletak pada simpul anggota yang menentukan. Tidak ada sambungan dengan nod lain dalam kluster.

3.3. Pertanyaan Cache

GemFire ​​menyediakan bahasa pertanyaan yang disebut OQL (Object Query Language) yang membolehkan kita merujuk pada objek yang tersimpan di kawasan data GemFire. Ini sangat serupa dengan SQL dalam sintaks. Mari kita lihat bagaimana pertanyaan yang sangat asas seperti:

PILIH JARAK * DARI contohRegion

GemFire's QueryService menyediakan kaedah untuk membuat objek pertanyaan.

3.4. Serialisasi Data

Untuk menguruskan serialisasi data-deserialisasi, GemFire ​​menyediakan pilihan selain dari serialisasi Java yang memberikan prestasi yang lebih tinggi, memberikan fleksibiliti yang lebih besar untuk penyimpanan data dan pemindahan data, juga dukungan untuk berbagai bahasa.

Dengan itu, GemFire ​​telah menentukan format data Portable Data eXchange (PDX). PDX adalah format data silang bahasa yang memberikan serialisasi dan deserialisasi yang lebih cepat, dengan menyimpan data dalam bidang bernama yang dapat diakses secara langsung tanpa perlu melakukan deserialisasi objek sepenuhnya.

3.5. Pelaksanaan Fungsi

Di GemFire, fungsi dapat berada di pelayan dan dapat dipanggil dari aplikasi klien atau pelayan lain tanpa perlu mengirim kod fungsi itu sendiri.

Pemanggil dapat mengarahkan fungsi yang bergantung pada data untuk beroperasi pada kumpulan data tertentu atau dapat memimpin fungsi data bebas untuk berfungsi pada pelayan, anggota atau kumpulan anggota tertentu.

3.6. Pertanyaan Berterusan

Dengan pertanyaan berterusan, pelanggan melanggan acara sisi pelayan dengan menggunakan penapisan pertanyaan jenis SQL. Pelayan menghantar semua peristiwa yang mengubah hasil pertanyaan. Penyampaian acara pertanyaan berterusan menggunakan kerangka langganan pelanggan / pelayan.

Sintaks untuk pertanyaan berterusan adalah serupa dengan pertanyaan asas yang ditulis dalam OQL. Sebagai contoh, pertanyaan yang menyediakan data stok terkini dari wilayah Saham boleh ditulis sebagai:

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

Untuk mendapatkan kemas kini status dari pertanyaan ini, pelaksanaan CQListener perlu dilampirkan dengan StockRegion:

   ...  ...  ...   

4. Sokongan Spring Data GemFire

4.1. Konfigurasi Java

Untuk mempermudah konfigurasi, Spring Data GemFire ​​menyediakan pelbagai anotasi untuk mengkonfigurasi komponen inti 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; } }

Untuk menyiapkan cache dan wilayah GemFire, kita harus terlebih dahulu menyediakan beberapa sifat tertentu. Di sini mcast-port ditetapkan ke sifar, yang menunjukkan bahawa simpul GemFire ​​ini dilumpuhkan untuk penemuan dan pengedaran multicast. Sifat-sifat ini kemudian diteruskan ke CacheFactoryBean untuk membuat instance GemFireCache .

Menggunakan kacang GemFireCache , contoh LocalRegionFatcoryBean dibuat yang mewakili wilayah dalam Cache untuk contoh Karyawan .

4.2. Pemetaan Entiti

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); // ... }

Untuk membolehkan pemprosesan anotasi pelaksanaan fungsi, kita perlu menambahkan untuk mengaktifkannya menggunakan keupayaan imbasan komponen Spring:

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

5. Kesimpulan

Dalam artikel ini, kami telah meneroka ciri-ciri penting GemFire ​​dan mengkaji bagaimana API Spring Data yang disediakan menjadikannya mudah untuk menggunakannya.

Kod lengkap untuk artikel ini terdapat di GitHub.