У меня есть база данных с таблицей, содержащей ~ 150 миллионов строк. Столбцы просто:Large Qt Sqlite SELECT Statement
id (INTEGER), value_one (INTEGER), value_two (INTEGER), value_3 (INTEGER)
Я должен импортировать все эти данные в QList
, но я бег в проблему, где Qt является утверждающим qAllocMore: 'Requested size is too large!', file tools\qbytearray.cpp, line 73
, когда я бег SELECT
запроса. Я могу запустить тот же код в таблице, содержащей ~ 7 миллионов записей, и работает без ошибок.
Это мое SELECT
заявление:
bool e = query.exec("SELECT * FROM DocumentTerms");
if (!e) {
qWarning() << __FUNCTION__ << "\tError: " << query.lastError().text();
}
while (query.next()) {
int docId = query.value(1).toInt();
int termId = query.value(2).toInt();
int frequency = query.value(3).toInt();
//store it in a QHash<int, QPair<int, int>>
}
Похоже, это итерация через петлю query.next
, но утверждают, выскакивает после ~ 16 миллионов итераций. Любая идея, что его вызывает?
Похоже, что у вас заканчивается память, вы на 32-битной ОС? и сколько у вас RAM? – OneOfOne
64-разрядная машина и 64-разрядный исполняемый файл. Я работаю с 8 гигабайтами оперативной памяти. Я использую еще 8 концертов с файлом подкачки. Я работаю в Windows 7. –
Я не знаю, пытаетесь ли вы отображать эти данные в каком-то U/I, но если так, то я бы сказал, что это ошибка дизайна. Вместо этого вы должны использовать какой-то механизм подкачки. – OldProgrammer