SQLite - Возможно ли увеличить базу данных порциями в режиме wal? - PullRequest
1 голос
/ 05 июня 2019

Я довольно быстро записываю данные в базу данных SQLite, что приводит к большому количеству фрагментов на диске (обычно 2500 фрагментов / файл).Когда я позже попытаюсь выполнить поиск по этой базе данных, это займет много времени, в основном из-за того, что у меня есть жесткий диск (т.е. не ssd).Моя цель - свести фрагментацию к минимуму, так как это увеличит мою производительность поиска.

Я попытался установить размер чанка ~ 100 Мб, но если я превысию этот объем данных, он начнет добавлять небольшие записиопять же, что приводит к фрагментации.Я хотел бы иметь определенный размер чанка, который база данных будет увеличивать при превышении текущего размера, например, 100 МБ -> 200 МБ -> 300 МБ.Я действительно, хотя размер куска делал это автоматически, но похоже, что так.

Емкость хранилища для меня не проблема, я могу выдержать некоторое превышение размера базы данных (например, база данных составляет 1 ГБ, но данные только 700 МБ)).

Любые предложения приветствуются:)

В приведенном ниже коде показано, как настроить соединение SQLite:

SQLiteConnectionStringBuilder connBuilder = new SQLiteConnectionStringBuilder();

connBuilder.DataSource = dbFilename;
connBuilder.DateTimeKind = DateTimeKind.Utc;
connBuilder.Version = 3;
connBuilder.PageSize = 65536;
connBuilder.JournalMode = SQLiteJournalModeEnum.Wal;
var connection = new SQLiteConnection(connBuilder.ToString());

...

using (connection)
{
    connection.Open();
    connection.SetChunkSize(10000000);
    ....
}
...