Sqlite DB Файл слишком велик ....? - PullRequest
0 голосов
/ 07 августа 2011

Я создаю файл словаря, который содержит 85000 записей с Sqlite и QT. файл sqlite слишком велик, его размер составляет 134 МБ, а в другом словаре, таком как MDic DB, те же данные, которые созданы с помощью sqlite, и те же записи составляют 10 МБ!

query.exec("PRAGMA journal_mode = MEMORY");
query.exec("PRAGMA synchronous = OFF");

Dic_entry DictionaryEntry = DictionaryInstance.readEntry();

QString definition, headword, displayedHeadWord;
query.exec("BEGIN Transaction");
int Count = 0;
while(!DictionaryEntry.headword.empty())
{
    definition = QString::fromStdString(DictionaryEntry.definition);
    definition.replace("'", "''");

    headword = QString::fromStdString(DictionaryEntry.headword);
    headword.replace("'", "''");

    displayedHeadWord = QString::fromStdString(DictionaryEntry.displayedHeadword);
    displayedHeadWord.replace("'", "''");

    string strQuery = "INSERT INTO Dictionary_Words([Definition], [HeadWord], [DisplayedHeadWord]) "
        "values('"
        + definition.toStdString() + "', '"
        + headword.toStdString() + "', '"
        + displayedHeadWord.toStdString()
        + "')";

    query.exec(QString::fromStdString(strQuery));
    if(Count == 200)
    {
        query.exec("COMMIT TRANSACTION");
        Count = 0;
    }
    Count++;

    DictionaryEntry = DictionaryInstance.readEntry();
}

query.exec("End Transaction");
query.exec("CREATE INDEX HW_idx ON [Dictionary_Words](HeadWord)");
query.exec("CREATE INDEX Def_idx ON [Dictionary_Words](Definition)");
query.exec("CREATE INDEX DHW_idx ON [Dictionary_Words](DisplayedHeadword)");
query.exec("PRAGMA auto_vacuum=FULL");
db.close();

Пожалуйста, помогите мне, как я могу уменьшить размер файла SQlite DB

1 Ответ

0 голосов
/ 07 августа 2011

У меня нет способа доказать это, но я подозреваю, что причиной проблемы являются индексы.Индексы могут занимать огромное количество места, а у вас их три.Попробуйте это без них и посмотрите, будет ли доступ по-прежнему приемлемо быстрым;таким образом, размер базы данных должен быть намного меньше.

...