2010-02-17 45 views
14

Ứng dụng của chúng tôi sẽ phục vụ một số lượng lớn các hình ảnh có kích thước nhỏ (kích thước khoảng 6-12KB) thông qua HTTP. Tôi đã được yêu cầu điều tra xem liệu việc sử dụng kho lưu trữ dữ liệu NoSQL có phải là một giải pháp khả thi cho việc lưu trữ dữ liệu hay không. Lý tưởng nhất, chúng tôi muốn kho dữ liệu của mình bị lỗi và phân phối.Lưu trữ hình ảnh trong các cửa hàng NoSQL

Một ý tưởng hay là lưu trữ các đốm màu trong các cửa hàng NoSQL và cái nào tốt cho nó? Ngoài ra, NoSQL là một giải pháp tốt cho vấn đề của chúng tôi, hay chúng tôi sẽ phục vụ lưu trữ hình ảnh trong hệ thống tệp và phục vụ trực tiếp từ máy chủ web (như một sang một bên, CDN hiện không phải là lựa chọn cho chúng tôi)?

Trả lời

9

Mongo DB sẽ hoạt động tốt cho bạn. Tôi đã không sử dụng nó cho các đốm màu được nêu ra, nhưng đây là một FLOSS hàng tuần tốt đẹp podcast interview with Michael Dirolf từ nhóm Mongo DB, nơi ông giải quyết trường hợp sử dụng này.

+0

Cảm ơn, tôi sẽ kiểm tra nó ra –

+0

bạn có thể bỏ qua 13 phút đầu tiên của podcast đó :) –

8

Có hay không lưu trữ hình ảnh trong DB hoặc hệ thống tệp đôi khi là một trong những loại cuộc tranh luận "chiến tranh thánh" đó; mỗi bên cảm thấy cách làm việc của họ là một cách đúng đắn. Nói chung:

Để lưu trong DB:

  • Dễ quản lý back-up/sao chép tất cả mọi thứ cùng một lúc trong một lần diễn ra.
  • Giúp thống nhất và thống nhất dữ liệu của bạn. Bạn có thể thiết lập trường BLOB để không cho phép NULL, nhưng bạn sẽ không thể ngăn chặn một tệp bên ngoài bị xóa. (Mặc dù điều này không áp dụng cho NoSQL vì không có các ràng buộc truyền thống).

Để lưu trữ trên hệ thống tập tin:

  • Một hệ thống tập tin được thiết kế để phục vụ tập tin. Hãy để nó làm công việc của nó.
  • DB thường là nút cổ chai của bạn trong một ứng dụng. Dù tải bạn có thể cất cánh thì tốt hơn.
  • Dễ dàng hơn để phân phát trên CDN (bạn đã đề cập không áp dụng được trong trường hợp của bạn).

Tôi có xu hướng giảm xuống ở phía bên của hệ thống tệp vì nó có quy mô tốt hơn nhiều. Nhưng tùy thuộc vào quy mô dự án của bạn, lựa chọn nào có khả năng hoạt động tốt. Với NoSQL, sự khác biệt thậm chí còn ít rõ ràng hơn.

+2

Câu hỏi đặt ra là lưu trữ các đốm màu trong cửa hàng khóa-giá trị được phân phối. Một hệ thống tập tin không phải là lỗi khoan dung hoặc phân phối vì vậy không có so sánh thực sự. –

+2

Tùy thuộc vào hệ thống tệp, nó có thể vừa chịu lỗi vừa phân phối - xem những thứ như MogileFS, Hadoop DFS, GlusterFS. –

+1

Đây không phải là hệ thống tệp khá. –

3

Vâng CDN sẽ là lựa chọn hiển nhiên. Kể từ khi đó, tôi muốn đặt cược tốt nhất của bạn cho khả năng chịu lỗi và cân bằng tải sẽ là trung tâm dữ liệu riêng của bạn (bất kể điều đó có ý nghĩa gì đối với bạn) sau 2 hoặc nhiều cân bằng tải như F5. Đây sẽ là hệ thống quản lý dễ dàng nhất của bạn và bạn có thể nhận được nhiều khả năng chịu lỗi khi ngân sách phần cứng của bạn cho phép. Bạn sẽ không cần bất kỳ chuyên môn phần mềm mới nào, chỉ là XCOPY.

Để khoan dung sai sự thật, bạn sẽ cần sự phân tán địa lý hoặc bạn phải chịu bất kỳ ai có backhoe.

(Gravatars?)

+1

CDN cộng với một NoSQL db là nguồn gốc là một sự kết hợp tuyệt vời. Tôi đã thấy điều này được thực hiện một vài lần với MongoDB (và mô-đun GridFS của nó) thành công. –

2

Nếu bạn đang ở trong một môi trường Python, hãy xem xét các mô-đun y_serial: http://yserial.sourceforge.net/

Trong dưới 10 phút, bạn sẽ có thể lưu trữ và truy cập vào hình ảnh của bạn (trên thực tế, bất kỳ đối tượng Python tùy ý bao gồm các trang web) - ở dạng nén; NoSQL.

3

Tôi đang tìm một giải pháp tương tự cho một dự án cá nhân và đã xem qua Riak, với tôi, có vẻ như là một giải pháp tuyệt vời cho vấn đề này. Về cơ bản, nó phân phối một số lượng nhất định các bản sao của mỗi tập tin cho các máy chủ trong mạng. Nó được thiết kế sao cho một máy chủ đến hoặc đi không phải là vấn đề lớn. Tất cả các bản sao trên một máy chủ lá được phân phối trong số những người khác.

Với cấu hình phù hợp, Riak có thể xử lý toàn bộ trung tâm dữ liệu bị lỗi.

Ồ và có hỗ trợ thương mại.

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