MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Bộ nhớ cho hàng triệu hình ảnh

Trong cuộc đời mình, tôi đã thực hiện phân phối video với cả S3 (bao gồm các tệp đám mây Rackspace) và MongoDB.

Hầu hết mọi người, nếu không có cái nhìn thứ hai, sẽ sử dụng S3 nhưng tôi nhận thấy rằng cả hai đều có những mặt trái của chúng. Một trong những vấn đề lớn là S3 không phải là CDN, nó thực sự là một bộ nhớ dự phòng trong một khu vực cụ thể không được sao chép sang các khu vực S3 khác, điều này có nghĩa là bạn sẽ cần sử dụng một cái gì đó như mặt tiền đám mây trên đầu S3 để ping hình ảnh của mình vào một loại bộ nhớ cache nếu bạn tải nghiêm trọng trên trang web của mình.

S3 cũng có các tính năng khác làm cho nó ít CDN hơn và nhiều kho lưu trữ hơn. Điều đó đang được nói, đối với các tệp được truy cập không thường xuyên, S3 có tốc độ cực nhanh.

Lớp kép này tất nhiên tạo ra sự phức tạp như bảo trì. Không chỉ vậy, CDN sẽ hoạt động dựa trên TTL và mặc dù nhiều CDN ngày nay có khả năng thanh lọc biên nhưng chúng vẫn không phải là cách chắc chắn 100% để đảm bảo rằng các tệp của bạn không thể truy cập được.

Vì vậy, do quá trình thiết lập và quyền truy cập (có thể có cả quyền truy cập của các tệp cũng nên bị xóa), điều này có thể khá tốn kém nhanh chóng.

Đây là nơi MongoDB có thể thắng lợi. MongoDB, tùy thuộc vào kịch bản của bạn, thực sự có thể rẻ hơn ở đây do thực tế là bạn có thể sử dụng một loạt các phiên bản vi mô trên AWS để thực sự giữ thông tin của bạn, thêm đặt trước phiên bản tại chỗ cho các phiên bản này (rẻ bèo) và tất cả những gì bạn cần là một đĩa lớn trên một máy.

Thật tệ, bạn thậm chí có thể sử dụng S3 để lưu trữ hình ảnh và sau đó MongoDB làm phần mềm thay thế mặt tiền đám mây.

Khi bạn muốn ping hình ảnh đến các vùng khác nhau, bạn chỉ cần tạo một vài phiên bản tại chỗ trong vùng mục tiêu đó và yêu cầu MongoDB sao chép dữ liệu của nó. Bạn cũng có thể thực hiện một số công việc hay ho với bản sao để đảm bảo rằng chỉ các tệp được truy cập thường xuyên từ khu vực đó mới được đặt trong khu vực đó.

Vì vậy, tôi sẽ không loại bỏ MongoDB (hoặc thậm chí cả Cassandra), thay vào đó tôi sẽ làm một bài kiểm tra phương tiện giữa hai người.

Chỉnh sửa

Như một lưu ý thêm về giá S3, nếu bạn lưu trữ các tệp của mình trong RR (Dự phòng giảm) thì giá giảm một nửa (khoảng) khiến S3 rất rẻ, tuy nhiên, bạn vẫn gặp vấn đề là S3 không phải là CDN.

Chỉnh sửa thêm

Vì tôi thực sự chỉ tiếp tục câu trả lời của @cirrus, nên tôi sẽ thực sự đánh giá lại câu hỏi của bạn, câu trả lời đã được trả lời ở trên.

Ví dụ, Youtube thực sự lưu trữ tất cả hình ảnh của họ trên một máy tính duy nhất sau đó được phân phối, vì vậy họ có thể dễ dàng quản lý 200 triệu hình thu nhỏ và ... tốt ... rất nhiều lượt xem mỗi ngày một cách dễ dàng từ hệ thống tệp. Vì vậy, tôi nghĩ rằng lo lắng của bạn về hệ thống tệp được xếp hạng quá mức.

Về việc cơ sở dữ liệu nào tốt hơn ... Tôi không biết, điều đó phụ thuộc vào thử nghiệm của bạn.

Ý tôi là câu trả lời cho vấn đề của bạn phụ thuộc vào tình huống và ngân sách của bạn cũng như phần cứng và tài nguyên của bạn, tức là nếu bạn có máy chủ AWS thì đây sẽ là một câu trả lời hoàn toàn khác so với máy chủ chuyên dụng trong nhà.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách xóa người dùng chưa được xác minh bằng Mongoose và TTL

  2. Bộ sưu tập phân mảnh MongoDB không tái cân bằng

  3. MongoDB $ mẫu

  4. Dữ liệu mùa xuân mongodb xóa một thuộc tính khỏi tài liệu bằng MongoTemplate

  5. Lombok - java.lang.StackOverflowError:null trên phương thức toString