Giới hạn mongodb 16mb

MongoDB có giới hạn kích thước tài liệu là 16mb, đây là cách tốt nhất để khắc phục giới hạn này và tạo cơ sở dữ liệu Mongo có hiệu suất có thể mở rộng


Kích thước tài liệu tối đa MongoDB


Như đã nêu ở trên, trên thực tế có kích thước tài liệu tối đa khi làm việc với MongoDB. Đó là 16mb khá hào phóng và khi sử dụng một lược đồ phù hợp và chiến lược lập chỉ mục/bộ sưu tập được tối ưu hóa, bạn sẽ không bao giờ gặp phải giới hạn này

Vì vậy, khi nào bạn đạt đến giới hạn 16mb này? . Lấy kịch bản này làm ví dụ

Giả sử bạn đang tạo một nền tảng xã hội nơi mọi người có thể đăng và bình luận. Bạn có thể có một lược đồ như thế này


const PostSchema = new Schema({
  caption: { type: String, required: true },
  comments: [
    {
      createdDate: { type: Date, default: Date.now },
      message: { type: String },
    },
  ],
});


Mặc dù lược đồ này có thể phù hợp với nhiều người dùng, nhưng nó sẽ không phù hợp với người nổi tiếng. Mảng nhận xét không bị giới hạn và có thể tăng lên gấp nhiều lần khi mọi người nhận xét, điều này cuối cùng sẽ đạt đến giới hạn tài liệu duy nhất. Là một nhà phát triển, chúng ta có thể làm tốt hơn


Cách tiếp cận tốt nhất để giải quyết giới hạn tài liệu mongodb 16 MB là gì?


Cách tốt nhất để giải quyết giới hạn tài liệu 16mb là điều chỉnh cách dữ liệu của chúng tôi được lưu trữ và tìm nạp. Giới hạn 16mb là một điều rất tốt vì việc tìm nạp một tài liệu lớn như vậy sẽ chậm gửi đến máy chủ. Để giải quyết vấn đề này, chúng ta có thể sử dụng "mẫu tập hợp con", đây là một cách tuyệt vời để thực hiện kiểu thiết kế lược đồ này. Chúng ta có thể cấu trúc lại lược đồ trên thành hai bộ sưu tập như vậy


const PostSchema = new Schema({
  caption: { type: String, required: true },
  firstComments: [
    {
      createdDate: { type: Date, default: Date.now },
      message: { type: String },
    },
  ],
  hasMoreComments: { type: Boolean, default: false },
});

const CommentsSchema = new Schema({
  postId: { type: Schema.Types.ObjectId, ref: "Post" },
  createdDate: { type: Date, default: Date.now },
  message: { type: String },
});


Thông thường, khi người dùng xem một bài đăng, họ chỉ xem rất nhiều bình luận, vì vậy bạn có thể lưu trữ 20 bình luận đầu tiên trên tài liệu bài đăng và sau đó có một bộ sưu tập riêng cho các bình luận tràn. Điều này đảm bảo bạn sẽ không đạt đến giới hạn này và kích thước tài liệu tối đa của bạn vẫn nhỏ


Điều này cũng cho phép bạn sử dụng phân trang với các nhận xét cần được tìm nạp sau này


Chúng tôi có thể tăng kích thước tài liệu trong MongoDB không?


Không, bạn không thể, một lần nữa, đây là một điều tốt vì nếu Mongo cho phép các tài liệu không có giới hạn mb, các ứng dụng sẽ bắt đầu chậm lại khi thu thập dữ liệu được tối ưu hóa kém. Bạn không nên muốn tính năng này vì lý do hiệu suất. Các tài liệu cực lớn cũng sẽ sử dụng quá nhiều băng thông, điều này không tốt cho mọi người


MongoDB có thể lưu trữ các tệp lớn không?


Tôi đã thấy một số người muốn thử và sử dụng MongoDB như một loại lưu trữ đối tượng. ĐỪNG LÀM ĐIỀU NÀY. MongoDB là một cơ sở dữ liệu không phải là một bộ lưu trữ đối tượng. Nếu bạn muốn lưu trữ các tệp, chúng nên được thực hiện bằng cách sử dụng s3 hoặc Backblaze với CDN trên đó như Bunny CDN


Việc phân phối các tệp sẽ nhanh hơn nhiều khi được phân phát từ bộ đệm CDN so với việc trả lại hình ảnh, v.v. từ các truy vấn. Đôi khi, bạn có thể lưu trữ các phiên bản hình ảnh base64 nếu bạn khẳng định rằng tệp sẽ nhỏ và không muốn gặp rắc rối với lưu trữ đối tượng, nhưng tôi thực sự khuyên bạn nên sử dụng lưu trữ đối tượng cho tệp