Phục vụ hình ảnh ra khỏi máy chủ SQL so với hệ thống tệp so với S3, v.v.


12

Ứng dụng của tôi (cổ điển asp yay!) Có khoảng 2,1 triệu hình ảnh @ 25 GB và chỉ đại diện cho 90 ngày dữ liệu và tôi muốn đi tối thiểu 365. Tôi cần phải kiểm soát chúng và đang xem xét tất cả các lựa chọn. Suy nghĩ của bạn về ưu và nhược điểm của các thực hành sau:

  • Ưu điểm của SQL Server: Dễ sao lưu Nhược điểm: Hiệu suất?
  • Ưu điểm của hệ thống tệp: Tốc độ Nhược điểm: Dự phòng, Sao lưu chậm (hiện đang nghiên cứu thực hiện Sao lưu toàn bộ tổng hợp thay vào đó có thể giúp việc đó tốt hơn)
  • S3 và tương tự Ưu điểm: Băng thông được chuyển từ trung tâm dữ liệu của tôi sang Amazon, lưu trữ hầu như không giới hạn. Nhược điểm: Chi phí, Phân tích chi phí rất khó (ước tính 80% băng thông của tôi là hình ảnh cho mục đích ROI), Khó khăn / tốn kém cho các nhà cung cấp dịch vụ swtich nên trở nên cần thiết

Có ai khác đối phó với thử thách hình ảnh nhiều triệu người và bạn đã giải quyết nó như thế nào?


4
Không không không không không không lưu trữ dữ liệu hình ảnh (đốm màu) trong cơ sở dữ liệu. Chúng tôi đã phạm sai lầm này nhiều năm trước và đã trả tiền cho nó kể từ đó. Cơ sở dữ liệu là tuyệt vời cho siêu dữ liệu mặc dù.
Đánh dấu Henderson

Xem bài viết của tôi về kiểu dữ liệu FILESTREAM - nó có thể thay đổi suy nghĩ của bạn.
Dan Diplo

Câu trả lời:


6

Chúng tôi không có hàng triệu hình ảnh, nhưng có hàng trăm nghìn hình ảnh và chúng tôi sử dụng phương pháp lai - mysql cho siêu dữ liệu, hình ảnh được lưu trữ trên đĩa cục bộ để sao lưu và được đẩy lên Amazon s3 nơi chúng được phục vụ cho người dùng. Chúng tôi không gặp rắc rối với Amazon và tính khả dụng. Di chuyển đến đám mây là trong kế hoạch của chúng tôi, chỉ cần tìm thời gian.

Thảo luận này có thể hữu ích cho bạn trong quyết định của bạn:
http://ask.metafilter.com/59635/Millions-of-images

Tôi sẽ đi với siêu dữ liệu trong máy chủ SQL và các tệp trên hệ thống tệp (hoặc s3 hoặc cloudfront). Nhưng câu trả lời tốt nhất phụ thuộc vào một số mô hình sử dụng khác:

  • làm hình ảnh thay đổi thường xuyên
  • bạn có thể phục vụ hình ảnh trực tiếp từ hệ thống tập tin (nghĩa là img src="...") hoặc bạn cần chúng để được kiểm soát truy cập. Nếu sau này, thì một giải pháp cơ sở dữ liệu là tốt nhất
  • bạn đang phục vụ một số lượng nhỏ hình ảnh hầu hết thời gian (10% gần đây nhất) hay là sự phân phối tương đối rộng rãi.

