私は組み込みデバイス(Linuxベース)にいくつかのログを保存するために2Mバイトの記憶領域を持っています。サイズが非常に限られているので、最大サイズに達した場合に対処するためのアプローチを実装する必要があります。 1つのオプションは、永続性のためのmmapを持つ循環バッファです。私たちが考えている他のオプションは、sqlite3を使用することです(最大サイズに達したときに最も古いエントリを削除し、新しいものを挿入する)。ディスクストレージが
私が理解する限り、sqlite3はページを使用します(4096Kまたは設定可能)。私の質問は次のとおりです:
sqlite3からのディスク使用量の計算方法は?データベースのファイルサイズのほかに、ここで数えるために何が必要ですか?
2Mに達した場合はどうなりますか?最も古いエントリを削除するためにチェックできるエラーや特定の情報はありますか?
エントリを削除して新しいエントリを挿入するのは良い方法です(パフォーマンス上の理由、データのセグメンテーション)。
ご意見やご意見は歓迎します。
thanks.CL。私はエントリを複数回挿入して削除するためのループを作りました(それぞれ2M以上のsqlite_exec便宜関数で実行されます)。ファイルサイズが大きくなることが予想されます。しかし、それは変わりません。空き領域がVACCUMによって取り戻された場合、これは少し矛盾します。また、ロールバックジャーナルファイルはどこですか?私はディレクトリ内のデータベースファイルを見つけるだけです。 – pepero
空き領域*は他の行で再利用できます。 VACUUMはファイルサイズに影響します。デフォルトの[設定](http://www.sqlite.org/pragma.html#pragma_journal_mode)では、トランザクションごとにロールバック・ジャーナルが削除されます。 –
ええ、ロールバックジャーナルは一時ファイルです。分かりました。私はまた、挿入しようとしました。たとえば、サイズが82066432バイトのデータベースファイルになる2M行。次に、これらの行がすべて削除されます。ファイルサイズは縮小しません。 – pepero