Objectid mongodb springboot
Một câu hỏi thường gặp của lập trình viên có kinh nghiệm với SQL mới chuyển sang Mongo là làm thế nào để có thể mô hình được quan hệ 1. nhiều. Có rất nhiều cách để có thể làm được điều này. Trong phần đầu của loạt bài này , chúng ta sẽ cùng nhau tìm hiểu 3 cách cơ bản để có thể làm mô hình quan hệ 1. nhiều Với rất nhiều người mới học MongoDB, giải pháp duy nhất họ nghĩ đến khi gặp sự cố "One to N" là nhúng 1 mảng tài liệu con vào trong tài liệu gốc của anh ta. Tuy nhiên điều này không đúng sự thật. Bạn có thể nhúng tài liệu trong MongoDB nhưng đây là 1 mẫu xấu. Bạn không nên làm theo Khi thiết kế lược đồ MongoDB, điều đầu tiên cần quan tâm là định lượng được mối quan hệ. Nghe có vẻ cục bộ so với việc thiết kế lược đồ với SQL. Trong MongoDB, tùy thuộc vào thuộc tính của mối quan hệ "one to many" mà ta có phân ra làm 3 loại khác nhau. "một đến ít", "một đến nhiều", "một đến squillions (rất nhiều)". Với từng loại ta có cách thiết kế lược đồ khác nhau một đến vàiMột ví dụ của "One to few" là việc bạn mô tả địa chỉ của một người. Trong trường hợp này, bạn hoàn toàn có thể sử dụng công việc nhúng dữ liệu. Ở đây ta sẽ để các địa chỉ dưới dạng mảng nằm trong đối tượng Person
Ưu điểm của việc nhúng dữ liệu là bạn chỉ cần 1 câu lệnh truy vấn để có thể lấy đầy đủ thông tin chi tiết bên trong tuy nhiên dữ liệu của bạn phụ thuộc vào người đó nên bạn không thể xử lý nó như 1 thực thể độc lập Ví dụ. Nếu bạn cần lập mô hình một hệ thống quản lý tác vụ. Mỗi người nhận một số lượng nhiệm vụ nhất định. Với cách làm trên khi bạn gặp sự cố truy vấn như. Vui lòng cho biết số lượng nhiệm vụ cần hoàn thành vào ngày mai ?. Giải pháp của bạn sẽ là vào từng người trong hệ thống , kiểm tra từng nhiệm vụ của họ xem có cái nào cần hoàn thành vào ngày mai không , gom hết trả lại. Phức tạp truy vấn phải không. Nào ta cần đến loại thứ 2 rồi một đến nhiềuVí dụ. Bạn có 1 sản phẩm như Smartphone thật là có hạn. Nó bao gồm rất nhiều điều kiện linh hoạt bên trong và các liên kết kiên cố này có thể thay thế được. Số linh kiên ở đây bị giới hạn số lượng vài trăm thôi nhé ( vài lần là thành loại khác rồi). Giải pháp cho vấn đề này là đặt một mảng ObjectID của từng liên kết điều kiện trong dữ liệu của sản phẩm. (Trong ví dụ này, tôi sử dụng ObjectID 2 byte vì nó dễ đọc, trong ứng dụng thực tế bạn hoàn toàn có thể sử dụng ObjectID 12 byte) With each linh kiện đều có một bản dữ liệu riêng
Với mỗi sản phẩm sẽ có một mảng ObjectID để tham chiếu đến các linh kiện tạo nên sản phẩm
Để có thể truy vấn dữ liệu từng linh kiện trong một sản phẩm xác định bạn có thể sử dụng cú pháp sau
Để tối ưu hóa truy vấn, bạn cần đặt chỉ mục cho sản phẩm. danh mục_số". At in the system has been index for the "parts". _id", nên không cần phải tối ưu thằng đó nữa Với loại thứ 2 này, bạn có 2 đối tượng riêng rẽ dễ dàng truy vấn tuy nhiên điều này làm cho việc bạn lấy dữ liệu của anh linh kiện trong một anh sản phẩm chậm hơn một chút. Tất nhiên chẳng bao giờ có giải pháp nào hoàn hảo cả. Thêm vào đó, bạn hoàn toàn có thể xem các sản phẩm thì có nhiều linh kiện giống nhau. Từ đó mối quan hệ "one to Many " thành "Many to Many" rồi
Một đến SquillionsMột ví dụ cho cái cuối cùng của loại này à. Clip. Cái này dành cho những cái gì siêu rác. Ví dụ Ghi nhật ký hệ thống , nơi bạn lưu lại các tin nhắn từ nhiều máy chủ khác nhau. Từng máy chủ tạo ra đủ lượng tin nhắn để kích thước tràn của dữ liệu là 16 MB kể cả khi bạn sử dụng ObjectID. Giải pháp cho vấn đề này là "tham chiếu cha mẹ" (Tạo tham chiếu đến thằng cha). Bạn có một bản dữ liệu cho từng máy chủ, sau đó bạn lưu ObjectJD của máy chủ trên từng tin nhắn
Làm cách nào để lấy toàn bộ thư từ một máy chủ
Tổng kếtNgay cả ở cấp độ cơ bản, rõ ràng là công việc thiết kế Mongo Schema có nhiều vấn đề cần phải suy nghĩ hơn. Có hai câu hỏi bạn cần trả lời khi thiết kế
Bài viết được lược dịch theo bản gốc. http. //Blog. mongodb. org/post/87200945828/6-rules-of-thumb-for-mongodb-schema-design-part-1 |