3
我嘗試在一個項目中使用jooq,但出於性能原因,我想緩存查詢。在performance consideration section的用戶手冊中,提到了查詢緩存,但沒有關於如何實現的示例。所以我儘量緩存查詢(例如SimpleSelectConditionStep)如下:在Jooq中緩存查詢
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應用程序,但它是保證不是兩個不同的線程在同一時間不能使用相同的查詢(池不在再次放入池之前返回相同的查詢)。
我知道比工廠不是一個線程安全的對象,但我不知道在代碼中使用這樣的查詢可能會導致問題?
您確定需要緩存查詢嗎?即使在手冊中提到過,只有在經常執行查詢時才需要這樣做,在這種情況下,甚至可能需要緩存「PreparedStatement」或至少SQL String ... –
其中一頁該應用程序具有快速響應的要求。我測量了操作所花費的時間,最長的準備語句正在提取數據。我嘗試緩存SQL字符串,但重新執行SQL字符串後,我只能得到一個通用的結果,而不是生成的記錄。 –
你的例子是真實的嗎?或者你的查詢真的很大?我懷疑你是否需要這種簡單情況下的緩存。你有沒有分析數據,顯示查詢執行的熱點? –