6 quy tắc ngón tay cái cho thiết kế lược đồ mongodb phần 1

Điều này giả định rằng id người dùng sẽ là duy nhất và bạn không cần phải tìm kiếm các nhận xét cụ thể

Mặt khác, tốt nhất là căn chỉnh thiết kế lược đồ của bạn với cách bạn sẽ sử dụng cơ sở dữ liệu của mình. Dưới đây là một số liên kết để giúp bạn bắt đầu

Tôi mới sử dụng mongodb. Chuỗi json của tôi như sau. Tôi muốn sử dụng 14691,14692 làm khóa chính hoặc mã định danh duy nhất thay vì sử dụng objectid làm mã định danh duy nhất. Làm cách nào để tôi đạt được điều này bằng cách sử dụng mongodb. Xin hãy giúp tôi với

"ViewAvailableAttributes". ["mèo","chó","dê","khỉ"],

"ViewSelectedAttributes". ["mèo","chó","dê","khỉ"],

"ViewMandatoryAttributes". ["mèo","chó","dê","khỉ"],

"Thuộc tính tải lên có sẵn". ["mèo","chó","dê","khỉ"],

"UploadSelectedAttributes". ["mèo","chó","dê","khỉ"],

"Thuộc tính bắt buộc tải lên". ["mèo","chó","dê","khỉ"],

"Tải xuống Thuộc tính có sẵn". ["mèo","chó","dê","khỉ"],

"Tải xuốngSelectedAttributes". ["mèo","chó","dê","khỉ"],

"Thuộc tính bắt buộc tải xuống". ["mèo","chó","dê","khỉ"]

"ViewAvailableAttributes". ["sách","bóng","bút","khỉ"],

"ViewSelectedAttributes". ["sách","bóng","bút","khỉ"],

"ViewMandatoryAttributes". ["sách","bóng","bút","khỉ"],

"Thuộc tính tải lên có sẵn". ["sách","bóng","bút","khỉ"],

"UploadSelectedAttributes". ["sách","bóng","bút","khỉ"],

"Thuộc tính bắt buộc tải lên". ["sách","bóng","bút","khỉ"],

"Tải xuống Thuộc tính có sẵn". ["sách","bóng","bút","khỉ"],

"Tải xuốngSelectedAttributes". ["sách","bóng","bút","khỉ"],

"Thuộc tính bắt buộc tải xuống". ["sách","bóng","bút","khỉ"]

Bất kỳ máy chủ nhất định nào cũng có thể tạo đủ thông báo để làm tràn kích thước tài liệu

> db.parts.findOne()
{
    _id : ObjectID('AAAA'),
    partno : '123-aff-456',
    name : '#4 grommet',
    qty: 94,
    cost: 0.94,
    price: 3.99
}

> db.products.findOne()
{
    name : 'left-handed smoke shifter',
    manufacturer : 'Acme Corp',
    catalog_number: 1234,
    parts : [     // array of references to Part documents
        ObjectID('AAAA'),    // reference to the #4 grommet above
        ObjectID('F17C'),    // reference to a different Part
        ObjectID('D2AA'),
        // etc
    ]
}
2, ngay cả khi tất cả những gì bạn lưu trữ trong mảng là ObjectID

Đây là trường hợp sử dụng cổ điển cho

> db.parts.findOne()
{
    _id : ObjectID('AAAA'),
    partno : '123-aff-456',
    name : '#4 grommet',
    qty: 94,
    cost: 0.94,
    price: 3.99
}

> db.products.findOne()
{
    name : 'left-handed smoke shifter',
    manufacturer : 'Acme Corp',
    catalog_number: 1234,
    parts : [     // array of references to Part documents
        ObjectID('AAAA'),    // reference to the #4 grommet above
        ObjectID('F17C'),    // reference to a different Part
        ObjectID('D2AA'),
        // etc
    ]
}
3 – bạn sẽ có một tài liệu cho máy chủ, sau đó lưu trữ ObjectID của máy chủ trong tài liệu cho thông điệp tường trình

> db.hosts.findOne()
{
    _id : ObjectID('AAAB'),
    name : 'goofy.example.com',
    ipaddr : '127.66.66.66'
}

> db.logmsg.findOne()
{
    time : ISODate("2014-03-28T09:42:41.382Z"),
    message : 'cpu is on fire!',
    host: ObjectID('AAAB')       // Reference to the Host document
}

Tham khảo hai chiều

Thiết kế này có tất cả các ưu điểm và nhược điểm của lược đồ “Một-nhiều”, nhưng có một số bổ sung

sử dụng thiết kế lược đồ này có nghĩa là không còn có thể gán lại Nhiệm vụ cho Người mới bằng một bản cập nhật nguyên tử duy nhất

db.person.findOne()
{
    _id: ObjectID("AAF1"),
    name: "Kate Monster",
    tasks [     // array of references to Task documents
        ObjectID("ADF9"),
        ObjectID("AE02"),
        ObjectID("AE73")
        // etc
    ]
}

