データ]


1概要


GemFire

は、アプリケーションクラスタとバックエンドデータソースの間に位置する高性能の分散データ管理インフラストラクチャです。

GemFireを使用すると、データをメモリ内で管理できるため、アクセスが高速になります。 Spring DataはSpringアプリケーションからGemFireへの簡単な設定とアクセスを提供します。

この記事では、GemFireを使用してアプリケーションのキャッシュ要件を満たす方法について説明します。


2 Mavenの依存関係

Spring Data GemFireのサポートを利用するには、まず__pom.xmlに次の依存関係を追加する必要があります。

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-gemfire</artifactId>
    <version>1.9.1.RELEASE</version>
</dependency>

この依存関係の最新バージョンはhttps://search.maven.org/classic/#search%7Cga%7C1%7Cg%3A%22org.springframework.data%22%20AND%20a%3A%22spring-data-にあります。 gemfire%22[ここ]。


3 GemFireの基本機能


3.1. キャッシュ

GemFireのキャッシュは、他のピアとの接続性を管理するだけでなく、重要なデータ管理サービスを提供します。

キャッシュ構成(

cache.xml

)は、データが異なるノード間でどのように分散されるかを記述しています。

<cache>
    <region name="region">
        <region-attributes>
            <cache-listener>
                <class-name>
                ...
                </class-name>
            </cache-listener>
        </region-attributes>
    </region>
    ...
</cache>


3.2. 地域

データ領域は、単一のデータセットに対するキャッシュ内の論理的なグループです。

簡単に言うと、

リージョンは、データがクラスタ内に格納されているノードを考慮せずに

システム内の複数のVMにデータを格納することを可能にします。

地域は大きく3つのカテゴリに分類されます。


  • 複製領域

    は各ノード上の完全なデータセットを保持します。それ

高い読み取りパフォーマンスが得られます。データ更新を各ノードに伝播する必要があるため、書き込み操作は遅くなります。

<region name="myRegion" refid="REPLICATE"/>


  • 分割領域

    は各ノードのみになるようにデータを分配します。

地域コンテンツの一部を格納します。データのコピーは他のノードの1つに格納されます。それは良い書き込み性能を提供します。

<region name="myRegion" refid="PARTITION"/>


  • ローカル領域

    は、定義メンバーノードにあります。ありません

クラスタ内の他のノードとの接続。

+[ソース、xml、ガター:、true]

<region name="myRegion" refid="LOCAL"/>


3.3. キャッシュを問い合わせる

GemFireは、GemFireデータ領域に格納されたオブジェクトを参照することを可能にするOQL(Object Query Language)と呼ばれるクエリー言語を提供します。

これはSQLの構文と非常によく似ています。非常に基本的なクエリがどのように見えるかを見てみましょう。

exampleRegionからのSELECT DISTINCT ** FROM

GemFireの

QueryService

はクエリオブジェクトを作成するためのメソッドを提供します。


3.4. データ直列化

データのシリアライゼーション – デシリアライゼーションを管理するために、GemFireはJavaシリアライゼーション以外のオプションを提供し、より高いパフォーマンスを提供し、データストレージとデータ転送のためのより大きな柔軟性を提供します。

それを念頭に置いて、GemFireはPortable Data eXchange(PDX)データフォーマットを定義しました。 PDXは、オブジェクトを完全に逆シリアル化することなく直接アクセスできるnamedフィールドにデータを格納することにより、高速のシリアル化と逆シリアル化を提供するクロスランゲージデータフォーマットです。


3.5. 機能実行

GemFireでは、機能はサーバー上に常駐でき、機能コード自体を送信する必要なしにクライアントアプリケーションまたは他のサーバーから呼び出すことができます。

呼び出し側は、データ依存機能に特定のデータ・セットを操作するように指示することも、独立したデータ機能を特定のサーバー、メンバー、またはメンバー・グループで機能させることもできます。


3.6. 継続的なクエリ

