Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с несколькими базами данных 
:(
    Опции темы
Anneta111
Дата 5.7.2013, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 примерно =(
посоветуйте как можно ускорить программу? может попробовать пул соединений или еще что нибудь? 
PM MAIL   Вверх
jManiak
Дата 5.7.2013, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 6.2.2007
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Ну как минимум - распараллелить. Т.е выполнять подключения к разным хостам в разных потоках. 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.4819 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.