Hướng dẫn why do we use schema in mongodb? - tại sao chúng ta sử dụng lược đồ trong mongodb?

Xuất bản ngày 30 tháng 9 năm 2015 Thử nghiệm 30 ngày miễn phí Free 30 Day Trial

Đối với lược đồ hay không theo lược đồ, đó là câu hỏi mà Rob Ludwig đảm nhận trong bài viết viết này. Bạn có những thứ viết để viết về cơ sở dữ liệu ở đây không? Tại sao không gửi ý tưởng bài viết của bạn cho chương trình Compose Write Stuff.Write Stuff article. Do you have the Write Stuff to write about databases here? Why not submit your article ideas to the Compose Write Stuff program.

Theo một cách nào đó, việc chọn xem có nên sử dụng lược đồ hay không là tương tự để chọn nên sử dụng ngôn ngữ lập trình mạnh mẽ hay tự động: sự đánh đổi chính là giữa tính linh hoạt và sự nghiêm ngặt. Cũng giống như một ngôn ngữ được gõ động cho phép bạn nhanh chóng lặp lại và phát triển ứng dụng của mình, việc sử dụng sơ đồ cho phép bạn thay đổi mô hình dữ liệu của mình với rất ít ma sát.

Tuy nhiên, các điều khiển nghiêm ngặt và tính chính xác được áp đặt bởi các lược đồ và các ngôn ngữ được đánh máy cho phép bạn giữ các nhóm lớn các nhà phát triển trên cùng một trang và có thể cho phép bạn bắt lỗi sớm hơn trong chu kỳ phát triển. Mỗi ngôn ngữ có ODM đầy đủ tính năng cho MongoDB cũng có một thư viện để thực thi các lược đồ trong mã ứng dụng, vì vậy bạn luôn có tùy chọn để đưa lược đồ vào dự án của mình. Để hiểu đầy đủ hơn về sự đánh đổi, nó có giá trị để xem xét kỹ hơn về những ưu và nhược điểm của các lược đồ.

Wild & Free: MongoDB không có lược đồ

Đi theo chương trình của người Viking là một chút sai lầm vì có rất ít trường hợp sử dụng sản xuất trong đó dữ liệu hoàn toàn không có cấu trúc. Hầu hết dữ liệu Mongo thường có cấu trúc ngụ ý. Trên thực tế, MongoDB gần đây đã công bố phiên bản 3.2 bao gồm một số công cụ để suy ra lược đồ từ dữ liệu của bạn và xác nhận nó. Mặc dù dữ liệu của bạn có thể phát triển theo thời gian, nó thường có một xương sống chung trong mỗi bộ sưu tập mà bạn dựa trên các truy vấn của mình. Nhiều như mọi người lập luận rằng đi mà không có lược đồ là một kiến ​​trúc hoang dã, nơi mọi thứ có thể được đưa vào cơ sở dữ liệu mà hiếm khi kết thúc là trường hợp.

Trên thực tế, có một số lý do tại sao bạn có thể thấy tốt hơn là không sử dụng lược đồ cho dữ liệu Mongo của bạn. Đối với một người, sự linh hoạt của Mongo khi nói đến các lược đồ là một lý do chính để sử dụng MongoDB ngay từ đầu. Nếu bạn vẫn lặp đi lặp lại về cách ứng dụng của bạn sử dụng dữ liệu và dữ liệu nào mà nó sử dụng, bạn có thể không muốn tự trói mình vào một biểu mẫu mà dữ liệu có thể lấy. Không sử dụng một lược đồ với Mongo cho phép bạn tận dụng tối đa các công cụ CONGO cung cấp để chiếu dữ liệu của bạn khi bạn vui lòng dưới bất kỳ hình thức nào bạn mong muốn.

Ngoài ra, nếu bạn có một ứng dụng thu thập dữ liệu với các cấu trúc khác nhau thành một bộ sưu tập duy nhất, việc cố gắng giới thiệu một lược đồ có lẽ là rắc rối hơn so với giá trị của nó. Hơn một lần, tôi đã thấy một lược đồ phát triển từ một định nghĩa Ironclad về dữ liệu nào đối với một bộ sưu tập các đối tượng lỏng lẻo, trong đó xác nhận hầu như không thể do tính chất bảo vệ của dữ liệu được vận hành. Thế giới thực thường lộn xộn: Một ngày nào đó bạn đã tích hợp với một nhà cung cấp cấu trúc API của họ theo một chiều, ngày hôm sau bạn đã đá họ cho một đối thủ cạnh tranh với một cấu trúc hoàn toàn khác. Khi doanh nghiệp của bạn cần phát triển, dữ liệu của bạn cũng vậy.

Sơ đồ lớn của mọi thứ: Sử dụng lược đồ với Mongo

