crossplatform.ru

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

> Замедление вставки в QSQLITE, Загнать большой txt файл в БД
cupersuper
  опции профиля:
сообщение 19.7.2014, 10:16
Сообщение #1


Студент
*

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

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




Репутация:   0  


Здравствуйте! Подскажите, пожалуйста, что можно придумать?

Пытаюсь загнать большой текстовый файл 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();
....


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов (1 - 3)
lanz
  опции профиля:
сообщение 19.7.2014, 16:52
Сообщение #2


Старейший участник
****

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

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




Репутация:   8  


Надо посмотреть где тормозит конкретно - в загрузке, в драйвере БД, в Qt.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
cupersuper
  опции профиля:
сообщение 19.7.2014, 17:02
Сообщение #3


Студент
*

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

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




Репутация:   0  


По всей видимости в самом цикле возникает проблема, как посмотреть на более низком уровне не совсем понимаю.

В системе жёсткий диск на запись занят на 100%, на чтение на 90-95%, проц почти не грузится
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 19.7.2014, 18:33
Сообщение #4


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

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




Репутация:   12  


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

Сообщение отредактировал Iron Bug - 19.7.2014, 18:35
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 28.11.2024, 14:36