2013-03-24 25 views
7

Tôi đang sử dụng mongodb và tôi muốn lưu trữ một số hình thu nhỏ trong máy chủ của mình. Điều gì là tốt nhất? Sử dụng GridFS hoặc chuyển đổi những hình ảnh đó thành base64 và lưu chúng trực tiếp bên trong một tài liệu.Hình ảnh baseod Mongodb vs gridfs

+0

Kích thước cuối cùng trong K là bao nhiêu? GridFs không phân chia cho đến khi tệp vượt quá 256k. Bạn sẽ sử dụng tệp cuối cùng dưới dạng nhị phân hoặc base64? – WiredPrairie

Trả lời

0

Tôi đề nghị bạn sử dụng GridFS. Với GridFS, bạn có thể tận dụng lợi thế của MongoDB REST API. Vì vậy, sẽ không có quá nóng để truy xuất tài liệu bằng cách sử dụng API MongoDB. REST API sẽ làm tất cả công việc khó khăn và sẽ giúp bạn tiết kiệm thời gian.

3

Điều đó thực sự phụ thuộc vào công nghệ phụ của máy chủ và tùy chọn cá nhân của bạn. 10gen cho thấy bạn sử dụng tài liệu trừ khi bạn đang lưu trữ các tệp lớn hơn giới hạn tài liệu (16MB). Tôi khuyên bạn nên làm bất cứ điều gì dễ dàng hơn với ngôn ngữ bạn đang làm việc. Nếu bạn có các tài liệu khác để mô hình sau khi làm theo tài liệu, nếu không thì hãy cung cấp cho gridFS một ảnh.

3

Như mọi khi có một số (dis) ưu điểm:

Ưu điểm:

  • Ít yêu cầu Cơ sở dữ liệu nếu chỉ có tài liệu + thumbnail là cần thiết.
  • Ít yêu cầu của khách hàng hơn. (Tất nhiên bạn có thể lấy hình thu nhỏ từ GridFS, và đặt chúng trong phản ứng, nhưng điều đó sẽ dẫn đến yêu cầu cơ sở dữ liệu hơn)

Neutral: Yêu cầu

  • lưu trữ đều bình đẳng

Nhược điểm:

  • Bạn không thể sử dụng lại hình thu nhỏ hình ảnh giống nhau trong tài liệu khác một cách dễ dàng, vì không có id để tham chiếu đến. (Đối với chúng tôi, đó không phải là một vấn đề, bởi vì các câu trả lời của máy chủ được gzip nén và bạn có thể không thực sự biết sự khác biệt giữa 1 và 5 hình ảnh tương đương)

Với MongoDB và NoSQL nó là tất cả về biết trường hợp sử dụng của bạn !

  • Nếu rất nhiều của tài liệu của bạn chia sẻ cùng một hình ảnh, bạn nên sử dụng GridFS và chỉ cung cấp các liên kết đến các tập tin, vì 1. chia sẻ dữ liệu là nhiều không gian hiệu quả và 2. khách hàng có thể bộ nhớ cache yêu cầu hình ảnh và chỉ cần truy xuất nó một lần.

  • Nếu khách hàng của bạn sẽ luôn cần hình thu nhỏ, bạn có thể cân nhắc nhúng tệp dưới dạng base64 trong phản hồi. Điều này đặc biệt tốt, nếu 1. hình ảnh không được chia sẻ giữa các tài liệu và/hoặc 2. hình ảnh thay đổi thường xuyên và bộ nhớ đệm là vô ích/không thể.

  • Base64 tất nhiên có nghĩa là lưu lượng truy cập nhiều hơn trên dây, vì nó cần 8 bit để truyền 6 bit. tức là hiệu quả 75%. Điều này tất nhiên chỉ ảnh hưởng đến giao tiếp client-server, bởi vì trong MongoDB bạn luôn có thể lưu trữ dữ liệu của bạn dưới dạng trường nhị phân.

  • Bạn có thích nhiều yêu cầu cơ sở dữ liệu hơn (= sử dụng GridFS) không? Hoặc kích thước dữ liệu/tài liệu lớn hơn trên dây (= được nhúng)?

gì chúng tôi đã làm:

Chúng tôi sử dụng hình thu nhỏ nhúng, ngay cả khi chúng tôi có khả năng có hình ảnh trùng lặp. Sau khi kích hoạt nén gzip trên máy chủ, kích thước truyền máy chủ-máy khách không còn quan trọng nữa. Nhưng như đã nói trước đây, nó là một sự cân bằng: Bây giờ chúng ta có ít yêu cầu của khách hàng hơn và ít yêu cầu cơ sở dữ liệu hơn, nhưng vì việc nhúng làm cho việc lưu trữ hình ảnh không thể được, bây giờ chúng ta có nhiều dữ liệu hơn trên dây.

Kết luận:

Không có một kích thước phù hợp với tất cả các giải pháp.

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