現在、プロジェクトで Envers を使用していますが、複数のテーブルに分散している監査済みデータをクエリすると、パフォーマンスが大幅に低下します。
基本的に、監査済みデータのストリームを次のように作成します。
List<Object[]> auditStream = new LinkedList<Object[]>();
for (Class<?> entityClass : desiredEntityClasses) {
auditStream.addAll(
auditReader.createQuery()
.forRevisionsOfEntity(entityClass, false, true)
.add(AuditEntity
.revisionProperty("timestamp")
.ge(startTimestamp))
.getResultList());
}
その上、いくつかの種類のエンティティ (ネストされたエンティティなど) には追加の監査情報が必要です。
応答時間は (タイムスタンプを減らすことにより) 少量のデータには妥当ですが、 に 500 のエントリがあるauditStream
場合、すべてを取得するのに約 3 秒かかります。これは長すぎます。
Q1この種のクエリでバッチ フェッチをオンにできるかどうか、またその方法を教えてください。
Q2一度に複数の種類のエンティティを取得するなど、クエリを最適化する方法はありますか?