MongoDB so với NodeJS

Mongoose, một thư viện ODM gọn gàng cho MongoDB được sử dụng trong Node. js, có rất nhiều tính năng hữu ích giúp cuộc sống của các nhà phát triển dễ dàng hơn. Nó quản lý các mối quan hệ giữa dữ liệu, có xác thực lược đồ và nói chung cho phép viết mã nhanh hơn 3-5 lần. Mặc dù Mongoose có thể chậm hơn về mặt hiệu suất, nhưng nó cung cấp dự phòng cho MongoDB bản địa khi cần

Mục lục

  • Mongoose là gì?
  • Xác thực lược đồ MongoDB
    • Xác thực lược đồ gốc
    • Xác thực lược đồ với Mongoose
  • Lợi ích của Mongoose
  • Hạn chế của Mongoose
    • Quá nhiều Woodoo Under the Hood
    • Vấn đề hiệu năng
  • Sự kết luận

Mongoose là gì?

Mongoose là thư viện Mô hình hóa dữ liệu đối tượng (ODM) được xây dựng dựa trên trình điều khiển gốc MongoDB cho Node. dự án js. Nó cho phép bạn tiết kiệm thời gian viết bản soạn sẵn xác thực, truyền và logic nghiệp vụ MongoDB nhờ các hook sẵn có

Nhưng lợi ích chính của Mongoose, thứ khiến bạn cân nhắc cân nhắc Node của mình. js gặp sự cố với một thư viện khác, là xác thực lược đồ ở lớp ứng dụng

Xác thực lược đồ MongoDB

Tất cả chúng ta đều yêu thích MongoDB vì khả năng lưu trữ tài liệu với cấu trúc động bên trong các bộ sưu tập. Và mặc dù tính linh hoạt của việc có nhiều loại dữ liệu khác nhau là rất tốt, nhưng nó có thể nằm ngoài tầm kiểm soát, đặc biệt là khi bạn chuyển từ POC sang một sản phẩm toàn diện. Và đó là lý do tại sao chúng ta cần xác thực lược đồ

Xác thực lược đồ gốc

Nếu bạn không muốn dữ liệu giả mạo chui vào cơ sở dữ liệu của mình, bạn cần xác thực lược đồ. Chắc chắn, bạn không cần phải suy nghĩ về nó khi dự án vẫn còn non trẻ. Nhưng khi số lượng nguồn dữ liệu tăng lên, bạn cần đặt ra một số quy tắc cơ bản

Với xác thực lược đồ, bạn có thể đặt cấu trúc cụ thể cho tài liệu và nếu tài liệu không khớp với cấu trúc, cơ sở dữ liệu sẽ từ chối thao tác ngay lập tức hoặc đưa ra cảnh báo

Xác thực lược đồ MongoDB bản địa là tốt vì ba lý do. một, xác thực JSON là một tiêu chuẩn mở, có nghĩa là bạn sẽ có thể kết nối các thư viện của bên thứ ba ngay bây giờ hoặc trong tương lai. Thứ hai, nó có ít phụ thuộc hơn; . Và chúng tôi đã đề cập rằng xác thực gốc được áp dụng ở cấp cơ sở dữ liệu chưa?

Xác thực lược đồ với Mongoose

Giờ đây, với Mongoose, quy trình xác thực nhanh hơn và dễ dàng hơn vì nó cho phép tạo cấu trúc cho dữ liệu của bạn với các loại được xác định trước mà bạn có thể sử dụng ngay lập tức. Chỉ cần tưởng tượng bạn có thể tiết kiệm bao nhiêu thời gian với xác thực tích hợp này. Chúng tôi đã ước tính rằng Mongoose thực hiện với một chuỗi mã xác thực những gì chúng tôi thực hiện thủ công với ba hoặc năm chuỗi trong số đó

Nói về các loại, Mongoose cung cấp các SchemaTypes sau

  • Sợi dây
  • Con số
  • Ngày
  • Đệm
  • Boolean
  • Trộn
  • ID đối tượng
  • Mảng
  • thập phân128
  • Bản đồ
  • Lược đồ

Ngoài ra, bạn có thể sử dụng các plugin có sẵn cho các loại khác hoặc thậm chí tạo SchemaType tùy chỉnh của riêng bạn

Mongoose áp dụng xác thực lược đồ ở cấp ứng dụng (có nghĩa là MongoDB không biết gì về nó) và thực hiện theo hai cách. bằng cách cho ứng dụng của bạn biết loại dữ liệu và trường nào được phép có trong một bộ sưu tập cụ thể và bằng cách xác nhận rằng dữ liệu phù hợp với tiêu chí đã đặt

