Ví dụ về mô hình dữ liệu MongoDB

Trong MongoDB, dữ liệu có lược đồ linh hoạt. Nó hoàn toàn khác với cơ sở dữ liệu SQL, nơi bạn phải xác định và khai báo lược đồ của bảng trước khi chèn dữ liệu. Bộ sưu tập MongoDB không thực thi cấu trúc tài liệu

Thách thức chính trong mô hình hóa dữ liệu là cân bằng giữa nhu cầu của ứng dụng, đặc điểm hiệu suất của công cụ cơ sở dữ liệu và các mẫu truy xuất dữ liệu

Hãy xem xét những điều sau đây khi thiết kế lược đồ trong MongoDB

  • Luôn thiết kế lược đồ theo yêu cầu của người dùng
  • Tham gia vào các hoạt động ghi không phải trên các hoạt động đọc
  • Các đối tượng mà bạn muốn sử dụng cùng nhau, nên được kết hợp thành một tài liệu. Nếu không, chúng nên được tách ra (đảm bảo rằng không cần tham gia)
  • Tối ưu hóa lược đồ của bạn cho các trường hợp sử dụng thường xuyên hơn
  • Thực hiện tổng hợp phức tạp trong lược đồ
  • Bạn nên sao chép dữ liệu nhưng trong một giới hạn, vì không gian đĩa rẻ hơn thời gian tính toán

Ví dụ

chúng ta hãy lấy một ví dụ về một khách hàng cần thiết kế cơ sở dữ liệu cho trang web của mình. Trang web của anh ấy có các yêu cầu sau

Mỗi bài đăng là khác biệt (chứa tiêu đề, mô tả và url duy nhất)

Mỗi bài đăng có thể có một hoặc nhiều thẻ

Mỗi bài đăng có tên của nhà xuất bản và tổng số lượt thích

Mỗi bài đăng có thể có 0 hoặc nhiều bình luận và các bình luận phải chứa tên người dùng, tin nhắn, thời gian dữ liệu và lượt thích

QCon London (27-29 tháng 3 năm 2023). Áp dụng các xu hướng mới nổi phù hợp để giải quyết các thách thức kỹ thuật của bạn

Mô hình hóa dữ liệu. Hệ thống thương mại điện tử mẫu với MongoDB

Thích In Dấu trang

06 Tháng sáu 2012 10 phút đọc

qua

  • Christian Kvalheim

Viết cho InfoQ

Tham gia cộng đồng chuyên gia. Tăng khả năng hiển thị của bạn.
Phát triển sự nghiệp của bạn.
Tìm hiểu thêm

Mục tiêu của bài viết này là chứng minh một mô hình dữ liệu cho một ứng dụng thương mại điện tử đơn giản tập trung vào một vài cấu trúc chính có trong các hệ thống thương mại điện tử điển hình. Chúng bao gồm danh mục sản phẩm, giỏ hàng và đơn đặt hàng. Tất cả mã mẫu đều bằng JavaScript sử dụng trình bao MongoDB nhưng bạn có thể điều chỉnh tất cả các phần của mã nguyên mẫu này cho bất kỳ trình điều khiển MongoDB nào có sẵn

Tổng quan

Các hệ thống thương mại điện tử đơn giản là điểm khởi đầu tốt để lập mô hình dữ liệu với cơ sở dữ liệu tài liệu như MongoDB. Các ví dụ này dễ dàng chứng minh các khái niệm cốt lõi về phát triển ứng dụng với MongoDB và chứa một số mẫu mà bạn có thể sử dụng lại trong các miền vấn đề khác. MongoDB cho phép bạn sắp xếp dữ liệu của mình trong "tài liệu BSON" mà bạn có thể coi là tài liệu "JSON đã nhập". Một tài liệu nguyên mẫu đơn giản có thể giống như sau


Ví dụ về mô hình dữ liệu MongoDB

    Nội dung được tài trợ có liên quan

  • Báo cáo đám mây năm 2022

Nhà tài trợ liên quan

Ví dụ về mô hình dữ liệu MongoDB

Gặp gỡ CockroachDB Serverless - Cơ sở dữ liệu SQL phát triển cao nhất trên hành tinh. Bắt đầu miễn phí và mở rộng quy mô khi bạn phát triển. Bắt đầu ngay lập tức

Trong cơ sở dữ liệu quan hệ, bạn có thể diễn đạt điều này bằng hai bảng. Bảng đầu tiên sẽ chứa thông tin chi tiết của người đó như họ và tên, trong khi bảng thứ hai sẽ chứa thông tin chi tiết liên quan đến mọi người, với khóa ngoại trở lại bảng người

MongoDB có một tập hợp phong phú các toán tử truy vấn và toán tử cập nhật cho phép bạn truy cập tài liệu dễ dàng và cũng thực hiện cập nhật nguyên tử trên các trường, mảng hoặc tài liệu con của tài liệu

Yêu cầu

Phiên bản MongoDB đang chạy và shell

 db.products.update({sku: "111445GB3"}, {$set: { categories: ['mobile/15G', 'mobile/fm'] }});
1

Tất cả các ví dụ đều sử dụng trình bao để tránh làm sao lãng mô hình với các chi tiết triển khai ngôn ngữ cụ thể. Bạn có thể triển khai tất cả các ví dụ và mẫu trong bài viết này bằng trình điều khiển cho MongoDB và ngôn ngữ bạn chọn

Những ví dụ này cố tình tránh xử lý lỗi phức tạp hơn để tập trung vào các hoạt động cơ bản như truy cập và sửa đổi dữ liệu

Các thành phần