Hầu hết các đối số để thực thi lược đồ trên dữ liệu của bạn đều được biết đến: các lược đồ duy trì cấu trúc, đưa ra một ý tưởng rõ ràng về những gì đang đi vào cơ sở dữ liệu, giảm các lỗi có thể phòng ngừa được và cho phép mã sạch hơn (không cần phải kiểm tra loại trường của trường Ra khỏi cơ sở dữ liệu trước khi sử dụng nó). Các lược đồ là một hình thức của mã tự tài liệu, vì chúng mô tả chính xác loại dữ liệu nên là gì và cho bạn biết những gì kiểm tra sẽ được thực hiện. Nhiều thư viện lược đồ cho phép các chức năng xác thực vượt ra ngoài kiểm tra loại đơn giản, do đó bạn thậm chí có thể có các lược đồ đảm bảo rằng trường chuỗi là địa chỉ email hợp lệ hoặc trường Geojson nằm trong Hoa Kỳ.

Trên hết những lý do cổ điển này để sử dụng các lược đồ, có một vài lý do cụ thể của MongoDB để sử dụng chúng. Trước hết, các lược đồ có thể giúp với một số cạnh thô khi truy vấn trong Mongo. Truy vấn cho các Subdocument trong Mongo có thể trở nên bực bội bởi vì, vì tài liệu nhắc nhở chúng ta, "khi thực hiện sự bình đẳng phù hợp trên các tiểu thuyết, vấn đề thứ tự hiện trường và các subdocument phải khớp chính xác.

Nếu dữ liệu của bạn có cấu trúc phức tạp với nhiều cấp độ, việc làm cho nó có thể dự đoán được với một lược đồ có thể làm cho cuộc sống của bạn dễ dàng hơn. Ví dụ: nếu bạn có hồ sơ nhân viên với một loạt các giao dịch mua:

{
  _id: 112,
  department: “r & d”,
  status: “full time”,
  purchases: [{
    authorizedBy: “accounting”,
    receiptsSubmitted: true,
    cost: 125.99,
    items: [{
      name: “plane ticket”,
      cost: 100,
    }, {
      name: “client lunch”,
      provider: “Applebee’ s”,
      cost: 25.99
    }],
  }],
},

... Nó có thể nhanh chóng trở nên khó khăn để lý luận về cách thực hiện các truy vấn phức tạp chỉ bằng cách xem dữ liệu. Một lược đồ cung cấp một số đảm bảo về định dạng dữ liệu và một cách để xem những đảm bảo đó ở một nơi. Nếu bạn đang cố gắng tìm tất cả các giao dịch mua lớn hơn 100 đô la được ủy quyền bởi bộ phận của bạn mà chưa gửi biên lai của họ, thì nó sẽ dễ dàng hơn một chút để làm điều đó với lược đồ trước mặt bạn.

Các lược đồ cũng đặc biệt hữu ích khi được ghép nối với Trình quản lý tài liệu đối tượng (ODM). Các ví dụ của Mongoose.js cho Node, có thể sử dụng thông minh các lược đồ của nó để đảm bảo rằng các truy vấn Mongo của bạn đều được đặt thành các giá trị chính xác. Nó có thể chuyển các chuỗi vào Objectids, ngày hoặc số khi cần thiết cho truy vấn của bạn, đơn giản và nhanh hơn nhiều so với việc quản lý các loại này bằng tay.

Một lý do cuối cùng để thích các lược đồ với MongoDB là chúng ngăn bạn thay đổi hình dạng tài liệu của bạn quá thường xuyên cho một bộ sưu tập nhất định. Các bản cập nhật cho một tài liệu Mongo chuyển đổi dữ liệu giữa các loại hoặc kích thước có thể tốn kém vì Mongo phải phân bổ lại không gian cho bản ghi mới được lưu trữ, dẫn đến cập nhật chậm. Ngay cả các ví dụ tương đối nhỏ có thể dẫn đến các vấn đề. Nếu, giả sử, ban đầu bạn được lưu trữ tên trên tài liệu người dùng, như chuỗi:

{
    _id : 1,
    hostName : "Jay Leno",
    timeSlot : "20:00",
    show: "The Tonight Show"
}

... và bạn chuyển đổi trong phiên bản sau của ứng dụng để lưu trữ tên dưới dạng thư mục con khi một tên được cập nhật:

{
    _id : 1,
    hostName : {
        first: "Conan",
        last: "O'Brien"
    }
    timeSlot: "20:00"
    show: "The Tonight Show"
}

... Điều này có thể gây ra ghi chậm trong khi Mongo thay đổi các tài liệu để tạo không gian cho các tài liệu mới có được. Nếu bạn thấy rằng những thay đổi thường xuyên đối với kích thước tài liệu trong bộ sưu tập đang làm chậm ứng dụng của bạn, một lược đồ có thể giúp bạn bằng cách buộc bạn phải suy nghĩ về những thay đổi mà bạn thực hiện đối với dữ liệu của mình.

Quyết định