Blog chính thức của MongoDB có một bài viết minh họa hoàn hảo cách thức hoạt động của các lược đồ Mongoose, sử dụng một blog làm ví dụ

Lợi ích của Mongoose

Với Mongoose, việc tạo và quản lý các mối quan hệ giữa dữ liệu trở nên nhanh chóng và dễ dàng nhờ vào một lược đồ chặt chẽ và phương thức populate(). Nó thay thế các đường dẫn cụ thể, được mô tả trong lược đồ bằng các tài liệu từ các bộ sưu tập khác. Không cần phải nói, nó mạnh hơn chức năng “tra cứu” gốc

Thư viện cũng có thể tự hào về một lưu () thuận tiện cho phép bạn cập nhật tài liệu mà không gặp rắc rối

Phần mềm trung gian là một thứ tuyệt vời khi bạn định tạo plugin cho Mongoose hoặc muốn xây dựng Lớp truy cập dữ liệu mô-đun (DAL). Có bốn loại phần mềm trung gian, tùy thuộc vào mức độ hiệu quả của nó. phần mềm trung gian tài liệu, mô hình, tổng hợp và truy vấn. Và có hàng trăm plugin có sẵn — hãy cảm nhận sức mạnh của mã nguồn mở

Cơ chế Discriminator là một cơ chế thú vị khác. Nó có thể khá hữu ích nếu bạn cần xây dựng SaaS với cơ sở dữ liệu dùng chung. Tóm lại, nó cho phép bạn có một khóa chung trong mỗi mô hình trong cùng một bộ sưu tập. Hãy tưởng tượng rằng bạn có một bộ sưu tập duy nhất “Tác vụ”, nhưng tác vụ thực tế (mô hình) thuộc về các khách hàng khác nhau. Việc có một bộ phân biệt cho ID khách hàng sẽ đảm bảo rằng chúng ta không quên lọc các tác vụ trong khi truy vấn và vô tình phá vỡ nguyên tắc cô lập dữ liệu

Việc sử dụng Dấu thời gian khá đơn giản nhưng vẫn đáng được đề cập. Bật rất dễ dàng. chỉ cần đặt "dấu thời gian" thành "true" khi mô tả lược đồ và bạn sẽ có cái nhìn sâu sắc về thời gian tạo và cập nhật của mô hình

Các phương thức tĩnh và sơ thẩm cũng rất tiện dụng vì chúng cho phép lập mô hình các thực thể chứ không chỉ các mô hình dữ liệu. Nâng cao mô hình của bạn bằng các phương pháp giúp giữ cho DAL của bạn luôn phong phú và gắn kết, đồng thời tính mô đun giúp việc thử nghiệm trở nên dễ dàng. Sự khác biệt giữa thể hiện và phương thức tĩnh gần như dễ hiểu đối với những người quen thuộc với lập trình hướng đối tượng — một phương pháp được áp dụng cho cá thể mô hình và phương pháp kia — cho toàn bộ lược đồ

Mongoose virtuals là một lợi ích khác của thư viện. Chúng là các thuộc tính tài liệu không được lưu trữ trong MongoDB. bạn vẫn có thể lấy chúng và đặt giá trị, nhưng những ảo này không được ghi vào bộ sưu tập. Ảo được sử dụng cho các thuộc tính được tính toán trên tài liệu, định dạng, kết hợp các trường, v.v.

Các đặc quyền khác của việc sử dụng Mongoose bao gồm các chức năng chuỗi (để có mã linh hoạt và dễ đọc hơn), lớp trừu tượng (để không phải sử dụng các bộ sưu tập được đặt tên) và mặc định (để cải thiện khả năng đọc mã cũng như tiết kiệm thời gian)

Hạn chế của Mongoose

Đưa ra quyết định sáng suốt cũng yêu cầu xem xét các nhược điểm của Mongoose. Và mặc dù không có nhiều, bạn nên biết về chúng

Quá nhiều Woodoo Under the Hood

Giống như bất kỳ ODM hoặc ORM nào khác, Mongoose che giấu sự phức tạp của dữ liệu liên tục từ nhà phát triển. Do đó, việc mày mò dữ liệu mà không có Mongoose có thể không đoán trước được và đòi hỏi sự hiểu biết sâu sắc về thư viện. Nó không chỉ là một công cụ trợ giúp có thể được sử dụng ở đây và ở đó; . Một số gọi đó là “thiếu kiểm soát”, điều này rất quan trọng trong nhiều trường hợp

Xây dựng một ứng dụng nhanh chóng có thể rất quan trọng đối với một doanh nghiệp vừa chớm nở, nhưng việc chọn sự tiện lợi của Mongoose để xây dựng một ứng dụng có khả năng mở rộng cao và tối ưu hóa hiệu suất không phải là ý tưởng tốt nhất