Simsong vừa ra mắt dòng điện thoại OneDroid hoàn toàn mới của họ trước sự đón nhận háo hức của thị trường tiêu dùng. Nhiệm vụ của bạn là xây dựng một hệ thống thương mại điện tử để tận dụng cơ hội to lớn này và nguồn hàng chúng tôi đã phân bổ

Danh mục sản phẩm

Bước đầu tiên là thiết kế lược đồ cho trang web. Xem xét một lược đồ sản phẩm ban đầu

{
  sku: "111445GB3",
  title: "Simsong One mobile phone",
  description: "The greatest Onedroid phone on the market .....",

  manufacture_details: {
    model_number: "A123X",
    release_date: new ISODate("2012-05-17T08:14:15.656Z")
  },

  shipping_details: {
    weight: 350,
    width: 10,
    height: 10,
    depth: 1
  },

  quantity: 99,

  pricing: {
    price: 1000
  }
}

Mô hình dữ liệu này lưu trữ các chi tiết vật lý như thông tin sản xuất và vận chuyển dưới dạng tài liệu được nhúng trong tài liệu sản phẩm lớn hơn, điều này có ý nghĩa vì các chi tiết vật lý này là các tính năng độc đáo của sản phẩm. Điều này mang lại cho tài liệu "địa phương dữ liệu mạnh", cho phép ánh xạ dễ dàng trong môi trường hướng đối tượng

Để chèn tài liệu vào bộ sưu tập sản phẩm, hãy sử dụng các lệnh sau

mongo    
use ecommerce    
db.products.insert({
  sku: "111445GB3",
  title: "Simsong One mobile phone",
  description: "The greatest Onedroid phone on the market .....",

  manufacture_details: {
    model_number: "A123X",
    release_date: new ISODate("2012-05-17T08:14:15.656Z")
  },

  shipping_details: {
    weight: 350,
    width: 10,
    height: 10,
    depth: 1
  },

  quantity: 99,

  pricing: {
    price: 1000
  }
})

Lệnh đầu tiên (mongo) khởi động bảng điều khiển mongodb và kết nối với bảng điều khiển Mongo DB cục bộ trên localhost và cổng 27017. Cái tiếp theo chọn cơ sở dữ liệu thương mại điện tử (sử dụng thương mại điện tử) và cái thứ ba chèn tài liệu sản phẩm vào bộ sưu tập sản phẩm. Về sau, tất cả các lệnh đều giả sử bạn đang ở trong trình bao Mongo DB bằng cơ sở dữ liệu thương mại điện tử

Mô hình dữ liệu sản phẩm có một mã hàng duy nhất xác định sản phẩm, tiêu đề, mô tả, số lượng hàng trong kho và thông tin giá cả về mặt hàng

Tất cả các sản phẩm có danh mục. Trong trường hợp của Simsong One, đó là điện thoại 15G và cũng có bộ thu FM. Do đó, Sản phẩm này thuộc cả hai loại

 db.products.update({sku: "111445GB3"}, {$set: { categories: ['mobile/15G', 'mobile/fm'] }});
2 và
 db.products.update({sku: "111445GB3"}, {$set: { categories: ['mobile/15G', 'mobile/fm'] }});
3. Thêm các danh mục vào tài liệu hiện có, với thao tác
 db.products.update({sku: "111445GB3"}, {$set: { categories: ['mobile/15G', 'mobile/fm'] }});
4 sau

 db.products.update({sku: "111445GB3"}, {$set: { categories: ['mobile/15G', 'mobile/fm'] }});

Để hỗ trợ các truy vấn hiệu quả bằng cách sử dụng trường

 db.products.update({sku: "111445GB3"}, {$set: { categories: ['mobile/15G', 'mobile/fm'] }});
5, hãy thêm chỉ mục vào trường danh mục cho bộ sưu tập
 db.products.update({sku: "111445GB3"}, {$set: { categories: ['mobile/15G', 'mobile/fm'] }});
6

 db.products.ensureIndex({categories:1 })

Điều này trả về tất cả các sản phẩm cho một danh mục cụ thể bằng cách sử dụng chỉ mục và biểu thức chính quy được neo. Miễn là biểu thức chính quy phân biệt chữ hoa chữ thường và được neo, MongoDB sẽ sử dụng chỉ mục để trả về truy vấn. Ví dụ: tìm nạp tất cả các sản phẩm trong danh mục bắt đầu bằng

 db.products.update({sku: "111445GB3"}, {$set: { categories: ['mobile/15G', 'mobile/fm'] }});
7

{
  sku: "111445GB3",
  title: "Simsong One mobile phone",
  description: "The greatest Onedroid phone on the market .....",

  manufacture_details: {
    model_number: "A123X",
    release_date: new ISODate("2012-05-17T08:14:15.656Z")
  },

  shipping_details: {
    weight: 350,
    width: 10,
    height: 10,
    depth: 1
  },

  quantity: 99,

  pricing: {
    price: 1000
  }
}
1

Để có thể cung cấp danh sách tất cả các sản phẩm trong danh mục, hãy sửa đổi mô hình dữ liệu bằng bộ sưu tập tài liệu cho từng danh mục. Trong bộ sưu tập này, mỗi tài liệu đại diện cho một danh mục và chứa đường dẫn cho danh mục đó trong cây danh mục. Những tài liệu này sẽ giống như sau

{
  sku: "111445GB3",
  title: "Simsong One mobile phone",
  description: "The greatest Onedroid phone on the market .....",

  manufacture_details: {
    model_number: "A123X",
    release_date: new ISODate("2012-05-17T08:14:15.656Z")
  },

  shipping_details: {
    weight: 350,
    width: 10,
    height: 10,
    depth: 1
  },

  quantity: 99,

  pricing: {
    price: 1000
  }
}
2

Chèn tài liệu vào bộ sưu tập

 db.products.update({sku: "111445GB3"}, {$set: { categories: ['mobile/15G', 'mobile/fm'] }});