db.tasks.findOne()
{
    _id: ObjectID("ADF9"),
    description: "Write lesson plan",
    due_date:  ISODate("2014-04-01"),
    owner: ObjectID("AAF1")     // Reference to Person document
}

không chuẩn hóa

  • Không chuẩn hóa giúp bạn tiết kiệm tra cứu dữ liệu không chuẩn hóa với chi phí cập nhật đắt hơn
  • Không chuẩn hóa chỉ có ý nghĩa khi có tỷ lệ đọc các bản cập nhật cao
  • Cũng lưu ý rằng nếu bạn không chuẩn hóa một trường, bạn sẽ mất khả năng thực hiện các cập nhật nguyên tử và riêng lẻ trên trường đó. Cũng giống như ví dụ tham chiếu hai chiều ở trên

Mối quan hệ một-nhiều

Không chuẩn hóa từ Nhiều -> Một

> db.products.findOne()
{
    name : 'left-handed smoke shifter',
    manufacturer : 'Acme Corp',
    catalog_number: 1234,
    parts : [
        {id : ObjectID('AAAA'), name : '#4 grommet' },         // Part name is denormalized
        {id: ObjectID('F17C'), name : 'fan blade assembly' },
        {id: ObjectID('D2AA'), name : 'power switch' },
        // etc
    ]
}

Mặc dù giúp lấy tên bộ phận dễ dàng hơn, nhưng điều này sẽ chỉ thêm một chút công việc phía máy khách vào phép nối cấp ứng dụng

// Fetch the product document
> product = db.products.findOne({catalog_number: 1234});
  // Create an array of ObjectID()s containing *just* the part numbers
> part_ids = product.parts.map(function(doc) { return doc.id } );
  // Fetch all the Parts that are linked to this Product
> product_parts = db.parts.find({_id: { $in : part_ids} } ).toArray() ;

Không chuẩn hóa từ Một -> Nhiều

> db.parts.findOne()
{
    _id : ObjectID('AAAA'),
    partno : '123-aff-456',
    name : '#4 grommet',
    product_name : 'left-handed smoke shifter',   // Denormalized from the ‘Product’ document
    product_catalog_number: 1234,                     // Ditto
    qty: 94,
    cost: 0.94,
    price: 3.99
}

Mối quan hệ một-to-Squillions

Điều này hoạt động theo một trong hai cách

  • đưa thông tin về phía “một” (từ tài liệu 'hosts’) vào phía “squillions” (các mục nhật ký)
  • đưa thông tin tóm tắt từ phía “squillions” vào phía “one”

> db.logmsg.findOne()
{
    time : ISODate("2014-03-28T09:42:41.382Z"),
    message : 'cpu is on fire!',
    ipaddr : '127.66.66.66',  // from hosts
    host: ObjectID('AAAB')
}

// denormalize it ALL into the “squillions” side and get rid of the “one” collection altogether:
> db.logmsg.findOne()
{
    time : ISODate("2014-03-28T09:42:41.382Z"),
    message : 'cpu is on fire!',
    ipaddr : '127.66.66.66',        // from hosts
    hostname : 'goofy.example.com', // from hosts
}

Mặt khác, bạn cũng có thể không chuẩn hóa thành bên “một”. Giả sử bạn muốn giữ 1000 tin nhắn cuối cùng từ máy chủ lưu trữ trong tài liệu 'hosts'

Những điểm chúng ta nên xem xét khi tạo lược đồ trong MongoDB là gì?

Hai ứng dụng khác nhau sử dụng cùng một dữ liệu chính xác có thể có các lược đồ rất khác nhau nếu các ứng dụng được sử dụng khác nhau. Khi thiết kế một lược đồ, chúng tôi muốn xem xét những điều sau đây. Lưu trữ dữ liệu. Cung cấp hiệu suất truy vấn tốt. .
Không có quy trình chính thức
Không có thuật toán
Không có quy tắc

Điều nào sau đây khi thiết kế lược đồ trong MongoDB?

Những cân nhắc khi thiết kế Schema trong MongoDB . Mặt khác, hãy tách chúng ra (nhưng đảm bảo rằng không cần tham gia). Sao chép dữ liệu (nhưng có giới hạn) vì dung lượng đĩa rẻ so với thời gian tính toán. Combine objects into one document if you will use them together. Otherwise separate them (but make sure there should not be need of joins). Duplicate the data (but limited) because disk space is cheap as compare to compute time.

Các khái niệm chính của MongoDB là gì?

Dưới đây là một số khái niệm và thuật ngữ chính bạn sẽ gặp khi tìm hiểu về MongoDB. .
Các tài liệu. Các bản ghi trong cơ sở dữ liệu tài liệu
bộ sưu tập. Nhóm tài liệu
Bộ bản sao. Đảm bảo tính sẵn sàng cao
sharding. Khả năng mở rộng để xử lý tăng trưởng dữ liệu lớn
chỉ mục. Cải thiện tốc độ truy vấn

Định dạng nào sau đây được hỗ trợ bởi MongoDB 1 điểm?

Giải thích. MongoDB hỗ trợ định dạng JSON so với XML.