Новичок
Профиль
Группа: Участник
Сообщений: 1
Регистрация: 4.4.2011
Репутация: нет Всего: нет
|
Здравствуйте! Пишу программу на java, она должна выполнять сбор отзывов с сайтов, затем пользователь принимает или отклоняет их прямо из этой программы. Базы все однотипные расположены на разных хостах. Из конфигурационной базы данных считываю ssh доступы(для создания тунелей) и доступы к базам данных. После того как считала все настройки и забила их в коллекции ArrayList выполняю перебор: | Код | for(DataSSH ssh: DataSSH.dataSSH){ for(DataSitesDB db: DataSitesDB.dataSitesDB){ if(ssh.id.equals(db.ssh)){ sitesDB.add(new ClassSelectSitesDB(db.id, ssh.host, ssh.user, ssh.password, db.host, db.db_name, db.db_user, db.db_pass)); } } }
|
далее в классе работы с базой данных выполняю создание ssh тунеля, подключение к базе данных и выборку данных | Код |
public class ClassSelectSitesDB { private Connection connect; private String idSite; //ssh private int nLocalPort = 3366; // local port number use to bind SSH tunnel private int sshPort = 22; // remote SSH host port number private String sshUser; private String sshPassword; private String sshHost; //db private int nRemotePort = 3306; // remote port number of your database private String dbName; private String dbUser; private String dbPass; private String dbHost; public ClassSelectSitesDB( String idSite, String sshHost, String sshUser, String sshPassword, String dbHost, String dbName, String dbUser, String dbPass){ this.idSite = idSite; //ssh this.sshUser = sshUser; // SSH loging username this.sshPassword = sshPassword; // SSH login password this.sshHost = sshHost; // hostname or ip or SSH server // db this.dbHost = dbHost; // hostname or ip of your database server this.dbName = dbName; this.dbUser = dbUser; this.dbPass = dbPass; selectDB(); } public void selectDB(){ try{ //создаем тунель CTestDriver ssh = new CTestDriver(sshUser, sshPassword, sshHost, sshPort, dbHost, nLocalPort, nRemotePort); Class.forName("com.mysql.jdbc.Driver"); connect = DriverManager.getConnection("jdbc:mysql://localhost:"+nLocalPort+"/"+dbName, dbUser, dbPass); DataRevie.dataRevie.clear(); //для автодилеров PreparedStatement stmtAvtodealer = connect.prepareStatement("SELECT R.review_id, R.review_title, R.review_content, R.review_date, A.avtofirm_name " + " FROM `gb_cms_reviews` R LEFT JOIN gb_cms_avtofirm A ON R.firm_id = A.avtofirm_id WHERE R.review_visibility = '0' AND R.review_type_id = '1'"); ResultSet rsAvtodealer = stmtAvtodealer.executeQuery(); while (rsAvtodealer.next()) { DataRevie.dataRevie.add(new DataRevie()); DataRevie.allDataRevie.add(new DataRevie(idSite, rsAvtodealer.getString(1), rsAvtodealer.getString(2), rsAvtodealer.getString(3), rsAvtodealer.getString(4), rsAvtodealer.getString(5),"Автосалоны")); } //для банков PreparedStatement stmtBank = connect.prepareStatement("SELECT R.review_id, R.review_title, R.review_content, R.review_date, A.bank_h1 " + " FROM `gb_cms_reviews` R LEFT JOIN gb_cms_bank A ON R.firm_id = A.bank_id WHERE R.review_visibility = '0' AND R.review_type_id = '2'"); ResultSet rsBank = stmtBank.executeQuery(); while (rsBank.next()) { DataRevie.dataRevie.add(new DataRevie(idSite, rsBank.getString(1), rsBank.getString(2), rsBank.getString(3), rsBank.getString(4), rsBank.getString(5),"Банки")); DataRevie.allDataRevie.add(new DataRevie(idSite, rsBank.getString(1), rsBank.getString(2), rsBank.getString(3), rsBank.getString(4), rsBank.getString(5),"Банки")); } //автосервисы автозапчасти PreparedStatement stmtCompany = connect.prepareStatement("SELECT R.review_id, R.review_title, R.review_content, R.review_date, A.avtofirm_name " + " FROM `gb_cms_reviews` R LEFT JOIN gb_cms_avtofirm A ON R.firm_id = A.avtofirm_id WHERE R.review_visibility = '0' AND (R.review_type_id = '3' OR R.review_type_id = '4')"); ResultSet rsCompany = stmtCompany.executeQuery(); while (rsCompany.next()) { DataRevie.dataRevie.add(new DataRevie(idSite, rsCompany.getString(1), rsCompany.getString(2), rsCompany.getString(3), rsCompany.getString(4), rsCompany.getString(5),"Др. компании")); DataRevie.allDataRevie.add(new DataRevie(idSite, rsCompany.getString(1), rsCompany.getString(2), rsCompany.getString(3), rsCompany.getString(4), rsCompany.getString(5),"Др. компании")); } //Collections.sort(DataRevie.dataRevie); Collections.sort(DataRevie.allDataRevie); Collections.reverse(DataRevie.allDataRevie); connect.close(); ssh.close(); } catch (Exception ex) { System.out.println("Got error connect: " + ex.getMessage()); } } }
|
Сейчас загрузка данных при открытии программы и при обновление данных длится достаточно долго минуты 3-4 примерно =( посоветуйте как можно ускорить программу? может попробовать пул соединений или еще что нибудь?
|