5 và thêm chỉ mục vào bộ sưu tập này

{
  sku: "111445GB3",
  title: "Simsong One mobile phone",
  description: "The greatest Onedroid phone on the market .....",

  manufacture_details: {
    model_number: "A123X",
    release_date: new ISODate("2012-05-17T08:14:15.656Z")
  },

  shipping_details: {
    weight: 350,
    width: 10,
    height: 10,
    depth: 1
  },

  quantity: 99,

  pricing: {
    price: 1000
  }
}
4

Có hai con đường trong mỗi loại. điều này cho phép ứng dụng sử dụng cùng một phương pháp để tìm tất cả các danh mục cho một danh mục gốc cụ thể như được sử dụng để tìm sản phẩm theo danh mục. Ví dụ: để trả về tất cả các danh mục phụ của danh mục "di động", hãy sử dụng truy vấn sau

{
  sku: "111445GB3",
  title: "Simsong One mobile phone",
  description: "The greatest Onedroid phone on the market .....",

  manufacture_details: {
    model_number: "A123X",
    release_date: new ISODate("2012-05-17T08:14:15.656Z")
  },

  shipping_details: {
    weight: 350,
    width: 10,
    height: 10,
    depth: 1
  },

  quantity: 99,

  pricing: {
    price: 1000
  }
}
5

Điều này sẽ trả về các tài liệu sau

{
  sku: "111445GB3",
  title: "Simsong One mobile phone",
  description: "The greatest Onedroid phone on the market .....",

  manufacture_details: {
    model_number: "A123X",
    release_date: new ISODate("2012-05-17T08:14:15.656Z")
  },

  shipping_details: {
    weight: 350,
    width: 10,
    height: 10,
    depth: 1
  },

  quantity: 99,

  pricing: {
    price: 1000
  }
}
6

Sử dụng các giá trị

 db.products.update({sku: "111445GB3"}, {$set: { categories: ['mobile/15G', 'mobile/fm'] }});
9 này, ứng dụng có thể sử dụng phương pháp này để truy cập cây danh mục và trích xuất nhiều danh mục con hơn với một truy vấn được hỗ trợ chỉ mục. Hơn nữa, ứng dụng có thể lấy tất cả các tài liệu cho một danh mục cụ thể bằng cách sử dụng giá trị
 db.products.update({sku: "111445GB3"}, {$set: { categories: ['mobile/15G', 'mobile/fm'] }});
9 này

xe đẩy

Giỏ hàng trong hệ thống thương mại điện tử, cho phép người dùng đặt trước các mặt hàng từ kho và giữ chúng cho đến khi họ thanh toán và thanh toán cho các mặt hàng đó. Ứng dụng phải đảm bảo rằng tại bất kỳ thời điểm nào, không có nhiều mặt hàng trong giỏ hàng hơn số lượng có trong kho và nếu người dùng từ bỏ giỏ hàng, ứng dụng phải trả lại các mặt hàng từ giỏ hàng về kho mà không mất dấu vết của bất kỳ đối tượng nào. Lấy tài liệu sau, mô hình giỏ hàng

{
  sku: "111445GB3",
  title: "Simsong One mobile phone",
  description: "The greatest Onedroid phone on the market .....",

  manufacture_details: {
    model_number: "A123X",
    release_date: new ISODate("2012-05-17T08:14:15.656Z")
  },

  shipping_details: {
    weight: 350,
    width: 10,
    height: 10,
    depth: 1
  },

  quantity: 99,

  pricing: {
    price: 1000
  }
}
9

Mảng

 db.products.update({sku: "111445GB3"}, {$set: { categories: ['mobile/15G', 'mobile/fm'] }});
6 chứa danh sách sản phẩm khách hàng dự định mua. Sử dụng thao tác
 db.products.ensureIndex({categories:1 })
2 sau để tạo giỏ hàng

mongo    
use ecommerce    
db.products.insert({
  sku: "111445GB3",
  title: "Simsong One mobile phone",
  description: "The greatest Onedroid phone on the market .....",

  manufacture_details: {
    model_number: "A123X",
    release_date: new ISODate("2012-05-17T08:14:15.656Z")
  },

  shipping_details: {
    weight: 350,
    width: 10,
    height: 10,
    depth: 1
  },

  quantity: 99,

  pricing: {
    price: 1000
  }
})
0

Nếu hàng tồn kho có 99 mặt hàng, sau thao tác này, hàng tồn kho sẽ có 97 mặt hàng. Để ngăn "bán quá mức", ứng dụng phải chuyển các mặt hàng từ kho vào giỏ hàng. Để hỗ trợ các hoạt động này, các ứng dụng phải thực hiện một loạt các bản cập nhật và có thể "khôi phục" các thay đổi nếu xảy ra sự cố. Bắt đầu bằng cách thêm một sản phẩm vào giỏ hàng của khách hàng với thao tác sau

mongo    
use ecommerce    
db.products.insert({
  sku: "111445GB3",
  title: "Simsong One mobile phone",
  description: "The greatest Onedroid phone on the market .....",

  manufacture_details: {
    model_number: "A123X",
    release_date: new ISODate("2012-05-17T08:14:15.656Z")
  },

  shipping_details: {
    weight: 350,
    width: 10,
    height: 10,
    depth: 1
  },

  quantity: 99,

  pricing: {
    price: 1000
  }
})
1

Sau đó, kiểm tra để đảm bảo rằng khoảng không quảng cáo có thể hỗ trợ thêm sản phẩm vào giỏ hàng của khách hàng

