7.13. ストリームベースのインターフェイス
Red Hat Single Sign-On のユーザーストレージインターフェイスの多くは、潜在的に大きなオブジェクトのセットを返すことができるクエリーメソッドを含んでおり、メモリー消費や処理時間の面で大きな影響を与える可能性があります。これは、クエリーメソッドのロジックでオブジェクトの内部状態の小さなサブセットのみが使用される場合に特に当てはまります。
これらのクエリーメソッドで大規模なデータセットを処理するためのより効率的な代替手段を開発者に提供するために、ユーザーストレージインターフェイスに Streams
サブインターフェイスが追加されました。これらの Streams
サブインターフェイスは、スーパーインターフェイスのオリジナルのコレクションベースのメソッドをストリームベースのバリアントに置き換え、コレクションベースのメソッドをデフォルトにしています。コレクションベースのクエリーメソッドのデフォルトの実装では、Stream
対応のメソッドが呼び出され、結果が適切なコレクションタイプに収集されます。
Streams
サブインターフェイスは、データセットを処理するためのストリームベースのアプローチに焦点を当てた実装を可能にし、そのアプローチによる潜在的なメモリーとパフォーマンスの最適化の恩恵を受けることができます。実装される Streams
サブインターフェイスを提供するインターフェイスには、いくつかの 機能インターフェイス、org.keycloak.storage.federated
パッケージ内のすべてのインターフェイス、およびカスタムストレージ実装の範囲に応じて実装される可能性があるいくつかのインターフェイスが含まれます。
開発者向けに Streams
サブインターフェイスを提供しているインターフェイスの一覧を参照してください。
パッケージ | クラス |
|
|
|
|
| すべてのインターフェイス |
|
|
(*) はインターフェイスが 機能インターフェイス であることを示しています。
ストリームアプローチの恩恵を受けたいユーザーストレージのカスタム実装は、オリジナルのインターフェイスの代わりに Streams
サブインターフェイスを実装する必要があります。たとえば、次のコードでは、UserQueryProvider
インターフェイスの Streams
バリアントを使用しています。
public class CustomQueryProvider extends UserQueryProvider.Streams { ... @Override Stream<UserModel> getUsersStream(RealmModel realm, Integer firstResult, Integer maxResults) { // custom logic here } @Override Stream<UserModel> searchForUserStream(String search, RealmModel realm) { // custom logic here } ... }