2016-08-04 10 views
0

背景情報非常に小さいオーディオ/画像ファイルをBLOB経由でSQLiteデータベースに保存していますか?

私はAndroidの開発に新たなんだと私は私のクライアントのためのAndroidアプリを作成しています、と私はオーディオファイルや画像ファイルを大量に格納する最善の方法を把握しようとしています私のアプリのために。このアプローチでは、次の要件を満たす必要があります。

1)ユーザーが自分の画像とオーディオファイルをアプリケーションに追加できるようにします(SQLiteデータベースを使用)。これは、何千ものオーディオファイルと画像ファイルが格納される可能性があることを意味しますが、0.35MB以下であり、ほとんどが0.1MB未満です。ユーザーはおそらく数十枚の画像と四分の一のオーディオファイルのオーダーのファイル束をアップロードするでしょう。

2)ユーザはローカルデータをサーバ上のSQLデータベースと同期させることができます。そのため、画像やオーディオファイル(他のデータの割り当てに加えて)は、アプリケーションのユーザがアップロード、ダウンロード、削除することができます。異なる場所。

私は保存するいくつかの状況があります 、Storing small BLOBs in a DatabaseむしろBLOBとしてファイルを保存するよりも、SQLiteのデータベース内のファイル・パスを保存するために、ほとんど常に好ましいことを承知しているが、これらの質問のように、BLOB vs. file path storage、 データベースに直接格納されているファイルはより適切です。特に、アプリケーションに含まれるファイルが非常に小さい場合は特にそうです。私のアプリのファイルは350 K/bより大きくはありません。

私の質問は、ファイルサイズが非常に小さい(画像/オーディオファイルが350k/bを超え、大部分が0〜100k/bの範囲にあります)が多く、ファイルがたくさん保存されている場合にはですローカルのSQLiteデータベースにファイルをアップロードする必要がある場合、またはローカルのSQLiteデータベースをリモートサーバに同期させる必要がある場合、重大なパフォーマンスヒットを引き起こすファイルパスではなく、BLOBとして直接イメージを作成します(数分以内)。

インストールの長時間とリモートデータベースとの最初の同期は、インストールと同期に45分以上の時間がかかりません。

答えて

1

いくつかのランダムなウェブサイトがあなたに語ることのすべてを信じてはいけません。

tests for reading internal vs. external blobsの中には、非常に小さいファイルサイズ(< 100 KB)ではブロブが高速で、いずれの場合でも300 KBのファイルではそれほど大きな違いはありません。

ブロブの書き込みは、トランザクション/同期のオーバーヘッドのためにファイルを書き込むより効率が悪い傾向があります。

これがあなたのAndroid搭載端末にどのように変換されるかは、自分でテストする必要があります。

+0

私はちょうどこれが良い答えであったことをフォローアップしたいと思います。関連するファイルシステムをBLOBとして格納するストレージシステムを実装しました。これは間違いなく、ファイルサイズが大きいシステムでは最適ではないかもしれませんが、私の場合はすべてが非常に動的でなければならないため、実際には唯一のオプションでした。アプリがデプロイされており、ユーザーはこれに起因する問題を経験していません。 – VivaLebowski

関連する問題