2016-01-05 16 views
6

Số MongoDB docs for DBREFs nói:Tại sao tài liệu MongoDB khuyên bạn không nên sử dụng DBREF?

Trừ khi bạn có lý do thuyết phục để sử dụng DBRef, hãy sử dụng tham chiếu thủ công thay thế.

Tại sao? Các DBREF có vẻ dễ sử dụng hơn, vì chúng mã hóa cơ sở dữ liệu và các tên bộ sưu tập, điều này sẽ dẫn đến việc mã hóa ít hơn trong ứng dụng. Ngoài ra, DBREF là a standard format that many drivers understand.

Câu hỏi này có liên quan, nhưng không hoàn toàn giống nhau:

MongoDB - is DBREF necessary?

Câu trả lời cho câu hỏi đó là nhúng/denormalization là một lợi thế để liên kết, nhưng nó không trả lời câu hỏi về việc tại sao thủ công liên kết là thích hợp hơn với DBREF.

+2

Tóm lại, đó là do nó quá mức cần thiết cho hầu hết các tình huống khi bạn lưu trữ cùng một tên bộ sưu tập trong mỗi DBRef đơn lẻ làm kích thước tài liệu của bạn. – JohnnyHK

+0

@JohnnyHK, đó là một điểm tốt, nhưng có thể không áp dụng khi sử dụng công cụ lưu trữ WiredTiger https://www.mongodb.com/blog/post/new-compression-options-mongodb-30 –

Trả lời

1

Đây là kết luận của tất cả những gì tôi đã xem.

Sử dụng DBRef không phải là hoạt động join, nó sẽ tự động truy vấn lần thứ hai trở lên, tùy thuộc vào số lượng DBRef bạn có trong các trường sưu tập này.

Giả sử bạn có một bộ sưu tập mà mô hình của nó có 10 DBRef, bạn tạo truy vấn cho danh sách 10 phần tử của nó và một trong số DBRef này là really needed. Khi bạn truy vấn, Mongodb sẽ tự động chạy các truy vấn 101(1 + 10*10), bất kể bạn cần những số này DBRef hay không. Nếu bạn truy vấn trường này theo cách thủ công, chỉ cần một vài mã hóa và chỉ cần 11(1 + 1*10) truy vấn.

Vì vậy, bạn nói gì?

+0

nghe có vẻ hợp lý, vui lòng đánh dấu đúng miễn là tôi có thể xác minh: bạn có nguồn thông tin này hoặc ví dụ về cách xác minh? –

+0

Vâng, được thử nghiệm ngay bây giờ. Tôi cho phép lược tả trong mongodb và thực hiện truy vấn tất cả cho một Class A, với 3 trường DBRef' của lớp B. Truy vấn trả về 4 A. Trong nhật ký, nó hiển thị 1 truy vấn trong bộ sưu tập A và 12 truy vấn trong bộ sưu tập B. Bạn có thể tự mình thử nghiệm, thật khó để dán thông điệp ghi nhật ký vào nhận xét. – Kroderia

+0

Hơn nữa, trong quá trình ghi nhật ký 'spring-boot-starter-data-mongodb', nó chỉ hiển thị một truy vấn. – Kroderia

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