sqlite3 データベースに裏打ちされたキャッシュを構築しています。使用するディスク容量を制限するために、db ファイルのサイズを定期的にチェックしています。最大制限を超えている場合は、最も古いアイテムを一括削除してバキュームし、サイズが最大の 80% を下回るまで繰り返します。
ただし、バキューム直後はファイル サイズが変化していないため、通常、サイズが小さくなる前にテーブル全体を削除することになります。すべての呼び出しはSQLITE_OK
、どこにも見られるエラーなしで返されます。
while (too_many_rows) {
// delete N rows
sqlite3_exec(database, "VACUUM;", NULL, NULL, &error);
sqlite3_close(database);
// check file size
printf("%d deleted, new size %d KB\n", N, size);
}
次のようなものを生成します。
200 deleted, new size 400 KB
200 deleted, new size 400 KB
200 deleted, new size 360 KB
200 deleted, new size 360 KB
156 deleted, new size 360 KB
0 deleted, new size 360 KB
0 deleted, new size 360 KB
0 deleted, new size 360 KB
0 deleted, new size 360 KB
0 deleted, new size 16 KB
バキュームが終了したことを確認するにはどうすればよいですか?また、ファイル サイズを再度確認するにはどうすればよいですか?
sqlite は教えてくれたり、ブロックさせたりできますか? 何かを使用する必要がありますinotify
か?