これは、かなり議論されている決定です。そして私の意見では、それは個人的な好みの問題です。vim/emacs、windows/linux のような議論によく似ています。それほど熱くはありませんが。
どちらの側にも長所と短所があります。それらをデータベースに保存する場合、ファイル名と場所についてあまり心配する必要はありません。管理も簡単です (BLOB を含む行を削除するだけです)。しかし、ファイルへのアクセスも難しくなり、何らかの方法でラッパー コードを記述する必要がある場合があります(「download.php」リンクの一部など)。
一方、バイナリ データを別のファイルとして格納すると、管理が複雑になります (最初にファイル名を作成して、ディスクから適切なファイルを開く必要があります)。大規模なデータ セットでは、1 つのディレクトリ内のファイル数が非常に大きくなると、ファイル システムのボトルネックに遭遇する可能性があります (ただし、これはサブディレクトリを作成することで簡単に防ぐことができます)。しかし、データがファイルとして保存されている場合は、それらの置き換えが非常に簡単になります。他の人も内部を知らなくてもアクセスできます (たとえば、UI のカスタマイズを楽しんでいるユーザーを想像してみてください)。
他にも指摘すべき点はあると思いますが、今はあまり書きたくありません...
私が言いたいのは、写真に対してどのような操作を行いたいか (および両方の保存方法の制限) を考え、そこから情報に基づいた決定を下すことです。うまくいかないことはあまりありません。
TX-ログと FS-ジャーナル
さらに調査したところ、さらに情報が見つかりました。
- SQLite はトランザクション ログを使用します
- Android は、システム マウント ポイントで YAFFS を使用し、SD カードで VFAT を使用します。両方とも (私の知る限りでは) ジャーナリングされていません。
SQLite の TX-Log の正確な実装はわかりませんが、各INSERT
/UPDATE
操作がディスク上で 2 つの書き込みを実行することが予想されます。私は間違っているかもしれません (トランザクションの実装に大きく依存します) が、率直に言って、SQLite のソース コードをざっと目を通すことはできませんでした。ここで髪を分割し始めたように感じます(時期尚早の最適化ですか?)...
両方のファイル システム (YAFFS と VFAT) はジャーナリングされていないため、追加の「隠し」書き込み操作はありません。
これらの 2 つの点は、ファイル システムを支持するものです。
この情報は、一粒の塩で受け取ることに注意してください。と の Google の結果をざっと見ただけYAFFS journaling
ですsqlite transaction log
。私はいくつかの詳細を見逃しているかもしれません。