Sao lưu cho hàng triệu hình ảnh sẽ trở nên phức tạp cho dù bạn sắp xếp chúng như thế nào - đó chỉ là rất nhiều dữ liệu. Tôi muốn tìm một trường hợp nghiên cứu tốt về sao lưu các đốm màu trong máy chủ SQL trước khi tôi cam kết với giải pháp đó. (Đây là một bài viết có thể hữu ích: http://www.databasejournal.com/features/mssql/article.php/3738276/Storing-Images-and-BLOB-files-in-Query-Server-Part-4.htm )


Sao lưu sẽ phức tạp, nhưng ít nhất với các bản sao lưu cấp tệp, bạn (nói chung) không phải khôi phục toàn bộ bản sao lưu chỉ để khôi phục một bản ghi / hình ảnh. IMO, hệ thống tập tin theo mặc định trừ khi cơ sở dữ liệu cung cấp cho bạn một cái gì đó bạn không thể làm khác. +1
JasonBirch

Hệ thống tệp được thiết kế để lưu trữ tệp - bạn có thể tìm thấy hệ thống tệp được thiết kế để lưu trữ hàng triệu tệp hiệu quả. Cơ sở dữ liệu được thiết kế cho những thứ như siêu dữ liệu của bạn - truy vấn và liên quan. Trừ khi bạn có rất ít hình ảnh, đây có lẽ là cách tốt nhất (không bao gồm các giải pháp đám mây).
dmsnell


3

Bỏ qua những người nói, " Không lưu trữ hình ảnh / dữ liệu nhị phân trong cơ sở dữ liệu " vì họ đang dựa trên câu trả lời của họ về thông tin cũ (giả sử bạn sẽ lưu trữ dữ liệu trong cột loại VarBinary). Hiện tại có thể giảm thiểu các mối lo ngại về hiệu suất khi sử dụng SQL Server để lưu trữ hình ảnh bằng cách sử dụng kiểu dữ liệu FILESTREAM trong SQL Server 2008. Về bản chất, kiểu dữ liệu FILESTREAM cho phép bạn kết hợp dễ dàng lưu trữ dữ liệu trong cơ sở dữ liệu với hiệu suất bạn nhận được từ việc phục vụ các tệp từ kho lưu trữ tệp NTFS.

Để trích dẫn SQL Mag :

"Hỗ trợ FILESTREAM mới của SQL Server 2008 kết hợp lợi ích của việc truy cập LOB trực tiếp từ hệ thống tệp NTFS với tính toàn vẹn tham chiếu và dễ dàng truy cập được cung cấp bởi công cụ cơ sở dữ liệu quan hệ SQL Server."

Để biết thêm thông tin hãy đọc blog này của Ravi S.Maniam trên MSDN .


Bộ lưu trữ FILESTREAM có thay đổi câu chuyện sao lưu / khôi phục không? Đó là hangout lớn nhất của chúng tôi ngay bây giờ ... nếu chúng được lưu trữ trong VarBinary thì đó là câu chuyện tương đối đơn giản.
Webjedi

Không, dữ liệu FILESTREAM được xử lý như mọi dữ liệu khác, do đó, được sao lưu với cơ sở dữ liệu. Để trích dẫn MSDN: "bạn có thể sử dụng tất cả các mô hình sao lưu và phục hồi với dữ liệu FILESTREAM và dữ liệu FILESTREAM được sao lưu với dữ liệu có cấu trúc trong cơ sở dữ liệu." - technet.microsoft.com/en-us/l Library / bb933993.aspx
Dan Diplo

2

Trong khi tôi không đối phó với thử thách hình ảnh nhiều triệu, tôi sẽ sử dụng Amazon CloudFront. Tất cả các tệp được lưu trữ trong nhóm S3 nhưng là máy chủ thông qua hệ thống phân phối nội dung của Amazon. Tôi sẽ không sử dụng S3 một mình.

Lựa chọn thứ hai của tôi sẽ là hệ thống tập tin. Đơn giản và dễ dàng, chỉ có vấn đề là nếu tất cả các tệp này kết thúc trong một thư mục thì toàn bộ sự việc sẽ sụp đổ, khó khăn.

SQL với tôi sẽ không phải là một lựa chọn cho một hệ thống như thế này. Bạn không chỉ bị tính phí khi chuyển băng thông, bạn cũng sẽ bị tính phí cho việc xử lý truy vấn - điều này sẽ phụ thuộc rất nhiều vào việc lưu trữ, nhưng tôi cho rằng bạn đang sử dụng máy chủ chuyên dụng hoặc ít nhất là một vps nơi bạn sẽ bị tính phí cho các chu kỳ. Sau đó, nó sẽ làm chậm toàn bộ trang web của bạn nếu nó sử dụng cùng một cơ sở dữ liệu như máy chủ hình ảnh. Nếu không thì bạn thêm tất cả sự phức tạp này của việc phải quản lý hai kết nối cơ sở dữ liệu.


Trong kịch bản của tôi, hiện tại mọi thứ đều là tiền đề trên các máy chủ của riêng tôi mà tôi sở hữu. Vì vậy, không có chi phí giao dịch mỗi se.
Webjedi

1

Cơ sở dữ liệu được thiết kế cho dữ liệu giao dịch / tính nhất quán và bảo mật.

Các tệp phương tiện (hình ảnh, âm thanh, video) có xu hướng được tạo và có thể bị xóa, nhưng rất hiếm khi được cập nhật. Vì vậy, nhìn chung không cần phải giữ chúng giao dịch phù hợp với dữ liệu khác và cơ sở dữ liệu sẽ không cung cấp cho bạn bất kỳ lợi ích thực sự nào ở đó. Nội dung văn bản có thể là một vấn đề khác.

Miễn là bạn không gặp vấn đề gì với khái niệm ai đó lấy tệp của bạn trực tiếp nếu họ có URL của tệp, thì hệ thống tệp sẽ ổn. Nếu bạn đang chạy một cái gì đó như thư viện ảnh, nơi bạn muốn tính phí trước khi mọi người tải xuống tệp, thì đó có lẽ là một vấn đề khác. Nghĩa là, khi người dùng đã thanh toán, họ có thể nhận được một URL cụ thể cho người dùng đó hoặc chỉ có hiệu lực trong một thời gian ngắn và ứng dụng xử lý nhiều URL hoặc tạm thời trỏ đến cùng một hình ảnh. Điều đó vẫn có thể được xử lý bởi ứng dụng và hệ thống tệp, nhưng cuối cùng bạn vẫn phục vụ phương tiện thông qua ứng dụng chứ không phải là tải xuống tệp thẳng (điều này chủ yếu loại trừ bất kỳ lợi ích nào của S3) và có ít sự khác biệt giữa DB và hệ thống tệp .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.