7

DATA URI (クライアント側、キャンバスを使用) を使用してサーバーに画像を投稿しています。「イメージ」を文字列として varchar(max) 列に保存するか、それを byte[] に変換して varbinary(max) として保存するかの 2 つの選択肢があります。

実装に関しては、努力は同じです。1: DB 内のスペースと 2: 画像を表示する限り、何がより効率的かを判断しようとしています。誰かがこれに関する分析を見たことがありますか、またはこれを測定する良い方法がありますか?

参考までに - 3kb の画像は、DB では約 100K 文字です。

使用: ASP.NET 4.5、MVC、SQL Server 2008

明確にするために

通常のように varbinary(MAX) 列で byte[] を使用してデータベースに画像を保存するか、data:image/png;base64,iVBORw0K..のような HTML5 キャンバスから DATA URI を保存できます。 . varchar(max) 列。

byte[] の格納は一般的であり、これ以上の説明は必要ありません。DATA URI の格納は単なる文字列であり、画像の表示は次のようになります。

<img src="data:image/png;base64,iVBORw0K" /> or
<img src="@Model.Uri" />

私の質問は、どちらがよりパフォーマンスが高く、省スペースであるか、およびこの特定の比較に関するドキュメント、ホワイトペーパー、または分析があるかどうかです。

4

1 に答える 1

8

本当の答えはなく、ほとんど情報が見つからなかったので、Google で Binging して、20K レコードを挿入し (それより少ないのは無意味でした)、ループで一度に 1 つのレコードを選択する簡単な時限テストを行いました。DBアクセスにはPetaPocoを使用しました。何か見つけた方、情報をお持ちの方は是非シェアしてください。これは、DATA URI が注目を集めている、より一般的なシナリオになると思います。

URI は一貫して挿入と選択が高速でした。ミリ秒単位で測定されるため、相対的に高速です。これは要因であってはなりません - それはもっと簡単です。

クライアントへのレンダリングに関する限り。私は 2 つのメソッドを使用しました。MVC アクション メソッドからの ImageResult (画像を返すカスタム ActionResult) (これは http 応答で画像をレンダリングします) と URI 文字列を返し、それを画像 SRC として使用します (つまり、src="@ Model.Uri")。繰り返しますが、ほとんど違いはありません。Chrome 開発ツールを使用した結果:

ImageResult: 2 requests, 200ms, 3.2KB
DATA URI: 2 requests, 200ms, 3.9KB

ただし、ImageResult (byte[]) バージョンは、すべての意図と目的のための画像であるため、ブラウザーによって自動的にキャッシュされることに気付きました。DATA URI バージョンは、ブラウザによって自動的にキャッシュされません。

この初歩的なテストから、ブラウザによる自動キャッシュと他のすべての結果が等しいため、byte[] が適しています。

私のセットアップ: i7、8GB RAM、SSD、SQL Server 2012、IIS Express

キャッシュの利点は、セットアップなしで気づいたことです。はい、HTTP ヘッダー、etag、出力キャッシュなどを管理できると確信しています。

于 2013-02-22T04:38:54.077 に答える