ООООЧЕНЬ!!! медленная выборка BLOB из БД при помощи QSqlQuery



  • Добрый день,
    Столкнулся с такой проблемой, что BLOB из базы данных вытаскивается очень медленно и, чем больше BLOB, тем медленнее происходить извлечение его из БД (в геометрической прогрессии). BLOB размером 50 Мб тащится примерно 30 минут, а 200 Мб - 3-4 часа (более того, через 3-4 часа приложение падает с ошибкой bad_alloc)

    Подскажите, пожалуйста, что я не так делаю. Такое чувство, что QSqlQuery постоянно переразмещает QByteArray, в который он пытается поместить загружаемый BLOB и в конечном итоге чистого сегмента памяти в 200 Мб просто не находится.

    Мой код (использую драйвер QODBC, БД Informix):

    QSqlDatabase db = QSqlDatabase::addDatabase(SettingsDialog::analysisDatabase().driverName, "test_db");
        db.setHostName(SettingsDialog::analysisDatabase().hostName);
        db.setDatabaseName(SettingsDialog::analysisDatabase().databaseName);
        db.setPort(SettingsDialog::analysisDatabase().port);
        db.setUserName(SettingsDialog::analysisDatabase().username);
        db.setPassword(SettingsDialog::analysisDatabase().password);
        if (!db.open())
            qDebug() << QObject::tr("Не удалось установить соединение с БД:\n") << db.lastError().text();
    
        QString sql = "SELECT t.data FROM blob_data t WHERE id = 773788";
        QSqlQuery query(db);
        query.setForwardOnly(true);
        if (query.exec(sql)) {
            query.next();
            qDebug() << "NEXT DONE";
            qDebug() << "SIZE = " << query.value(0).toByteArray().size();
        } else
            qDebug() << query.lastError().text();
    

    До строки

    qDebug() << "NEXT DONE";
    

    Программа доходит практически мгновенно, а вот на следующей строчке происходит затык



  • Может query.next() возвращает false ?



Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.