@Vlad_Nest
SEO-специалист

Правильно ли приложение делает запросы к БД?

Всем привет!
Есть java-программа, в которой через JDBC идет подключение к MySQL базе.

Создание подключения вряд ли чем-то отличается от 98% реализаций:
private static Connection createConnection() {

			try {
				Class.forName(controllerDB);
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}

			Connection connection = null;

			try {
				connection = DriverManager
				.getConnection(dbURL,db_user, db_password);

			} catch (SQLException e) {
				e.printStackTrace();
			}

			if (connection != null) {
				return connection;
			} else {
				return null;
			}
		 }


Далее у меня есть 12 методов, которые это подключение используют.
2 из них коннектится к базе в среднем 2000-3000 раз в минуту, остальные - от 900 до 1000 в минуту суммарно.
На самом деле я первый раз столкнулся с такими нагрузками, возможно это вообще ни о чем и я могу не переживать, пока запросов не будет около 1млн в секунду :)

Собственно, пример использования:
Метод 1:
public static String[] one() throws SQLException {
		 Statement statement;
		 ResultSet result;
		 Random random = new Random();
		 
		 int id = ((random.nextInt(max_number) + 1));
		 String sId = Integer.toString(id);
		 
		 Connection conn = createConnection();
		 String sql = "SELECT * FROM table WHERE ID=" + sId;
		 
		 String[] arr = new String[10];
		 
		 statement = conn.createStatement();
		 result = statement.executeQuery(sql);
		 
		while (result.next()){
			 arr[0] = result.getString("string");
			 arr[1] = result.getString("string");
			 arr[2] = result.getString("string");
			 arr[3] = result.getString("string");
			 arr[4] = result.getString("string");
			 arr[5] = result.getString("string");
			 arr[6] = result.getString("string");
			 arr[7] = result.getString("string");
			 arr[8] = result.getString("string");
			 arr[9] = result.getString("string");
			 
		 }
		 statement.close();
		 conn.close();
		 
		 return arr;
	 }


Метод 2:
static void two(int num1, String str1, String str2) throws SQLException {
		 
		 String insertTableSQL = "INSERT ... " +
		                "VALUES (?, ?, ?)"
		                + "ON DUPLICATE KEY UPDATE" 
		                + ".. .";
		 Connection conn = createConnection();
		 PreparedStatement insert = conn.prepareStatement(insertTableSQL);
		 
		 insert.setString(1, str1);
		 insert.setInt(2, num1);
		 insert.setString(3, str2);
		 
		 try {
		      insert.executeUpdate();
		    } catch (SQLException e) {
		      e.printStackTrace();
		    }
		 
		 insert.close();
		 conn.close();
	 }


Т.е. каждый раз при взаимодействии пользователей приложенька создает коннект, использует его, закрывает, потом создает, использует, закрывает и так очень много раз в минуту :)

Это нормальное использование или можно этот момент как-то оптимизировать?
  • Вопрос задан
  • 185 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Java
Седой и строгий
Используйте пулы соединений.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы