我正在SQLite数据库中相当快地记录数据,这会导致光盘上有很多碎片(通常是2500个碎片/文件)。稍后当我尝试搜索该数据库时,需要花费很长时间,这主要是因为我有硬盘驱动器(即,没有ssd)。我的目标是将碎片降到最低,因为这将提高我的搜索性能。
我尝试将块大小设置为〜100Mb,但是如果我超过了此数据量,它将再次开始添加小记录,这会导致碎片。我想要一个特定的块大小,当数据库超过当前大小时,数据库将增加,例如100Mb-> 200Mb-> 300Mb。实际上,虽然块大小是自动执行的,但看起来确实如此。
存储容量对我来说不是问题,我可以承受数据库大小的一些过冲(数据库为1Gb,但数据仅为700Mb)。
任何建议都值得欢迎:)
以下代码显示了我如何设置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);
....
}