mongo    
use ecommerce    
db.products.insert({
  sku: "111445GB3",
  title: "Simsong One mobile phone",
  description: "The greatest Onedroid phone on the market .....",

  manufacture_details: {
    model_number: "A123X",
    release_date: new ISODate("2012-05-17T08:14:15.656Z")
  },

  shipping_details: {
    weight: 350,
    width: 10,
    height: 10,
    depth: 1
  },

  quantity: 99,

  pricing: {
    price: 1000
  }
})
2

Hoạt động này chỉ thành công nếu có đủ hàng tồn kho và ứng dụng phải phát hiện thành công hay thất bại của hoạt động. Gọi

 db.products.ensureIndex({categories:1 })
3 để lấy kết quả của lần cập nhật đã thử

mongo    
use ecommerce    
db.products.insert({
  sku: "111445GB3",
  title: "Simsong One mobile phone",
  description: "The greatest Onedroid phone on the market .....",

  manufacture_details: {
    model_number: "A123X",
    release_date: new ISODate("2012-05-17T08:14:15.656Z")
  },

  shipping_details: {
    weight: 350,
    width: 10,
    height: 10,
    depth: 1
  },

  quantity: 99,

  pricing: {
    price: 1000
  }
})
3

}

Nếu

 db.products.ensureIndex({categories:1 })
4 sai trong tài liệu kết quả, thao tác không thành công và ứng dụng phải "quay lại" nỗ lực thêm sản phẩm vào giỏ hàng của người dùng. Mẫu này đảm bảo rằng ứng dụng không thể có nhiều sản phẩm trong giỏ hàng hơn khoảng không quảng cáo có sẵn

Ngoài việc thêm các đối tượng vào giỏ hàng, còn có một số hoạt động liên quan đến giỏ hàng mà ứng dụng phải có khả năng hỗ trợ

  • người dùng có thể thêm hoặc xóa các đối tượng khỏi giỏ hàng

  • người dùng có thể từ bỏ giỏ hàng và ứng dụng phải trả các mặt hàng trong giỏ hàng về kho

Chuỗi hoạt động tiếp theo cho phép ứng dụng đảm bảo rằng các giỏ hàng được cập nhật và ứng dụng có đủ khoảng không quảng cáo để trang trải nó. Cập nhật giỏ hàng với số lượng mới, sử dụng thao tác

 db.products.update({sku: "111445GB3"}, {$set: { categories: ['mobile/15G', 'mobile/fm'] }});
4 sau

mongo    
use ecommerce    
db.products.insert({
  sku: "111445GB3",
  title: "Simsong One mobile phone",
  description: "The greatest Onedroid phone on the market .....",

  manufacture_details: {
    model_number: "A123X",
    release_date: new ISODate("2012-05-17T08:14:15.656Z")
  },

  shipping_details: {
    weight: 350,
    width: 10,
    height: 10,
    depth: 1
  },

  quantity: 99,

  pricing: {
    price: 1000
  }
})
4

Lưu ý rằng có một số biến được xác định gọi là số lượng mới, số lượng cũ và số lượng_delta để chứa số lượng mới và số lượng trước đó trong giỏ hàng cũng như đồng bằng cần được yêu cầu từ kho hàng

Bây giờ, hãy xóa mặt hàng bổ sung khỏi kho, cập nhật số lượng mặt hàng trong giỏ hàng

mongo    
use ecommerce    
db.products.insert({
  sku: "111445GB3",
  title: "Simsong One mobile phone",
  description: "The greatest Onedroid phone on the market .....",

  manufacture_details: {
    model_number: "A123X",
    release_date: new ISODate("2012-05-17T08:14:15.656Z")
  },

  shipping_details: {
    weight: 350,
    width: 10,
    height: 10,
    depth: 1
  },

  quantity: 99,

  pricing: {
    price: 1000
  }
})
5

Đảm bảo ứng dụng có đủ khoảng không quảng cáo cho hoạt động. Nếu không có đủ khoảng không quảng cáo, ứng dụng phải khôi phục hoạt động cuối cùng. Thao tác sau đây kiểm tra lỗi bằng cách sử dụng

 db.products.ensureIndex({categories:1 })
3 và khôi phục thao tác nếu nó trả về lỗi

mongo    
use ecommerce    
db.products.insert({
  sku: "111445GB3",
  title: "Simsong One mobile phone",
  description: "The greatest Onedroid phone on the market .....",

  manufacture_details: {
    model_number: "A123X",
    release_date: new ISODate("2012-05-17T08:14:15.656Z")
  },

  shipping_details: {
    weight: 350,
    width: 10,
    height: 10,
    depth: 1
  },

  quantity: 99,

  pricing: {
    price: 1000
  }
})
6

Nếu người dùng từ bỏ quy trình mua hàng hoặc giỏ hàng trở nên cũ kỹ và hết thời gian chờ, ứng dụng phải trả lại nội dung giỏ hàng cho kho hàng. Thao tác này yêu cầu một vòng lặp tìm tất cả các giỏ hàng đã hết hạn hoặc bị hủy, sau đó trả lại nội dung của từng giỏ hàng cho kho hàng. Bắt đầu bằng cách tìm tất cả các xe đẩy đủ "cũ" và sử dụng một thao tác giống như sau

mongo    
use ecommerce    
db.products.insert({
  sku: "111445GB3",
  title: "Simsong One mobile phone",
  description: "The greatest Onedroid phone on the market .....",

  manufacture_details: {
    model_number: "A123X",
    release_date: new ISODate("2012-05-17T08:14:15.656Z")
  },

  shipping_details: {
    weight: 350,
    width: 10,
    height: 10,
    depth: 1
  },

  quantity: 99,

  pricing: {
    price: 1000
  }
})
7

Hoạt động này đưa tất cả các sản phẩm trong mỗi giỏ hàng và đưa chúng trở lại kho và xóa số nhận dạng giỏ hàng khỏi mảng

 db.products.ensureIndex({categories:1 })
