2013-02-21 41 views
5

Tôi đăng hình ảnh lên máy chủ bằng cách sử dụng URI DATA (phía máy khách, sử dụng canvas). Bây giờ tôi có hai lựa chọn: tôi có thể lưu "hình ảnh" như một chuỗi trong một cột varchar (max) hoặc tôi có thể chuyển đổi nó thành byte [] và lưu nó thành varbinary (max).URI dữ liệu so với nhị phân trong cơ sở dữ liệu

Theo như triển khai, nỗ lực là như nhau. Tôi đang cố gắng để xác định những gì sẽ hiệu quả hơn như xa như 1: không gian trong DB và 2: hiển thị hình ảnh. Có ai nhìn thấy bất kỳ phân tích về điều này hoặc có một cách tốt để đo lường điều này?

AN FYI - hình ảnh 3kb có khoảng 100 nghìn ký tự trong DB.

Sử dụng: ASP.NET 4.5, MVC, SQL Server 2008

Để Làm rõ

Tôi có thể lưu trữ hình ảnh trong cơ sở dữ liệu sử dụng byte [] trong một varbinary (MAX) cột như là điển hình là trường hợp hoặc tôi có thể lưu trữ URI DATA từ canvas HTML5 trông giống như dữ liệu: image/png; base64, iVBORw0K ... trong cột varchar (max).

Lưu trữ byte [] là điển hình và không cần giải thích thêm. Lưu trữ các dữ liệu URI chỉ là một chuỗi và hiển thị hình ảnh sẽ là một vấn đề:

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

Câu hỏi của tôi là cái nào là performant và nhiều không gian hơn tiết kiệm và nếu có bất kỳ tài liệu, giấy trắng hoặc phân tích xung quanh so sánh cụ thể này .

+0

Điều đó hữu ích. Có một liên kết?Tôi đã tìm 40 phút và không thể tìm thấy bất kỳ sự so sánh nào như vậy. –

+1

bạn sẽ sử dụng varbinary (max) không varchar (max) –

+1

Trong khi tôi đánh giá cao nỗ lực của bạn, câu hỏi không phải là lưu trữ một hình ảnh trong cơ sở dữ liệu - điều đó sẽ mang lại cho tôi 7 giây;) - đó là về lưu trữ [DATA URI ] (http://en.wikipedia.org/wiki/Data_URI_scheme) thay vì byte []/blob thường được lưu trữ. –

Trả lời

3

Không có câu trả lời thực và ít thông tin được tìm thấy Binging với Google, tôi đã thực hiện kiểm tra định thời đơn giản chèn 20K bản ghi (ít hơn vô nghĩa) và chọn một bản ghi tại một thời điểm trong vòng lặp. Tôi đã sử dụng PetaPoco để truy cập DB. Nếu bạn tìm thấy một cái gì đó ra khỏi đó hoặc có một số thông tin, xin vui lòng chia sẻ. Tôi nghĩ rằng đây sẽ là một kịch bản phổ biến hơn với URI DATA nhận được nhiều sự chú ý hơn.

URI được chèn và chọn liên tục nhanh hơn. Nhanh hơn tương đối bởi vì nó được đo bằng mili giây. Đây không phải là một yếu tố - đó là bất cứ điều gì dễ dàng hơn.

Theo cách hiển thị cho khách hàng. Tôi đã sử dụng hai phương thức, một ImageResult (ActionResult tùy chỉnh trả về một hình ảnh) từ một phương thức hành động MVC (đây là một hình ảnh trong câu trả lời http) và trả về chuỗi URI và sử dụng nó làm hình ảnh SRC (ví dụ: src = "@ Model.Uri "). Một lần nữa, chỉ là một sự khác biệt. Kết quả sử dụng công cụ dev Chrome:

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

Tuy nhiên, tôi đã thông báo rằng phiên bản ImageResult (byte []) sẽ tự động được lưu trữ bởi trình duyệt vì nó là một hình ảnh cho tất cả các tính năng. Phiên bản DATA URI không tự động lưu vào bộ nhớ cache của trình duyệt.

Từ thử nghiệm thô sơ này, byte [] là cách để đi vì bộ nhớ đệm tự động của trình duyệt và tất cả các kết quả khác bằng nhau.

My Set Up: i7, 8GB Ram, SSD, SQL Server 2012, IIS nhanh

lợi ích Caching là một cái gì đó tôi nhận thấy không có thiết lập. Có, tôi chắc chắn một người có thể quản lý tiêu đề HTTP, etag, lưu vào bộ nhớ cache đầu ra, v.v.

Các vấn đề liên quan