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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Организация коннектов к БД 
:(
    Опции темы
Bulat
Дата 31.7.2006, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 4
Всего: 57



Вопрос конечно чуть более общий чем только для явистов, но я реализую на яве.

Вообщем задача такая: есть одна БД - бд1(на первом серваке) в которой инфа по всем юзерам.
Есть еще два сервака в которых тоже по 7-8 БД(юзеры рассыпаны по группам - в каждой БД своя группа). Изначально нужно брать определенную инфу из бд1, потом брать другую инфу из всех оставшихся БД. при этом нет в бд1 нет никакого поля которое бы определяло в какую БД лезть по определенному юзеру. Получается нужно делать методом перебора. 

В целом я представляю как это сделать, но слишком сложная структура. Возможно есть какие-то конструкции или методы чтоб можно было упростить код? 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
LSD
Дата 31.7.2006, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Задача слишком абстрактно сформулированна, чтобы было можно было давать какие-то конкретные рекомендации.

Цитата(Bulat @  31.7.2006,  17:07 Найти цитируемый пост)
В целом я представляю как это сделать, но слишком сложная структура. Возможно есть какие-то конструкции или методы чтоб можно было упростить код?

Ты никакого кода не привел, и даже не рассказал как именно ты пытаешься это реализовывать.
Так что рекомендация одна: пиши проще smile 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
batigoal
Дата 31.7.2006, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

Репутация: 24
Всего: 151



Цитата(Bulat @  31.7.2006,  17:07 Найти цитируемый пост)
В целом я представляю как это сделать, но слишком сложная структура. Возможно есть какие-то конструкции или методы чтоб можно было упростить код?  

По-моему, куда лучше будет хранить прямое указание на это вместе с юзером. Перебор - избыточная мера. Первое, что приходит в голову - создать таблицу DB-линков (или что там еще, в зависимости от СУБД), и сопоставить каждому юзеру ID его базы. Потом по линку лазить за остальной инфой. Тогда мы сможем сэкономить на сетевом обмене, убрав лишние взаимодействия с приложением.

А вообще, это можно сделать, если использовать архитектуру распределенной БД (единой).


P.S. Может, стоит перенести вопрос в форум по базам? 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Bulat
Дата 31.7.2006, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 4
Всего: 57



Цитата(Lamer George @  31.7.2006,  16:21 Найти цитируемый пост)
P.S. Может, стоит перенести вопрос в форум по базам?

Я думал об этом, но скорее всего все ограничиться: 

Цитата(Lamer George @  31.7.2006,  16:21 Найти цитируемый пост)
приходит в голову - создать таблицу DB-линков (или что там еще, в зависимости от СУБД), и сопоставить каждому юзеру ID его базы. Потом по линку лазить за остальной инфой. Тогда мы сможем сэкономить на сетевом обмене, убрав лишние взаимодействия с приложением.


но в моем случае это еще больше геммороя(сорри за выражение), потому как здесь не наблюдается изначально правильной архитектуры.  smile Вообще вопрос лучше бы решить не затрагивая саму БД, потому как там висят еще куча систем и процессов....... вообщем в тяжеловатых условиях пока работается. Так как в базе линков нужно будет прописать на всех юзеров немногим меньше 10 тысяч, но не это стольсложно, просто в самой базе хороший бардак.  smile 

Цитата(LSD @  31.7.2006,  16:20 Найти цитируемый пост)
Ты никакого кода не привел, и даже не рассказал как именно ты пытаешься это реализовывать.

Не думаю, что это особо о чем то скажет:

Код

public class ClientRecords {
    private Integer userId;

    public ClientRecords(Integer userId) {
        this.userId = userId;
    }

    public RecordsData[] getClientRecords() throws SQLException {
        List rdata = new ArrayList();
        Connect connect = new Connect();
        Connection con_cs = connect.init_cs();
        String recordsQuery = "SELECT record_id, description, flag, balance, limit FROM Records WHERE user_id = " + userId;
        PreparedStatement pst = con_cs.prepareStatement(recordsQuery);
        ResultSet rs = pst.executeQuery();
        if (rs.next()) {
            while(rs.next()) {
                switch (rs.getInt("flag")) {
                    case 1 : {
                        Connection con_hh = connect.init_hh();
                        String query = "SELECT balance, limit FROM Logins WHERE user_id = " + userId + " AND record_id = " + rs.getInt("record_id");
                        PreparedStatement pst1 = con_hh.prepareStatement(query);
                        ResultSet rs1 = pst1.executeQuery();
                        if (rs1.next()) {
                            RecordsData element = new RecordsData(rs.getInt("record_id"), rs.getString("description"), rs1.getDouble("balance"), rs1.getDouble("limit"));
                            rdata.add(element);
                        } else {

                        }
                        rs1.close();
                        pst1.close();
                        connect.destroy_hh(con_hh);
                    }
                    case 8 : {
                        Connection con_pp = connect.init_pp();
                        String query = "SELECT balance, limit FROM Logins WHERE user_id = " + userId + " AND record_id = " + rs.getInt("record_id");
                        PreparedStatement pst1 = con_hh.prepareStatement(query);
                        ResultSet rs1 = pst1.executeQuery();
                        if (rs1.next()) {
                            RecordsData element = new RecordsData(rs.getInt("record_id"), rs.getString("description"), rs1.getDouble("balance"), rs1.getDouble("limit"));
                            rdata.add(element);
                        } else {

                        }
                        rs1.close();
                        pst1.close();
                        connect.destroy_pp(con_pp);
                    } 
                    case 2 : {
                        RecordsData element = new RecordsData(rs.getInt("record_id"), rs.getString("description"), rs.getDouble("balance"), rs.getDouble("limit"));
                        rdata.add(element);
                    }
                    case 116 : {
                        Connection con_nn = connect.init_nn();
                        String query = "SELECT balance, limit FROM Logins WHERE user_id = " + userId + " AND record_id = " + rs.getInt("record_id");
                        PreparedStatement pst1 = con_nn.prepareStatement(query);
                        ResultSet rs1 = pst1.executeQuery();
                        if (rs1.next()) {
                            RecordsData element = new RecordsData(rs.getInt("record_id"), rs.getString("description"), rs1.getDouble("balance"), rs1.getDouble("limit"));
                            rdata.add(element);
                        } else {

                        }
                        rs1.close();
                        pst1.close();
                        connect.destroy_nn(con_nn);
                    }
                    case 144 : {
                        RecordsData element = new RecordsData(rs.getInt("record_id"), rs.getString("description"), rs.getDouble("balance"), rs.getDouble("limit"));
                        rdata.add(element);
                    }
                    case 384 : {
                        RecordsData element = new RecordsData(rs.getInt("record_id"), rs.getString("description"), rs.getDouble("balance"), rs.getDouble("limit"));
                        rdata.add(element);
                    }
                    case 0 : {
                        RecordsData element = new RecordsData(0, "У вас есть счет, но неверно проставлен флаг, обратитесь в абонентский отдел", 0.0, 0.0);
                        rdata.add(element);
                    }
                    default : {
                        RecordsData element = new RecordsData(0, "У вас есть счет, но неверно проставлен флаг, обратитесь в абонентский отдел", 0.0, 0.0);
                        rdata.add(element);
                    }
                }
            }
        } else {

        }
        rs.close();
        pst.close();
        connect.destroy_cs(con_cs);
        return (RecordsData[]) rdata.toArray(new RecordsData[rdata.size()]);
    }
}


изначально начинал "сортировать" по полю "flag", ибо это поле для этого и предполагалось, но потом и тут стал бардак, так что совсем не факт что и по этому полю все будет четко реализовано(за исключением некоторых флагов, а всех флагов штук 30-35) Вообще у меня есть класс коннект, в котором у меня есть почти все коннекты ко всем базам(которые я соответственно вызываю), и в конечном итоге можно добавивь еще пару условий, все закодить это, но это вообщем получится такая огромная штука....... Есть поля user_id(id каждого юзера), но он тоже не определяет куда конкретно нужно лезть далее.

И я не лезу в форум по БД, просто все же как-то можно будет разобраться в пределах явы smile  smile и как вы может уже заметили, еще не факт что все записи введены верно(то бишь есть в общей бд1, но в своей БД), вот такая сложная ерунда, потому как в БД большой беспорядок

P.S. не хотелось бы для всех 30 флагов перечислять.

Добавлено @ 16:51 
Может можно как-то упростить хотя бы коннекты к БД которые висят на одном серваке? smile   

Это сообщение отредактировал(а) Bulat - 31.7.2006, 16:52


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
batigoal
Дата 31.7.2006, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

Репутация: 24
Всего: 151



Имхо: когда масштабы бардака ТАКОВЫ, бессмысленно двигаться дальше. Сначала нужно навести минимальный порядок. 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Bulat
Дата 31.7.2006, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 4
Всего: 57



Lamer George, я это понимаю  smile . Но вот только без бумажек, порядок навести сложно, а чтоб поднимать бумажки нужно чтоб задвигались тетки в офисе, что вообще задача еще более сложная, от я и думаю что может хоть как-то можно извернутся  smile  


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

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

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


 




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


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

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