Vấn đề hiệu năng

Mongoose được viết bằng JavaScript trên trình điều khiển MongoDB gốc. Vì vậy, vâng, sử dụng nó sẽ khiến bạn bị phạt về hiệu suất. Nhưng các vấn đề thậm chí còn lớn hơn phát sinh khi bạn cố gắng sử dụng nó như một ORM. Thiết kế tồi sẽ làm giảm hiệu suất của bất kỳ ODM hoặc cơ sở dữ liệu nào

Nhưng có một cách giải quyết. MongoDB. Mongoose cung cấp quyền truy cập trực tiếp vào trình điều khiển gốc được sử dụng dưới mui xe. Nếu có một phần quan trọng về hiệu suất trong ứng dụng của bạn, bạn có thể sử dụng toàn bộ sức mạnh của MongoDB trong khi vẫn có tùy chọn Mongoose trong phần còn lại của ứng dụng

Những nhược điểm khác, nhỏ hơn bao gồm

  • Mongoose không phải là một thư viện chính thức được phát triển bởi MongoDB
  • Lược đồ cứng nhắc là một mô hình chống lại nhiều hơn trong thế giới MongoDB
  • Hiệu suất có thể tốt hơn
  • Không phải là lựa chọn tốt nhất cho các dự án lớn và truy vấn nâng cao
  • Mối quan hệ chỉ tồn tại ở mức ứng dụng
  • Chỉ hoạt động khi bộ sưu tập của bạn chứa một lược đồ có thể dự đoán được cho các tài liệu
  • Có thể đấu tranh với các lược đồ phức tạp

Chắc chắn, Mongoose thuận tiện cho việc quản lý dữ liệu, nhưng nó không phải là viên đạn bạc. Vì vậy, trong các dự án phức tạp hơn, trong quá trình phát triển tích cực và khi định dạng dữ liệu thay đổi thường xuyên, bạn sẽ cần sử dụng MongoDB Node. trình điều khiển js

Sự kết luận

Như bạn có thể nhận thấy, chúng tôi không nói rằng bạn nên sử dụng Mongoose cho tất cả các Node của mình. js — MongoDB cung cấp mọi thứ nguyên bản, vì vậy không cần sử dụng Mongoose ngay lập tức. Có, các ODM như Mongoose mang lại cảm giác quen thuộc và dễ dàng, đặc biệt khi bạn mới bắt đầu với cơ sở dữ liệu quan hệ. Nhưng chúng cũng cản trở bạn khám phá sức mạnh thực sự và sự tự do của MongoDB

Mongoose không hoàn hảo, nhưng nó vẫn là một ODM khá tốt cho phép bạn tiết kiệm thời gian viết các phương thức xác nhận và cá thể. Vì vậy, nếu không có quá nhiều xử lý dữ liệu trong dự án của bạn, Mongoose có thể rất hữu ích

Tại sao MongoDB được ưu tiên hơn với NodeJS?

Có thể xử lý nhiều loại dữ liệu và lượng dữ liệu khổng lồ . Nó cung cấp một Nút MongoDB. js cung cấp API JavaScript và triển khai giao thức mạng cần thiết để đọc và ghi từ cơ sở dữ liệu MongoDB cục bộ hoặc từ xa. Tất cả những gì bạn phải làm là cài đặt gói NPM -mongodb trong Mã ứng dụng của mình.

MongoDB và NodeJS có giống nhau không?

Nút. js, môi trường máy chủ JavaScript mã nguồn mở, có khả năng kết nối với cả cơ sở dữ liệu SQL và NoSQL như MySQL và MongoDB (tương ứng) . Để sử dụng các cơ sở dữ liệu này, cần tải xuống và cài đặt các mô-đun cần thiết bằng cách sử dụng Trình quản lý gói nút (npm).

Tôi nên học MongoDB hay NodeJS trước?

Dựa trên hai điểm này, trước tiên bạn nên học lập trình. Bạn muốn học NodeJS+Express+MongoDB, trong đó có 3 thứ hoàn toàn khác với những gì bạn đã biết. Viết tập lệnh của bạn vào một tệp có tên try. js và thực thi chúng với nút thử

Sự khác biệt giữa NodeJS và MongoDB là gì?

js (hay đơn giản là Express) là một khung máy chủ ứng dụng web dành cho Node. js và MongoDB là nền tảng cơ sở dữ liệu tài liệu đa năng . Bạn có thể sử dụng chúng cùng nhau để xây dựng một ứng dụng web lưu trữ dữ liệu trong MongoDB. Vì Express là một mô-đun chạy trên Node.