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

Cách đối phó với các mối quan hệ khi sử dụng mongodb

CHỈNH SỬA:

Vừa tìm thấy câu trả lời của Brendan McAdams, chàng trai đến từ 10gen, người rõ ràng là có thẩm quyền hơn tôi và anh ấy khuyên bạn nên nhúng tài liệu.

văn bản cũ hơn:

Cách đầu tiên là đưa vào từng ObjectID nhận xét của người dùng mà họ thuộc về theo cách thủ công.

comment: { text : "...", 
           date: "...", 
           user: ObjectId("4b866f08234ae01d21d89604"),
           votes: 7 }

Cách thứ hai và cách thông minh là sử dụng DBRefs

chúng tôi thêm I / O bổ sung vào đĩa của chúng tôi, làm mất hiệu suất đúng không? (tôi không chắc điều này hoạt động nội bộ như thế nào) do đó chúng ta cần tránh liên kết nếu có thể, phải không?

Có - sẽ có một truy vấn nữa, nhưng trình điều khiển sẽ làm điều đó cho bạn - bạn có thể coi đây là một loại đường cú pháp. Nó có ảnh hưởng đến hiệu suất không? Trên thực tế, nó cũng phụ thuộc :) Một trong những lý do tại sao Mongo nhanh như vậy là nó đang sử dụng tệp được ánh xạ bộ nhớ và mongo hãy cố gắng tốt nhất là giữ tất cả các bộ đang hoạt động (cộng với các chỉ mục) trực tiếp trong RAM. Và cứ sau 60 giây (theo mặc định), nó sẽ đồng bộ hóa ảnh chụp nhanh RAM với tệp dựa trên đĩa.
Khi tôi đang nói working set , Ý tôi là những thứ bạn đang làm việc:bạn có thể có ba bộ sưu tập - foo , thanh , baz , nhưng nếu bây giờ bạn chỉ làm việc với foo và bar, chúng phải được nạp vào ram, trong khi baz vẫn nằm trên đĩa bị bỏ rơi. Hơn nữa, các tệp được ánh xạ bộ nhớ chỉ cho phép tải một phần của bộ sưu tập. Vì vậy, nếu bạn đang xây dựng một cái gì đó như engadget hoặc techcrunch, khả năng cao là tập hợp hoạt động sẽ là nhận xét trong vài ngày qua và các trang cũ sẽ được phục hồi ít thường xuyên hơn (nhận xét sẽ được tạo vào bộ nhớ theo yêu cầu), vì vậy nó không ' t ảnh hưởng đáng kể đến hiệu suất.

Tóm lại:miễn là bạn tiếp tục làm việc được đặt trong bộ nhớ (bạn có thể nghĩ rằng đó là bộ nhớ đệm đọc / ghi), việc tìm nạp những thứ đó là siêu nhanh và một truy vấn nữa sẽ không thành vấn đề. Nếu bạn làm việc với một phần dữ liệu không vừa với bộ nhớ, sẽ có tốc độ xuống cấp , nhưng bây giờ tôi không hoàn cảnh của bạn - điều đó có thể chấp nhận được, vì vậy trong cả hai trường hợp, tôi có xu hướng chọn sử dụng liên kết.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Chơi:Cách chuyển đổi JSON trong khi ghi / đọc nó sang / từ MongoDB

  2. Cách chiếu các trường có điều kiện trong khi tổng hợp trong mongodb

  3. Có thể lấy các trường theo thứ tự chiếu trong mongo Aggregation Frameworks không

  4. Bản cập nhật Mongoose 'không thể sử dụng phần (..) để duyệt qua phần tử

  5. MongoDB đặt giới hạn thành $ inc