JackrabbitやModeShapeなどの既存の JCR 実装を使用すると、いくつかの利点があります。何よりもまず、すぐに多くの機能を無料で利用できます。
- 階層型データ ストレージ- 多くのデータは自然に階層化されており、JCR リポジトリを使用すると、アプリケーションがアクセスする方法でデータを整理できます。URI、日付/時刻、カテゴリ、またはフォルダー構造によってキー付けされたものはすべて、リポジトリに保存するのに自然に適合します。
- 標準の Java API を使用する- JCR API は TCK を備えた標準の Java API です。つまり、アプリケーションは標準の動作に依存し、特定の JCR 実装に結び付けられません。
- 柔軟なスキーマの適用 - ノード タイプを定義および使用する方法によって、ノード構造とプロパティ値を適用するかどうか、および適用する場所を選択できます。
- データの進化- データ構造は時間の経過とともに進化する可能性が高く、JCR を使用するとこれを非常に簡単に行うことができます。
- クエリと全文検索- アプリケーションはデータをナビゲートしたり、場所に関係なくコンテンツをクエリしたりできます。JCR クエリ言語は非常に豊富で、全文検索をサポートしています。
- トランザクション- トランザクション境界を制御できます。つまり、JCR セッションは、アプリケーションまたはそのコンテナーによって制御される JTA トランザクションに参加できます。
- イベント- ノードやプロパティが追加、変更、または削除されると、アプリケーションに通知できます。
- クラスタリング- 複数のプロセスにわたって JCR リポジトリをクラスタリングすることにより、アプリケーションをスケーリングします。実装ごとにクラスタリングの構成は異なりますが、クライアント アプリケーションに対して同じように動作します。
- バージョン管理- JCR には、コンテンツのバージョン管理のための標準メカニズムが含まれています。すべてのユースケースに適しているとは限りませんが、適合する場合は非常に便利です。
- ロック- JCR には、短期ロックの標準メカニズムが含まれています。これは、アプリケーションがリポジトリの一部を 1 つのプロセスだけで更新する必要がある場合に役立ちます。
これらの機能の一部が重要である場合は、独自の機能を展開するのではなく、既存の実装を再利用することを検討する必要があります。そうしないと、これらの種類の機能の実装にすべての時間を費やすことになります。
ただし、これらの機能のいずれもユース ケースに適合しない場合は、他のデータ ストレージ テクノロジを検討する必要があります。
- リレーショナル データベースは、データが非常に制約されている場合、スキーマが頻繁に変更される可能性が低い場合、またはデータがフラット (少数のキー タイプの値が多数) の場合に最適です。(多くの JCR 実装はコンテンツをリレーショナル データベース内に格納できることに注意してください。そのため、「データをリレーショナル データベースに格納する必要がある」ということは、アプリケーションがリレーショナル データベースを直接使用する正当な理由にはなりません。)
- キー値ストアは、一意のキーによって任意の値を格納する必要があり、すべてのアクセスが get と put を介して行われる場合に最適です。通常、値はストアに対して不透明です。
- ドキュメント ストアは、ストアが値の構造を認識していることを除いて、キー値ストアに似ています。一部のドキュメント ストアは、クエリをサポートしています。
- 他のストレージ テクノロジーには、独自のスイート スポットがあります。
他に考慮すべきことは、結果整合性データベースまたは強力な整合性データベースが必要かどうかです。多くの「従来の」アプリケーションを強整合性データベースに対して作成する方がはるかに簡単であり、実際、ほとんどの JCR リポジトリ (Jackrabbit や ModeShape を含む) は強整合性です。