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

MongoDB và khóa chính tổng hợp

Bạn nên chọn tùy chọn 1.

Lý do chính là bạn nói rằng bạn lo lắng về hiệu suất - sử dụng chỉ mục _id luôn ở đó và đã là duy nhất sẽ cho phép bạn tiết kiệm việc phải duy trì chỉ mục duy nhất thứ hai.

Đối với tùy chọn 1, tôi lo lắng về hiệu suất chèn đối với việc không có các phím tuần tự. Tôi biết điều này có thể giết chết các hệ thống RDBMS truyền thống và tôi đã thấy các dấu hiệu cho thấy điều này cũng có thể đúng trong MongoDB.

Các tùy chọn khác của bạn không tránh được vấn đề này, họ chỉ chuyển nó từ chỉ mục _id sang chỉ mục duy nhất thứ cấp - nhưng bây giờ bạn có hai chỉ mục, một khi được cân bằng phù hợp và một chỉ mục khác là truy cập ngẫu nhiên.

Chỉ có một lý do để đặt câu hỏi cho phương án 1 và đó là nếu bạn định truy cập tài liệu bằng chỉ một hoặc chỉ một giá trị UUID khác. Miễn là bạn luôn cung cấp cả hai giá trị và (phần này rất quan trọng) bạn luôn sắp xếp chúng theo cùng một cách trong tất cả các truy vấn của mình, thì chỉ mục _id sẽ hoạt động hiệu quả cho mục đích đầy đủ của nó.

Giải thích thêm về lý do tại sao bạn phải đảm bảo rằng bạn luôn sắp xếp hai giá trị UUID theo cùng một cách, khi so sánh các tài liệu con { a:1, b:2 } không bằng { b:2, a:1 } - bạn có thể có một bộ sưu tập trong đó hai tài liệu có các giá trị đó cho _id. Vì vậy, nếu bạn lưu trữ _id với trường a trước, thì bạn phải luôn giữ thứ tự đó trong tất cả các tài liệu và truy vấn của mình.

Lưu ý khác là chỉ mục trên _id:1 sẽ có thể sử dụng cho truy vấn:

db.collection.find({_id:{a:1,b:2}}) 

nhưng nó sẽ không có thể sử dụng cho truy vấn

db.collection.find({"_id.a":1, "_id.b":2})


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kết nối MongoDB từ Ứng dụng dựa trên thiết bị di động hoặc trình duyệt

  2. Giữ kết nối cơ sở dữ liệu MongoDB mở

  3. Phân trang dữ liệu mùa xuân mongo

  4. MongoDB - Mang chứng chỉ SSL của riêng bạn

  5. Cách cập nhật giá trị mảng trong Mongoose