3

プロジェクトで jooq を使用しようとしていますが、パフォーマンス上の理由から、クエリをキャッシュしたいと考えています。パフォーマンスに関する考慮事項のセクションのユーザー マニュアルでは、クエリ キャッシングについて言及されていますが、それを実現する方法についての例はありません。そのため、次のようにクエリ (SimpleSelectConditionStep など) をキャッシュしようとします。

SimpleSelectConditionStep query = getFromPool();
if(query != null) {
    factory.attach(query);
    query.bind(1,"John");
} else {
   // create query
   factory.select(PERSON).where(PERSON.NAME.equal("Michael"));
}
// fetch and use query
result = query.fetchOne();
.....
putToPool(query);

私のソフトウェアはマルチスレッド Web アプリケーションですが、2 つの異なるスレッドが同じクエリを同時に使用できないことが保証されています (プールは、プールに再度配置される前に同じクエリを返さない)。

factory がスレッドセーフオブジェクトではないことは知っていますが、コードでこのようなクエリを使用すると問題が発生する可能性がありますか?

4

1 に答える 1

0

ステートメントの準備に時間がかかる場合は、jOOQ のステートメント再利用機能を使用できる場合があります。

http://www.jooq.org/doc/latest/manual/sql-execution/reusing-statements

これにより、同じクエリが頻繁に実行される場合、クエリ内に open ステートメントが内部的に保持されます。それ以外は、あなたの例のような単純なクエリの場合、jOOQ オブジェクトのキャッシュが必要になるとは思えません。

于 2013-06-27T20:33:13.077 に答える