Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Замедление вставки в QSQLITE
Форум на CrossPlatform.RU > Разработка > SQL. Базы данных.
cupersuper
Здравствуйте! Подскажите, пожалуйста, что можно придумать?

Пытаюсь загнать большой текстовый файл 30ГБ (500 млн строк) в базу данных SQLITE. Миллион строк влетают очень быстро, а дальше запись по мере роста БД начинает замедлятся.

....
#include <iostream>
#include <fstream>
using namespace std;
....

char str[99999];
ifstream in;
in.open(filename.toAscii());
in.seekg(0,ios::beg);


db.transaction();
QSqlQuery query;
query.prepare("INSERT INTO tablename (line, value) "
              "VALUES (:line, :value)");

while(in){

    in.getline(str, 99999);
    QString qstr = QString::fromLocal8Bit(str);


    if(in && qstr != "")
    {
        QStringList qstrlst = qstr.split(";");
        QString line = qstrlst.at(0);
        QString value = qstrlst.at(1);

        query.bindValue(":line", line);
        query.bindValue(":value", value);
        query.exec();
    }

}
db.commit();
in.close();
....


lanz
Надо посмотреть где тормозит конкретно - в загрузке, в драйвере БД, в Qt.
cupersuper
По всей видимости в самом цикле возникает проблема, как посмотреть на более низком уровне не совсем понимаю.

В системе жёсткий диск на запись занят на 100%, на чтение на 90-95%, проц почти не грузится
Iron Bug
по моим наблюдениям, SQLite работает довольно шустро с базами размером до 300 Мб. базы большего размера начинают вызывать тормоза, вне зависимости от настроек (не знаю, чем это вызвано, память или другие ресурсы при этом особо не пожираются).
при загрузке больших объёмов, если при этом не нужно ничего читать из базы и не нужна синхронизация и транзакционность, можно включать настройку через PRAGMA: synchronous=off, count_changes=off и другие.
Вообще, про оптимизацию большой загрузки данных (bulk load) можешь почитать тут, например:
http://blog.quibb.org/2010/08/fast-bulk-inserts-into-sqlite/
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.