4

私は、写真を撮り、画像を (base64 でエンコードされた文字列として) PHP スクリプトにプッシュする Android アプリケーションを作成しています。ここから、画像に関するデータを MySQL データベースに保存します。

画像をデータベース内に保存するのが賢明でしょうか (base64 文字列として渡されるため)、画像に変換してファイルシステムに保存する方がよいでしょうか?

4

4 に答える 4

4

base64 でエンコードされたイメージは場所を取りすぎます (バイナリの同等物よりも約 33% 多くなります)。

MySQL にはバイナリ形式 (BLOB、MEDIUM_BLOB) が用意されているので、それらを使用してください。

あるいは、ほとんどの人は、特に大きな画像の場合、ファイルシステムがより効率的に保存するファイルのキーのみを DB に保存することを好みます。それが私が長期的に好む解決策です。私は通常、ファイル コンテンツの SHA1 ハッシュを使用してファイルへのパスを形成します。これにより、二重ストレージがなくなり、必要に応じてファイルからレコードを簡単に取得できるようになります (最初に 3 レベルのファイル ツリーを使用します)。ディレクトリの直接の子が多すぎないように、ハッシュの最初の 2 文字と文​​字 3 と 4 からそれぞれ 2 つのレベルが作成されます)。これは、たとえば git ストレージのロジックであることに注意してください。

それらを DB に格納する利点は、特にプロジェクトが小規模である限り、バックアップをより簡単に管理できることです。データベースはキャッシュを提供しますが、サーバーとクライアントも、どちらが最速であり、違いが大きくないかを先験的に決定するのは困難です(同時書き込みが多すぎないと思います)。

于 2012-06-05T19:25:09.417 に答える
2

常にbase64_encode($image)ファイルに保存し、データベースにファイルパスのみを保存してfopen()から、エンコードされた画像を取得するために使用できます。

質問を正しく理解していなかった場合は、申し訳ありません。

于 2012-06-05T19:45:40.953 に答える
2

私は両方の方法でそれを行いました.MySQLテーブルにバイナリデータを保存したコードに戻るたびに、MySQLテーブルのポインタを使用してファイルシステムに切り替えます。

パフォーマンスに関して言えば、MySQL サーバーから複数の大きな BLOB をプルするとパイプがすぐに飽和する傾向があるため、FS に行く方がはるかに優れています。通常は、詰まらせたくないパイプです。

于 2012-06-05T19:32:05.973 に答える
0

「賢い」というのはかなり主観的なものだと思います。「人々が私の画像に直接リンクしないようにする」という観点からは賢明だと思います。また、ディレクトリ構造などを変更する必要があると判断した場合に役立つ場合があります..それはあなたにとってより簡単になるかもしれません. ...率直に言って、これを行うことの利点は本当に考えられません。

于 2012-06-05T19:27:09.673 に答える