2013-04-11 5 views
1

У меня есть прецедент, когда я использую memcache для кэширования определенных результатов из БД. Я использую сам запрос как ключ, а значение будет иметь тип CachedRowSetImpl, который сериализует результирующий набор. Чтобы сформировать запрос, мне нужно использовать PreparedStatement, который, в свою очередь, нуждается в объекте соединения с БД. Это побеждает всю цель кеширования, так как более половины времени тратится на установление соединения. Есть ли какая-нибудь работа для этого? Или мне нужно использовать альтернативный подход к результатам кэширования?Подготовленные утверждения в java

+2

Как вы получаете соединение, через пул соединений или создаете соединение вручную? –

+0

Создание его вручную – coder

+0

Ну, теперь вы нашли виновника открытия ваших соединений медленными. –

ответ

0

Чтобы избежать установления соединения каждый раз, вы используете пул соединений, например c3p0. Настроить пул соединений использовать Postgres, имя пользователя swaldman и passwordComboPooledDataSource

// in constructor 
cpds = new ComboPooledDataSource(); 
cpds.setDriverClass("org.postgresql.Driver"); //loads the jdbc driver    
cpds.setJdbcUrl("jdbc:postgresql://localhost/testdb"); 
cpds.setUser("swaldman");         
cpds.setPassword("test-password");         

Когда вам нужен JDBC Connection, просто используйте:

Connection connection = cpds.getConnection(); 

Есть другие пулы соединений, как DBCP, которые установлены аналогичным образом.