7 trong tài liệu sản phẩm. Khi ứng dụng đã trả lại tất cả các mặt hàng vào kho, ứng dụng sẽ đặt trạng thái của giỏ hàng thành hết hạn

Thủ tục thanh toán

Khi người dùng nhấp vào nút "xác nhận" trong phần thanh toán của ứng dụng, ứng dụng sẽ tạo một tài liệu "đặt hàng" phản ánh toàn bộ đơn đặt hàng. Hãy xem xét các hoạt động sau đây

mongo    
use ecommerce    
db.products.insert({
  sku: "111445GB3",
  title: "Simsong One mobile phone",
  description: "The greatest Onedroid phone on the market .....",

  manufacture_details: {
    model_number: "A123X",
    release_date: new ISODate("2012-05-17T08:14:15.656Z")
  },

  shipping_details: {
    weight: 350,
    width: 10,
    height: 10,
    depth: 1
  },

  quantity: 99,

  pricing: {
    price: 1000
  }
})
8

Đối với cơ sở dữ liệu quan hệ, bạn có thể cần lập mô hình này dưới dạng một tập hợp các bảng. cho các đơn đặt hàng, vận chuyển, theo dõi và thanh toán. Sử dụng MongoDB, người ta có thể tạo một tài liệu độc lập, dễ hiểu và chỉ cần ánh xạ vào một ứng dụng hướng đối tượng. Sau khi chèn tài liệu này, ứng dụng phải đảm bảo hàng tồn kho được cập nhật trước khi hoàn tất thanh toán. Bắt đầu bằng cách đặt giỏ hàng là xong, với thao tác sau

mongo    
use ecommerce    
db.products.insert({
  sku: "111445GB3",
  title: "Simsong One mobile phone",
  description: "The greatest Onedroid phone on the market .....",

  manufacture_details: {
    model_number: "A123X",
    release_date: new ISODate("2012-05-17T08:14:15.656Z")
  },

  shipping_details: {
    weight: 350,
    width: 10,
    height: 10,
    depth: 1
  },

  quantity: 99,

  pricing: {
    price: 1000
  }
})
9

Sử dụng thao tác sau để xóa số nhận dạng giỏ hàng khỏi tất cả các bản ghi sản phẩm

 db.products.update({sku: "111445GB3"}, {$set: { categories: ['mobile/15G', 'mobile/fm'] }});
0

Bằng cách sử dụng "multi-update", là đối số cuối cùng trong phương thức

 db.products.update({sku: "111445GB3"}, {$set: { categories: ['mobile/15G', 'mobile/fm'] }});
4, thao tác này sẽ cập nhật tất cả các tài liệu phù hợp trong một nhóm thao tác

Phần kết luận

Khả năng tài liệu phong phú đảm bảo hoạt động nguyên tử trong MongoDB giúp có thể lập mô hình nhiều ứng dụng khác nhau trong MongoDB. Ngay cả những yêu cầu khắt khe của các ứng dụng thông thường như hệ thống thương mại điện tử cũng có thể thực hiện được trong cơ sở dữ liệu tài liệu. Mô hình dữ liệu này (i. e. "schema design,") rất hữu ích để phát triển các ứng dụng xung quanh bất kỳ hệ thống tài nguyên bị hạn chế nào, không chỉ các hệ thống thương mại điện tử

Mối quan hệ phù hợp chặt chẽ giữa mã ứng dụng hướng đối tượng và tài liệu dẫn đến các mô hình dữ liệu đơn giản hơn và ít mã keo hơn giữa hệ thống lưu trữ dữ liệu và mã cấp ứng dụng

Giới thiệu về tác giả

Ví dụ về mô hình dữ liệu MongoDB
Christian Kvalheim, nút. js và nhà phát triển trình điều khiển cho Mongodb đã làm việc với tư cách là nhà phát triển và Giám đốc Kỹ thuật trong 12 năm qua. Anh ấy đã làm việc cho Thoughtworks, IMSI, Xing và giờ là 10gen trên nhiều nền tảng công nghệ khác nhau. Bên cạnh nút. js, anh ấy dành thời gian của mình cho Erlang, Java và C

Lấy cảm hứng từ nội dung này?

Trở thành biên tập viên cho InfoQ là một trong những quyết định sáng suốt nhất trong sự nghiệp của tôi. Nó đã thử thách tôi và giúp tôi trưởng thành theo nhiều cách. Chúng tôi muốn có nhiều người tham gia nhóm của chúng tôi

Ví dụ về mô hình dữ liệu MongoDB

Thomas Betts Trưởng ban biên tập, Thiết kế và kiến ​​trúc phần mềm @InfoQ;

Viết cho InfoQ

Xếp hạng bài viết này

nhận con nuôi

Phong cách

Đã liên hệ với tác giả

Nội dung này nằm trong chủ đề AI, ML & Data Engineering

chủ đề liên quan
  • Phát triển
  • Thiết kế kiến ​​trúc
  • DevOps
  • AI, ML & Kỹ thuật dữ liệu
  • MongoDB
  • Cơ sở dữ liệu hướng tài liệu phân tán
  • Thiết kế
  • NoSQL
  • cơ sở hạ tầng
  • Ngành kiến ​​​​trúc
  • cơ sở dữ liệu

  • biên tập liên quan

  • Phổ biến trên InfoQ

    • Google phát hành Công cụ quét lỗ hổng mã nguồn mở
    • OpenAI ra mắt mô hình nhúng mạnh mẽ, tiết kiệm chi phí và thân thiện với người dùng
    • Tích hợp microservices được thực hiện ngay bằng cách sử dụng phát triển theo hợp đồng
    • Entity Framework 7 mang đến các hoạt động hàng loạt và các cột JSON
    • Tổng hợp tin tức về Java. Mây xuân 2022. 0. 0, Giới thiệu SourceBuddy, Jarviz và Just
    • Kanplexity như một cách tiếp cận để giải quyết các vấn đề phức tạp

