2011-01-05 24 views
5

Tôi khá mới đối với MongoDB và NoSQL nói chung. Tôi có một chủ đề bộ sưu tập, trong đó mỗi chủ đề có thể có nhiều nhận xét. Mỗi nhận xét sẽ có siêu dữ liệu và những gì không làm cho bộ sưu tập Nhận xét hữu ích.MongoDB: Nếu bạn vẫn cung cấp ID liên kết đến các bộ sưu tập khác hoặc chỉ bao gồm các bộ sưu tập?

Trong MySQL, tôi sẽ sử dụng khóa ngoài để liên kết tới bảng Nhận xét, nhưng trong NoSQL, tôi chỉ cần bao gồm bộ sưu tập Nhận xét trong bộ sưu tập Chủ đề hoặc có trong bộ sưu tập và liên kết riêng biệt theo id không?

Cảm ơn! Matt

+0

bản sao có thể có của [mối quan hệ MongoDB cho các đối tượng] (http://stackoverflow.com/questions/4253496/mongodb-relationships-for-objects) –

Trả lời

8

Điều đó tùy thuộc.

Tùy thuộc vào số lượng của từng loại đối tượng bạn mong muốn có. Bạn có thể đặt tất cả chúng vào một tài liệu MongoDB duy nhất cho một Chủ đề cụ thể không? Chắc là không.

Tùy thuộc vào mối quan hệ - bạn có mối quan hệ một hoặc nhiều hay nhiều hay không? Nếu đó là một-nhiều và số lượng các thực thể liên quan là nhỏ, bạn có thể chọn để nhúng chúng vào một IList trên một tài liệu. Nếu đó là nhiều - nhiều, bạn có thể chọn sử dụng một mối quan hệ truyền thống hơn hoặc bạn có thể chọn nhúng cả hai bên là những người theo chủ nghĩa ILists.

Bạn vẫn có thể lập mô hình các mối quan hệ trong MongoDB với các bộ sưu tập riêng biệt NHƯNG không có tham gia trong cơ sở dữ liệu, do đó bạn phải làm điều đó trong mã. Tải một chủ đề và sau đó tải các ý kiến ​​cho nó có thể là tốt từ một quan điểm hiệu suất.

lời khuyên khác:

Với MongoDB bạn có thể chỉ mục VÀO mảng trên các tài liệu. Vì vậy, đừng nghĩ về một chỉ mục như là một chỉ mục trên một trường đơn giản trên một tài liệu (như SQL). Bạn có thể sử dụng, ví dụ: Bộ sưu tập thẻ trên Chủ đề và chỉ mục vào thẻ. (Xem http://www.mongodb.org/display/DOCS/Indexes#Indexes-Arrays)

Khi bạn truy xuất hoặc ghi dữ liệu, bạn có thể đọc một phần và viết một phần của bất kỳ tài liệu nào. (xem http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields)

Và cuối cùng, khi bạn không thể biết cách lấy những gì bạn muốn bằng bộ sưu tập và chỉ mục, bạn có thể đạt được nó bằng cách sử dụng bản đồ giảm. Ví dụ: để tìm tất cả các thẻ hiện đang được sử dụng được sắp xếp theo tần suất sử dụng, bạn sẽ ánh xạ từng Chủ đề phát ra các thẻ được sử dụng trong đó và sau đó bạn sẽ giảm tập hợp đó để có kết quả mong muốn. Sau đó bạn có thể lưu trữ kết quả của bản đồ đó làm giảm vĩnh viễn và chỉ cập nhật nó khi bạn cần.

Đó là một sự thay đổi ý nghĩa khá đáng kể từ suy nghĩ quan hệ nhưng nó đáng giá nếu bạn cần khả năng mở rộng và tính linh hoạt mà cách tiếp cận NOSQL mang lại.

2

Ngoài ra, hãy xem tài liệu Thiết kế lược đồ (http://www.mongodb.org/display/DOCS/Schema+Design). Ngoài ra còn có một số video/slide của một số bài thuyết trình 10Gen về thiết kế lược đồ được liên kết trên trang web Mongo. Xem http://www.mongodb.org/pages/viewpage.action?pageId=17137769 để biết tổng quan.

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