У меня есть прецедент, когда я использую memcache для кэширования определенных результатов из БД. Я использую сам запрос как ключ, а значение будет иметь тип CachedRowSetImpl
, который сериализует результирующий набор. Чтобы сформировать запрос, мне нужно использовать PreparedStatement
, который, в свою очередь, нуждается в объекте соединения с БД. Это побеждает всю цель кеширования, так как более половины времени тратится на установление соединения. Есть ли какая-нибудь работа для этого? Или мне нужно использовать альтернативный подход к результатам кэширования?Подготовленные утверждения в java
1
A
ответ
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, которые установлены аналогичным образом.
Как вы получаете соединение, через пул соединений или создаете соединение вручную? –
Создание его вручную – coder
Ну, теперь вы нашли виновника открытия ваших соединений медленными. –