#前提
アプリをローカルで完結させる場合。
#そもそもDBに保存すべきなのかを検討する
ファイルパスだけを保存することで問題がない場合はわざわざDBに保存する必要はない。
私のサービスの都合上、ファイルパスの保存では問題があった。
私のサービスでは写真が肝であり、データを消されるとまずい。
存在確認をして、「ファイルが削除された可能性があります」ではダメなのだ。
基本的にはギャラリーには保存せず、必要なときにアプリの方から写真を復元というかダウンロードさせればよい。
#検索(パフォーマンス)は大丈夫なのか
画像データはバイトの集まりで、近年はカメラの解像度も上がってきているため、サイズはバカにならない。前回の記事ではバイナリーだけを保存しただけであったが、これは問題である。
大きなバイナリーの比較には相当の時間を有するため、非機能要件を満たせなくなる。
そこで、md5などのアルゴリズムを使ってハッシュ値を求めて、レコード内に保存しておく。ハッシュ値で比較することによって、大幅に検索時間が短縮できるであろう。
記憶領域が増えるが、パフォーマンスを優先しようとなったときには、是非実装すべきである。
#追記(2020/4/11)
写真はファイルとして内部ストレージに保存するのが良さそうです。
通常、ユーザーが操作することはないでしょうし、DBのパフォーマンスやカーソルのメモリ制限などを考慮しました。