Khi bạn đánh giá các lựa chọn của bạn, hãy dành một chút thời gian để suy nghĩ về con đường phía trước. Nếu bạn đã có ý thức tốt về dữ liệu mà bạn sẽ sử dụng (ví dụ: nếu bạn đang tương tác với dữ liệu ở định dạng cố định, nếu bạn thực hiện một tiêu chuẩn), thì một lược đồ rất có ý nghĩa. Những lần khác, quyết định không quá dễ dàng. Hãy tự hỏi mình rằng bạn đang lập kế hoạch cho việc trở thành một công ty như thế nào: Khách hàng mới có yêu cầu thay đổi định dạng dữ liệu không? Bạn sẽ cần thay đổi đối tác và nhà cung cấp dịch vụ khi nhu cầu của bạn thay đổi? Bạn vẫn đang tìm hiểu dữ liệu mà bạn quan tâm trong việc giữ và những gì không hữu ích? Nếu bạn trả lời bất kỳ câu hỏi nào một cách khẳng định, thì có một trường hợp mạnh mẽ được đưa ra để đưa ra một lược đồ tại hiện tại.

Cuối cùng, một điều quan trọng cần xem xét khi từ bỏ một lược đồ là nó không phải là một quyết định vĩnh viễn. Nếu bạn từ chối áp đặt một lược đồ trong hiện tại, tùy chọn vẫn còn mở cho bạn trong tương lai. Tại bất kỳ điểm nào nếu dữ liệu của bạn trở nên có trật tự hơn hoặc bạn thấy việc thiếu lược đồ cản trở khả năng phối hợp giữa nhiều nhà phát triển, bạn có thể áp dụng một lược đồ khá tầm thường. Tương tự như vậy, bạn luôn có thể mở lũ lụt trên một ứng dụng trước đây có lược đồ và cho phép bất kỳ loại dữ liệu nào được đưa vào.

Tài nguyên bổ sung

Hầu hết các ngôn ngữ có một thư viện để thực thi lược đồ ở cấp độ ứng dụng trong Mongo. Đây là một lựa chọn:

  • Python: Có một vài thư viện lược đồ tích hợp với pymongo. Humongulus cung cấp khá nhiều công cụ xác nhận: https://github.com/entone/humongolus

  • Nút: Mongoose.js là ODM nút Premier và bao gồm xác nhận rộng rãi: http://mongoosejs.com/docs/guide.html

  • Java: Dữ liệu mùa xuân Mongo Trình điều khiển thực thi xác thực bằng cách ánh xạ các tài liệu đến các lớp: http://projects.spring.io/spring-data-mongodb/

  • Ruby: Dự án Mongoid tuyệt vời hỗ trợ một loạt các tính năng lược đồ, từ đánh máy đến xác thực: http://docs.mongodb.org/ecosystem/tutorial/ruby-mongoid-tutorial/#fields

Hướng dẫn why do we use schema in mongodb? - tại sao chúng ta sử dụng lược đồ trong mongodb?

Bài viết này được cấp phép với CC-by-NC-SA 4.0 bằng cách soạn thảo.

Bạn có cần một lược đồ cho MongoDB?

Là cơ sở dữ liệu NoQuery, MongoDB được coi là sơ đồ vì nó không yêu cầu lược đồ cứng nhắc, được xác định trước giống như cơ sở dữ liệu quan hệ.MongoDB is considered schemaless because it does not require a rigid, pre-defined schema like a relational database.

Tại sao chúng ta cần lược đồ trong Mongoose?

Với Mongoose, bạn sẽ xác định một đối tượng lược đồ trong mã ứng dụng của mình ánh xạ vào một bộ sưu tập trong cơ sở dữ liệu MongoDB của bạn.Đối tượng lược đồ xác định cấu trúc của các tài liệu trong bộ sưu tập của bạn.Sau đó, bạn cần tạo một đối tượng mô hình ra khỏi lược đồ.Mô hình được sử dụng để tương tác với bộ sưu tập.defines the structure of the documents in your collection. Then, you need to create a Model object out of the schema. The model is used to interact with the collection.

Bạn có cần một lược đồ cho Mongoose?

Tất cả mọi thứ trong Mongoose bắt đầu với một lược đồ.Mỗi lược đồ ánh xạ vào một bộ sưu tập MongoDB và xác định hình dạng của các tài liệu trong bộ sưu tập đó.. Each schema maps to a MongoDB collection and defines the shape of the documents within that collection.

Thiết kế lược đồ trong MongoDB là gì?

Thiết kế lược đồ MongoDB thực sự chỉ có hai lựa chọn cho mỗi phần dữ liệu.Bạn có thể nhúng dữ liệu đó trực tiếp hoặc tham chiếu một phần dữ liệu khác bằng toán tử tra cứu $ (tương tự như tham gia).Hãy xem xét những ưu và nhược điểm của việc sử dụng từng tùy chọn trong lược đồ của bạn.embed that data directly or reference another piece of data using the $lookup operator (similar to a JOIN). Let's look at the pros and cons of using each option in your schema.