Nội dung liên quan

  • AWS công bố GA của cụm đàn hồi DocumentDB

  • Tác giả Tháng Người đàn ông Huyền thoại và Cha đẻ của Byte 8 Bit, Fred Brooks, qua đời ở tuổi 91

  • Tại sao DesignOps lại quan trọng. Cách cải thiện quy trình thiết kế của bạn

    Ví dụ về mô hình dữ liệu MongoDB

  • Dịch vụ quản lý khóa AWS hiện hỗ trợ kho lưu trữ khóa bên ngoài

  • Thách thức về Tải trọng Nhận thức trong Kỹ thuật Nền tảng. một cuộc thảo luận với Paula Kennedy

    Ví dụ về mô hình dữ liệu MongoDB

  • Kubernetes như một nền tảng cho các mặt phẳng điều khiển cơ sở hạ tầng

    Ví dụ về mô hình dữ liệu MongoDB

  • Xây dựng và mở rộng môi trường dành cho nhà phát triển tại Stripe

    Ví dụ về mô hình dữ liệu MongoDB

  • Chọn cơ sở hạ tầng đám mây phù hợp cho khởi nghiệp SaaS của bạn

    Ví dụ về mô hình dữ liệu MongoDB

  • Sử dụng huấn luyện Agile dựa trên nhóm để thiết lập SRE trong một tổ chức

    Ví dụ về mô hình dữ liệu MongoDB

  • Amazon phát hành Fortuna, một thư viện mã nguồn mở để định lượng độ không chắc chắn của mô hình ML

  • Tạo kiểu nhập văn bản cho thử nghiệm ứng dụng dành cho thiết bị di động bằng GPT-3

  • Google xuất bản kỹ thuật tự cải thiện mô hình ngôn ngữ AI

  • Triển khai xanh-xanh từ chiến hào

    Ví dụ về mô hình dữ liệu MongoDB

  • Thúc đẩy sự giữ chân và hiệu suất của nhân viên thông qua tuyển dụng

    Ví dụ về mô hình dữ liệu MongoDB

  • Tổng hợp tin tức về Java. Dữ liệu Jakarta phát hành ban đầu, Micronaut 3. 8, JPhát hành 1. 4, Lớp 8. 0-RC1

  • Sử dụng công cụ mã để chèn lỗi ở cấp ứng dụng tại eBay

  • Bài học từ quá trình di chuyển nền tảng gần đây của Spotify Mobile Engineering

  • Kích thước máy ảo Ebsv5 được tối ưu hóa bộ nhớ mới của Microsoft trong Bản xem trước mang lại hiệu suất cao hơn

  • Kubernetes 1. 26 Đã phát hành với các thay đổi về sổ đăng ký hình ảnh, phân bổ tài nguyên nâng cao và số liệu

  • Các nhà nghiên cứu công bố khảo sát về học sâu hiệu quả về mặt thuật toán

  • Snyk công bố tính khả dụng chung của Snyk Cloud và các cải tiến cho nền tảng của nó

  • Bảo mật cụm Kafka trong Kubernetes bằng Strimzi

    Ví dụ về mô hình dữ liệu MongoDB

  • Kiểm tra quá khứ để cố gắng dự đoán tương lai cho việc xây dựng các ứng dụng phân tán

    Ví dụ về mô hình dữ liệu MongoDB

  • Entity Framework 7 mang đến các hoạt động hàng loạt và các cột JSON

  • Bộ công cụ di chuyển Eclipse cho Java (EMT4J) Đơn giản hóa việc nâng cấp các ứng dụng Java

  • Cách Starling xây dựng bộ xử lý thẻ của riêng họ

    Ví dụ về mô hình dữ liệu MongoDB

  • Cách SeatGeek xử lý thành công việc bán vé có nhu cầu cao

    Ví dụ về mô hình dữ liệu MongoDB

  • Máy chủ Cloudflare Chia sẻ địa chỉ IP cho lưu lượng đi ra

  • Giúp các nhóm thực hiện với Mô hình đánh giá thực hành chất lượng

  • Microsoft mang dịch vụ đám mây và AI của mình đến tận cùng

  • Tích hợp microservices được thực hiện ngay bằng cách sử dụng phát triển theo hợp đồng

    Ví dụ về mô hình dữ liệu MongoDB

  • Meta phát hành data2vec 2. 0 một mô hình tự giám sát hiệu quả cao

  • Google phát hành Công cụ quét lỗ hổng mã nguồn mở

  • Uber cải thiện năng suất với môi trường phát triển từ xa Devpod

  • Dịch vụ và con thú. Xây dựng một dịch vụ Windows không thể khởi động lại

    Ví dụ về mô hình dữ liệu MongoDB

  • NET MAUI Framework và. NET MAUI Community Toolkit Đã cập nhật cho. MẠNG 7

  • Tổng hợp tin tức về Java. Mây xuân 2022. 0. 0, Giới thiệu SourceBuddy, Jarviz và Just

  • máy học. MẠNG 2. 0 chứa API NLP mới và cập nhật AutoML

  • AWS công bố các thay đổi bảo mật sắp tới vào tháng 4 năm 2023 cho Amazon S3

  • Tầm quan trọng của các cổng chất lượng đường ống và cách triển khai chúng

    Ví dụ về mô hình dữ liệu MongoDB

Bản tin InfoQ

Tổng hợp nội dung của tuần trước trên InfoQ được gửi vào thứ Ba hàng tuần. Tham gia cộng đồng hơn 250.000 nhà phát triển cấp cao. Xem một ví dụ

