crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

noneim
  опции профиля:
сообщение 8.6.2010, 14:22
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 1
Регистрация: 8.6.2010
Пользователь №: 1792

Спасибо сказали: 0 раз(а)




Репутация:   0  


На данный момент есть программа, использующая подключение к БД sqlite:
Инициализация:
    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(path);
    if (!db.open())
    {
        return false;
    }


Далее в разных потоках:
    QSqlQuery query = QSqlQuery(db);
    query.prepare("INSERT INTO ip_list (ip, host, vps, assigned) "
                "VALUES (?, ?, ?, ?)");
        query.addBindValue(new_ip->ip);
        query.addBindValue(new_ip->host);
        query.addBindValue(new_ip->vps);
        query.addBindValue(new_ip->assigned);
        query.exec();


Но недавно прочитал , что оказывается так нельзя делать.
Хотя вроде бы тестил и под windows и под Linux, работало без багов.
Интересует надежность такого применения, на данных момент демон нормально держит uptime несколько дней, но вдруг возникнут какие-нибудь неожиданные баги?


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
512es
  опции профиля:
сообщение 1.12.2010, 4:38
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 135
Регистрация: 31.10.2008
Пользователь №: 407

Спасибо сказали: 5 раз(а)




Репутация:   0  


Недавно проводил стресс тесты. Методом экспериментов выяснил что работать с одним соединением в двух потоках лучше, чем с двумя отдельными. Хотя в доках по Qt написано что этого делать нельзя..

На деле разница получается в том что, когда одно соединение используется, второй поток блокируется. А если несколько соединений с одним файлом базы то второй поток иногда получает отказ в выполнении запроса.

Постгрес в нескольких потоках вообще начинает страшно глючить, а склайт работает...


А по теме советую всётаки вывести работу с базой в отдельный поток, ака db writer, и присылать в него данные через сигналы и слоты в режиме очереди. Тогда работать будет вообще идеально.
Тем более, если вдруг база не успеет записать данные до получения новых, они просто выстроятся в очередь и запишутся чуть позже, ничего не теряя.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 27.6.2025, 19:53