it-swarm-vi.com

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.

Ứ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?

12
Webjedi

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ân phát hình ảnh trực tiếp từ hệ thống tập tin (nghĩa là img src="...") hoặc bạn có cần chúng để được kiểm soát truy cập không. 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 )

6
mooreds

Bỏ qua những người nói, " Đừ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 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 .

3
Dan Diplo

Nếu bạn quyết định lưu trữ chúng trong hệ thống tệp, bạn có thể muốn đọc câu hỏi về ServerFault này cho một số người và đừng: Lưu trữ một triệu hình ảnh trong hệ thống tệp .

3
Mark Henderson

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.

2
Frank Robert Anderson

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 sẽ 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 .

1
Gary