既存のJavaアプリケーションは、データアクセスのためにSpring Data / JPA/Hibernateの上に直接構築されています。ほとんどの場合、オブジェクトは、JPQLクエリを実行するSpringリポジトリによってハイドレイトされます。より動的なクエリと並べ替えが必要な場合も、QueryDSLに依存しています。Spring DataはQueryDSLで非常にうまく機能し、SpringDataで得られるすべての優れたページング/並べ替えは引き続きうまく機能します。
現在、既存のシステムを、一部のデータがデータベースにあり、他のデータがRESTfulサービスを介して永続化されているシステムに拡張しています。発生する問題は、永続化されたデータの複数のソースを処理するときに、どのように効率的に結合、フィルタリング、並べ替え、およびページングするかです。あるソースからのデータは、明らかに整合性の制約なしに、主キーを介して別のソースからのデータを参照できます。
コレクションのQueryDSL、Quaere、jaque、SBQL4J、lambdajなどを見てきましたが、結合、フィルタリング、並べ替え、ページングするには、すべてのデータソースのすべてのデータをメモリにロードする必要があるという印象を受けました-特にWebアプリの場合、あまり効率的ではありません。確かに、一部のデータは、たとえばJPQLを介してフィルタリングして、メモリ使用量のヒットを少し減らすことができますが、それでも臭いがします。
Q:異種データソースとテクノロジーのこのシナリオをエレガントに処理するライブラリはありますか?