2013-06-24 2 views
1

, поэтому я в настоящее время работаю над Java-приложением, которое должно регистрировать определенные события в базе данных. Я ожидаю, что в минуту будет не более 15-20 вставок, в основном мне было интересно, должен ли я создавать новое соединение для каждой инструкции вставки или держать ее открытой до тех пор, пока приложение работает.Буфер MySQL запрашивает или делает несколько соединений?

Что я делаю:

public void logEvent(MyCustomEvent e) { 
    Connection con = null; 
    Statement st = null; 
    ResultSet rs = null; 

    try { 
     con = DriverManager.getConnection(url, user, password); 
     st = con.createStatement(); 

     st.executeUpdate("INSERT INTO Table(" + e.data + ");"); 

    } catch (SQLException ex) { 
     Logger lgr = Logger.getLogger(MySQLConnector.class.getName()); 
     lgr.log(Level.SEVERE, ex.getMessage(), ex); 

    } finally { 
     try { 
      if (rs != null) { 
       rs.close(); 
      } 
      if (st != null) { 
       st.close(); 
      } 
      if (con != null) { 
       con.close(); 
      } 

     } catch (SQLException ex) { 
      Logger lgr = Logger.getLogger(MySQLConnector.class.getName()); 
      lgr.log(Level.SEVERE, ex.getMessage(), ex); 
     } 
    } 
} 

Нет ли проблем в создании нового соединения, каждый раз, или может/должен я буфера входы каким-то образом?

ответ

1

Выполнение соединений стоит дорого, поэтому, вероятно, лучше не продолжать их делать. Тем не менее, при открытии одного соединения все время есть свои проблемы (что происходит, если он почему-то закрывается?)

Почему бы вам не взглянуть на пул соединений с базой данных - Google покажет несколько конкурирующих реализаций пула соединений для вас. Вы получите лучшее из обоих миров. Для вашего приложения соединение будет отображаться постоянно, но если соединение по какой-то причине не удается, пул подключений будет обрабатывать его повторно для его открытия.

1

Вы должны держать соединение открытым и повторно использовать его. Запуск и срывание соединения JDBC дорого, особенно если вы обеспечиваете его SSL.

Другой вариант - использовать так называемый пул соединений, где приложение не создает соединения JDBC напрямую, а приобретает один из пула ценных открываемых соединений. Когда это будет сделано, он вернет соединение с пулом.

Ваш поставщик баз данных может предоставить библиотеку пула соединений или использовать что-то вроде C3PO. Это Q & А перечислены некоторые другие параметры: Java JDBC connection pool library choice in 2011/2012?


Существует Гоча с сохранением открытых соединений в течение длительного времени в MySQL. Проблема в том, что MySQL имеет тайм-аут «бездействия» по умолчанию в течение нескольких часов (примерно 10 или около того). Поэтому, если ваше приложение сидит без дела в течение длительных периодов времени, оно может обнаружить, что его соединение нарушено. Пул соединений может позаботиться о повторном подключении для вас. В противном случае стандартным обходным решением этой проблемы является увеличение тайм-аута по умолчанию на что-то ДЕЙСТВИТЕЛЬНО большое. Например: MySQL connection timeout