Nhập địa chỉ email của bạn

Chọn quốc gia của bạn Tôi đồng ý với InfoQ. com xử lý dữ liệu của tôi như được giải thích trong Thông báo về quyền riêng tư này.

Chúng tôi bảo vệ quyền riêng tư của bạn

xin chào người lạ

Bạn cần Đăng ký tài khoản InfoQ hoặc Đăng nhập hoặc đăng nhập để gửi bình luận. Nhưng còn rất nhiều điều đằng sau việc đăng ký

Tận dụng tối đa trải nghiệm InfoQ

Hãy cho chúng tôi biết bạn nghĩ gì

html được phép. a,b,br,blockquote,i,li,pre,u,ul,p

Gửi email trả lời cho bất kỳ tin nhắn nào của tôi trong chủ đề này

Nhận xét của cộng đồng

chủ đề xem

  • MongoDB với mùa xuân

    của Ilias Tsagklis,

    • Lại. MongoDB với mùa xuân

      bởi Francois MAROT,

  • hết hạn giỏ hàng

    bởi gabriel duncan,

    • Lại. hết hạn giỏ hàng

      của Anup Marwadi,

  • Quản lý kho bằng MongoDB

    của Anup Marwadi,

    • Lại. Quản lý kho bằng MongoDB

      của Venkata Pulla Rao,

      • Lại. Quản lý kho bằng MongoDB

        của Anup Marwadi,

        • Lại. Quản lý kho bằng MongoDB

          của Srikanth Ravipati,

      • sử dụng sai find

        của Olasunkanmi Oyinlola,

    • MongoDB với mùa xuân

      của Ilias Tsagklis,

      Tin nhắn của bạn đang chờ kiểm duyệt. Cảm ơn bạn đã tham gia thảo luận

      bài viết hay. MongoDB có rất nhiều hứa hẹn. Bạn cũng có thể kiểm tra cách sử dụng nó ở cấp độ cao hơn kết hợp với sức mạnh của Spring. MongoDB với dự án Spring Data

      Thích Trả lời

      Trở lại đầu trang

    • Lại. MongoDB với mùa xuân

      bởi Francois MAROT,

      Tin nhắn của bạn đang chờ kiểm duyệt. Cảm ơn bạn đã tham gia thảo luận

      Còn có Jongo, trẻ tuổi nhưng đầy triển vọng. Blog. xebia. com/2012/06/29/jongo/

      Thích Trả lời

      Trở lại đầu trang

    • hết hạn giỏ hàng

      bởi gabriel duncan,

      Tin nhắn của bạn đang chờ kiểm duyệt. Cảm ơn bạn đã tham gia thảo luận

      tôi biết sự thật là hai năm sau, nhưng tôi đang ở trong tình huống cần xử lý việc hết hạn giỏ hàng. bạn có thể đề xuất cách thực hiện việc này theo cách hiệu quả nhất không?

      cụ thể hơn, bạn thay đổi trạng thái giỏ hàng từ 'đang hoạt động' thành 'hết hạn'. Cách tốt nhất để làm việc này là gì? .

      any help would be greatly appreciated!

      Thích Trả lời

      Trở lại đầu trang

    • Lại. hết hạn giỏ hàng

      của Anup Marwadi,

      Tin nhắn của bạn đang chờ kiểm duyệt. Cảm ơn bạn đã tham gia thảo luận

      Xin chào, tôi đã triển khai một giỏ hàng MongoDB tương tự.

      Đây là cách tôi giải quyết vấn đề Hết hạn giỏ hàng.
      1. Chúng tôi đã xây dựng một hệ thống bán vé, nghĩa là người dùng chỉ có thể giữ vé trong giỏ hàng trong 'x' phút. Nếu họ không hoàn thành việc thanh toán trong vòng 'x' phút, chúng tôi sẽ trả lại vé cho nhóm.
      2. Khi tập dữ liệu đầu tiên (chúng tôi gọi là mục hàng) được thêm vào giỏ hàng, chúng tôi sẽ cung cấp ngày hết hạn cho giỏ hàng. Giỏ hàng cũng được đánh dấu là Đang xử lý.
      3. Chúng tôi có một công việc thạch anh (Quartz. Net nếu bạn đang sử dụng. NET, chính là chúng tôi), chạy mỗi giây và kiểm tra xem xe hàng nào đã vượt quá Thời hạn hết hạn, sau đó giải phóng vé trở lại nhóm và làm hết hạn xe hàng bằng cách đánh dấu trạng thái là Đã hết hạn. Sau khi giỏ hàng được đánh dấu là Đã hết hạn, người dùng sẽ nhận được thông báo ở giao diện người dùng (thông qua Javascript bỏ phiếu (hoặc Websockets, tùy theo cách nào dễ dàng hơn) và người dùng sẽ được chuyển hướng trở lại trang đích sau khi xử lý giỏ hàng.

      Điều này không chỉ giúp giải quyết vấn đề hết hạn Giỏ hàng mà còn giúp khách hàng của chúng tôi có ý tưởng về Phân tích giỏ hàng.

      Thích Trả lời

      Trở lại đầu trang

    • Quản lý kho bằng MongoDB

      của Anup Marwadi,

      Tin nhắn của bạn đang chờ kiểm duyệt. Cảm ơn bạn đã tham gia thảo luận

      Xin chào, đây là một bài viết tuyệt vời và là nền tảng của một giỏ mua hàng dựa trên Mongo mà tôi thiết kế. Cảm ơn.

      Một trong những điều mà tôi quan tâm là khả năng quản lý Hàng tồn kho/Hàng tồn kho một cách chính xác do không thể "khóa" các bản ghi trong MongoDB giống như bạn làm trên cơ sở dữ liệu quan hệ để độc quyền . Tôi sẽ đánh giá cao nếu ai đó có kinh nghiệm về vấn đề này có thể cung cấp cho chúng tôi một số hướng dẫn.

      Thích Trả lời

      Trở lại đầu trang

    • Lại. Quản lý kho bằng MongoDB

      của Venkata Pulla Rao,

      Tin nhắn của bạn đang chờ kiểm duyệt. Cảm ơn bạn đã tham gia thảo luận

      Xin chào Anup Marwadi
      Bạn đã nhận được giải pháp cho vấn đề mình gặp phải chưa?
      Nếu có, vui lòng cung cấp cho tôi câu trả lời.
      Cảm ơn trước

      Thích Trả lời

      Trở lại đầu trang

    • Lại. Quản lý kho bằng MongoDB

      của Anup Marwadi,

      Tin nhắn của bạn đang chờ kiểm duyệt. Cảm ơn bạn đã tham gia thảo luận

      Xin chào,
      Tôi không biết bạn đã đăng câu hỏi này. Đối với bất cứ giá trị nào, vấn đề không được giải quyết bởi Mongo, mà ở cuối lớp dịch vụ bằng cách xếp hàng các yêu cầu và sau đó cho phép chúng nhấn mongo cùng một lúc thay vì nhiều yêu cầu nhấn mongo cùng một lúc. Điều này đã hoạt động như một cơ duyên đối với chúng tôi và khiến mọi thứ trở nên dễ đoán hơn. Bạn có thể thực hiện các tình huống nâng cao bằng cách chia hạn ngạch thành nhiều hàng đợi khi bạn thấy phù hợp.

      Chúng tôi đã ngừng đấu tranh với việc thiếu các tính năng của MongoDB và bắt đầu khắc phục chúng bằng cách triển khai các phương pháp điện toán phân tán tốt hơn và chủ yếu sử dụng MongoDB làm cơ chế lưu trữ.

      Nhìn chung, dữ liệu như thế này có thể tốt hơn nếu được lưu trữ trong cơ sở dữ liệu quan hệ, sau đó được chuyển đổi thành định dạng chỉ đọc kiểu CQRS, nhưng đó hoàn toàn là một chủ đề nâng cao khác. Tôi đang nói từ kinh nghiệm xây dựng hệ thống nơi 50K-60K người muốn thanh toán sản phẩm trong khoảng 30 phút hoặc lâu hơn. Kiến trúc cơ bản cho các loại hệ thống đó hoàn toàn khác với kiến ​​trúc được giải thích trong bài viết này.

      Hy vọng điều đó sẽ hữu ích.

      Anup Marwadi

      Thích Trả lời

      Trở lại đầu trang

    • Lại. Quản lý kho bằng MongoDB

      của Srikanth Ravipati,

      Tin nhắn của bạn đang chờ kiểm duyệt. Cảm ơn bạn đã tham gia thảo luận

      Xin chào Anup Marwadi,

      Tôi cũng đang gặp sự cố tương tự đối với ứng dụng của mình. Tôi đã xem qua giải pháp của bạn và nó có vẻ thú vị. Tuy nhiên, điều này có mở rộng quy mô cho các yêu cầu lớn như 50 nghìn đến 60 nghìn trong 30 phút không? . Điều này không làm chậm trải nghiệm chung của người dùng vì người dùng có thể đang chờ xác nhận đơn đặt hàng sao?

      Thích Trả lời

      Trở lại đầu trang

    • sử dụng sai find

      của Olasunkanmi Oyinlola,

      Tin nhắn của bạn đang chờ kiểm duyệt. Cảm ơn bạn đã tham gia thảo luận

      xe đẩy. tìm ({trạng thái. hết hạn}) sẽ chỉ trả lại giỏ hàng đầu tiên có trạng thái hết hạn từ mảng chứ không phải một mảng các giỏ hàng đã hết hạn. Điều đó là sai, để trả về một mảng xe đẩy, thay vào đó hãy sử dụng bộ lọc

      Mô hình dữ liệu nào được sử dụng cho MongoDB?

      Dữ liệu nhúng . Đối với nhiều trường hợp sử dụng trong MongoDB, mô hình dữ liệu không chuẩn hóa là tối ưu.

      Mô hình MongoDB giải thích bằng ví dụ là gì?

      MongoDB là cơ sở dữ liệu định hướng tài liệu mã nguồn mở được thiết kế để lưu trữ một lượng lớn dữ liệu và cũng cho phép bạn làm việc với dữ liệu đó một cách rất hiệu quả. It is categorized under the NoSQL (Not only SQL) database because the storage and retrieval of data in the MongoDB are not in the form of tables.

      ví dụ cho các mô hình dữ liệu mô hình dữ liệu là gì?

      Sản phẩm, nhà cung cấp và khách hàng đều là ví dụ về các thực thể tiềm năng trong mô hình dữ liệu. Các thực thể có các thuộc tính, là những chi tiết mà chúng tôi muốn theo dõi về các thực thể—bạn có thể coi các thuộc tính là các cột trong bảng. Nếu chúng ta có một thực thể sản phẩm, tên sản phẩm có thể là một thuộc tính.

      Làm cách nào để tạo một mô hình trong MongoDB?

      Mô hình hóa dữ liệu trong MongoDB .
      Luôn thiết kế lược đồ theo yêu cầu của người dùng
      Tham gia vào các hoạt động ghi không phải trên các hoạt động đọc
      Các đối tượng mà bạn muốn sử dụng cùng nhau, nên được kết hợp thành một tài liệu. .
      Tối ưu hóa lược đồ của bạn cho các trường hợp sử dụng thường xuyên hơn
      Thực hiện tổng hợp phức tạp trong lược đồ