あなたの一般的な質問はかなり広いと思います。すべての UC (主に、アプリケーションで必要とされるデータのすべての分析ビュー/モデル) をカバーするための推奨されるアプローチは 1 つだけではありません。
このような質問には、個々のデータ要素のサイズ、データの量、1 つまたは複数のアプリケーションから発生するアクセスまたはアクセス パターンの頻度、情報のタイムリーな配信、必要なデータの精度、サイズなど、多くの要因が含まれます。クラスターのリソース、各 (仮想) マシンの物理リソースなど。したがって、特定のアプローチでは、間違いなくアプリケーションのチューニング、それに応じた GemFire のチューニング、およびデータ モデルに関係なく JVM のチューニングが必要になります。それでも、慎重に作成されたデータ モデルは、そのような調整の範囲を決定できます。
具体的には、GemFire では、このような調整には、データ管理ポリシー、エビクション(オーバーフロー) および有効期限(LRU、またはおそらくカスタム) 設定などのさまざまな構成が含まれますが、これらに限定されず、さまざまなエビクション/有効期限しきい値とともに、データをOff-ヒープ メモリ、さまざまなパーティション戦略 ( PartitionResolver ) の採用など。
たとえば、 Address 情報が比較的静的で不変 (つまり、実際の「参照」データ) である場合、 Address データをREPLICATE
Regionに格納することを検討できます。頻繁に書き込まれるデータ (通常は「トランザクション」データ) は、PARTITION
Regionの方が適しています。
もちろん、ご存じのように、 (OQL を使用して) クエリで「結合」する (別のRegionPARTITION
で管理される) データはすべてコロケーションする必要があります。GemFire/Geode は現在、分散結合をサポートしていません。
さらに、特定のノードが特定のリージョンをホストする可能性があるため、クラスターを「トランザクション」ノードと「分析」ノードに分割し、分析ベースのノードがトランザクション ノードのリージョンCacheListeners
から更新されます (これに注意してください)。AsyncEventListeners で AEQ を非同期的に使用します。AEQ は、可用性と耐久性を高めるために個別に作成することもできます。このトランザクションと分析のアプローチがCQRSの基礎です。
データのサイズは、データが保存される形式 (つまり、シリアライズされているか、シリアライズされていないか) によっても影響を受けます。GemFire 独自のシリアライゼーション形式 (PDX) は、Java シリアライゼーションと比較して非常に最適です。それはすべて、データに必要な「移植性」と、データをシリアル化された形式で保持できるかどうかによって異なります。
また、オンザフライでデータを結合するのにどれだけコストがかかるかを検討することもできます。つまり、実行時に比較的安価にデータを集約、変換、強化できる場合 (コンピューティングとメモリ/ストレージの比較)、GemFire の関数実行サービスを使用して、データをロジックにではなく、ロジックをデータに変換することを検討できます ( MapReduceの基本的な基礎)。
GemFire は Key-Value ストアであるため、複雑なオブジェクト グラフを個別のリージョンにマッピングすることは簡単な問題ではありません。オブジェクトを参照 (特に多対多) で分割し、それらを熱心にロードするか遅延ロードするかを正確に把握することは、特に一貫性と可用性のトレードオフが存在する GemFire などの分散型複製データ ストアでは、過負荷の問題です。
GemFire での永続化とクエリを簡素化するためのさまざまな API とフレームワークがあります。注目すべきアプローチの 1 つは、Spring Data Commons Repository 抽象化の Spring Data GemFire の 拡張です。
また、ジョブに適切なデータ モデルを使用することも問題になる場合があります。非常に複雑なデータ関係がある場合は、おそらくグラフ データベース (Neo4j など) を使用して分析モデルを作成する方が簡単なオプションです。 Springは、Neo4j チームが率いる Neo4j の優れたサポートも提供します。
どのデザインを選択する場合でも、間違いなくハイブリッド アプローチが必要になることは間違いありません。多くの場合、パスは実際に「依存」する (つまり、アプリケーションやデータ アクセス パターン、負荷などすべてに依存する) ため、明確ではありません。
ただし、1 つ確かなことは、基盤となるデータ ストアとそのデータ管理機能について、特に一貫性と可用性に関連するため、大雑把な知識と理解があることです。
また、GemFire slack チャネルとApache DEV メーリング リストもあり、このアーキテクチャ設計を進めていく際により具体的な問題が発生した場合は、GemFire の専門家や (上級) GemFire/Geode ユーザーのコミュニティに連絡するために使用できます。道。