継続的なクエリでは、クライアントはSQLタイプのクエリフィルタリングを使用してサーバー側のイベントにサブスクライブします。サーバーは、照会結果を変更するすべてのイベントを送信します。継続的なクエリイベント配信は、クライアント/サーバーサブスクリプションフレームワークを使用します。

連続クエリの構文は、OQLで書かれた基本的なクエリと似ています。たとえば、

Stock

地域の最新の株価データを提供するクエリは、次のように書くことができます。

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

このクエリからステータスの更新を取得するには、

CQListener

の実装に__StockRegionを添付する必要があります。

<cache>
    <region name="StockRegion>
        <region-attributes refid="REPLICATE">
            ...
            <cache-listener>
                <class-name>...</class-name>
            </cache-listener>
        ...
        </region-attributes>
    </region>
</cache>


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<String, Employee> getEmployee(final GemFireCache cache) {
        LocalRegionFactoryBean<String, Employee> employeeRegion = new LocalRegionFactoryBean();
        employeeRegion.setCache(cache);
        employeeRegion.setName("employee");
       //...
        return employeeRegion;
    }
}

GemFireのキャッシュとリージョンを設定するには、まずいくつかの特定のプロパティを設定する必要があります。ここで、

mcast-port

は0に設定されています。これは、このGemFireノードがマルチキャストの検出と配布に対して無効になっていることを示します。その後、これらのプロパティは

CacheFactoryBean

に渡されて

GemFireCache

インスタンスが作成されます。


GemFireCache

Beanを使用して、

Employee

インスタンスのキャッシュ内の領域を表す

LocalRegionFatcoryBean

のインスタンスが作成されます。


4.2. エンティティマッピング

ライブラリは、GemFireグリッドに格納されるオブジェクトをマップするためのサポートを提供します。マッピングメタデータは、ドメインクラスで注釈を使用して定義されます。

@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
}

上記の例では、以下の注釈を使用しました。



  • @



    __

    Region



    は、

    Employee

    のリージョンインスタンスを指定します

クラス



@ Id、

** キャッシュとして利用されるプロパティに注釈を付ける

キー




@ PersistenceConstructor


**

__、

__はマークを付けるのに役立ちます

複数のコンストラクタが利用可能な場合にエンティティを作成するために使用されるコンストラクタ


4.3. GemFireリポジトリ

次に、Spring Dataの中心的なコンポーネント、つまりリポジトリを見てみましょう。

@Configuration
@EnableGemfireRepositories(basePackages
  = "com.baeldung.spring.data.gemfire.repository")
public class GemfireConfiguration {

    @Autowired
    EmployeeRepository employeeRepository;

   //...
}


4.4. OQLクエリのサポート

リポジトリを使用すると、管理対象エンティティがマッピングされている地域に対して、クエリメソッドを定義してOQLクエリを効率的に実行できます。

@Repository
public interface EmployeeRepository extends
  CrudRepository<Employee, String> {

    Employee findByName(String name);

    Iterable<Employee> findBySalaryGreaterThan(double salary);

    Iterable<Employee> findBySalaryLessThan(double salary);

    Iterable<Employee>
      findBySalaryGreaterThanAndSalaryLessThan(double salary1, double salary2);
}


4.5. 機能実行サポート

GemFire関数の実行を簡単にするために、注釈のサポートもあります。

私たちが関数を利用するときに取り組むべき2つの懸念、実装と実行があります。

Spring Dataアノテーションを使用してPOJOをGemFire関数として公開する方法を見てみましょう。

@Component
public class FunctionImpl {

    @GemfireFunction
    public void greeting(String message){
       //some logic
    }

   //...
}


@ GemfireFunction

が機能するには、注釈処理を明示的にアクティブにする必要があります。

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

関数を実行するために、リモート関数を呼び出すプロセスは、呼び出し引数、関数

id

、実行ターゲット(

onServer



onRegion



onMember

など)を提供する必要があります。

@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の本質的な機能を探り、Spring Dataが提供するAPIがどのようにそれを扱いやすくするかを調べました。

この記事の完全なコードはhttps://github.com/eugenp/tutorials/tree/master/persistence-modules/spring-data-gemfire[GitHubで利用可能]です。