Enforce Data Consistency with Embedding
Thực thi tính nhất quán dữ liệu bằng cách nhúng
If your schema stores the same data in multiple collections, you can
embed related data to remove the duplication. The updated, denormalized
schema keeps data consistent by maintaining data values in a single
location.
Nếu lược đồ của bạn lưu trữ cùng một dữ liệu trong nhiều bộ sưu tập, bạn có thể nhúng dữ liệu liên quan để loại bỏ sự trùng lặp. Lược đồ được cập nhật, không chuẩn hóa giữ cho dữ liệu nhất quán bằng cách duy trì các giá trị dữ liệu ở một vị trí duy nhất.
Embedding related data simplifies your schema and ensures that the user
always reads the most current data. However, embedding may not be the
best choice to represent complex relationships like many-to-many.
Việc nhúng dữ liệu liên quan sẽ đơn giản hóa lược đồ của bạn và đảm bảo rằng người dùng luôn đọc dữ liệu mới nhất. Tuy nhiên, việc nhúng có thể không phải là lựa chọn tốt nhất để thể hiện các mối quan hệ phức tạp như nhiều-nhiều.
About this Task Giới thiệu về nhiệm vụ này
How to optimally embed related data depends on the queries run by your
application. When you embed data in a single collection, consider the
indexes that enable performant queries and structure your schema to
allow for efficient, logical indexes.
Cách nhúng tối ưu dữ liệu liên quan tùy thuộc vào các truy vấn do ứng dụng của bạn chạy. Khi bạn nhúng dữ liệu vào một bộ sưu tập, hãy xem xét các chỉ mục cho phép truy vấn hiệu quả và cấu trúc lược đồ của bạn để cho phép lập chỉ mục hợp lý, hiệu quả.
To compare the benefits of embedding documents and references, see
Embedded Data Versus References.
Để so sánh lợi ích của việc nhúng tài liệu và tài liệu tham khảo, hãy xem Dữ liệu nhúng và Tài liệu tham khảo.
Before you Begin Trước khi bạn bắt đầu
Review the different methods to enforce data consistency to ensure that
embedding is the best approach for your application. For more information,
see Data Consistency.
Xem lại các phương pháp khác nhau để thực thi tính nhất quán của dữ liệu nhằm đảm bảo rằng việc nhúng là phương pháp tốt nhất cho ứng dụng của bạn. Để biết thêm thông tin, hãy xem Tính nhất quán của dữ liệu.
Updating how data is stored in your database can impact existing indexes
and queries. When you update your schema, also update your application's
indexes and queries to account for the schema changes.
Việc cập nhật cách lưu trữ dữ liệu trong cơ sở dữ liệu của bạn có thể tác động đến các chỉ mục và truy vấn hiện có. Khi bạn cập nhật lược đồ, hãy cập nhật cả chỉ mục và truy vấn của ứng dụng để tính đến những thay đổi trong lược đồ.
The following example enforces data consistency in an e-commerce
application. In the initial schema, product information is duplicated in
the products
and sellers
collections. The sellerId
field in
the products
collection is a reference to to the sellers
collection, and links
the data together.
Ví dụ sau đây thực thi tính nhất quán của dữ liệu trong ứng dụng thương mại điện tử. Trong lược đồ ban đầu, thông tin sản phẩm được sao chép trong bộ sưu tập products
và sellers
. Trường sellerId
trong bộ sưu tập products
là tham chiếu đến bộ sưu tập sellers
và liên kết dữ liệu với nhau.
// products collection [ { _id: 111, sellerId: 456, name: "sweater", price: 30, rating: 4.9, color: "green" }, { _id: 222, sellerId: 456, name: "t-shirt", price: 10, rating: 4.2, color: "blue" }, { _id: 333, sellerId: 456, name: "vest", price: 20, rating: 4.7, color: "red" } ]
// sellers collection [ { _id: 456, name: "Cool Clothes Co", location: { address: "21643 Andreane Shores", state: "Ohio", country: "United States" }, phone: "567-555-0105", products: [ { id: 111, name: "sweater", price: 30 }, { id: 222, name: "t-shirt", price: 10 }, { id: 333 name: "vest", price: 20 } ] } ]
Steps
To denormalize the schema and enforce consistency, embed the product
information inside of the sellers
collection:
db.sellers.insertOne( { _id: 456, name: "Cool Clothes Co", location: { address: "21643 Andreane Shores", state: "Ohio", country: "United States" }, phone: "567-555-0105", products: [ { id: 111, name: "sweater", price: 30, rating: 4.9, color: "green" }, { id: 222, name: "t-shirt", price: 10, rating: 4.2, color: "blue" }, { id: 333, name: "vest", price: 20, rating: 4.7, color: "red" } ] } )
Results
The updated schema returns all product information when a user queries for a particular seller. The updated schema does not require additional logic or maintenance to keep data consistent because data is denormalized in a single collection.
Next Steps
After you restructure your schema, you can create indexes to support
common queries. For example, if users often query for products by color,
you can create an index on the products.color
field:
db.sellers.createIndex( { "products.color": 1 } )