Bạn có thể sử dụng SQL với MongoDB không

SQL [Ngôn ngữ truy vấn có cấu trúc] được thiết kế để quản lý dữ liệu được giữ trong hệ thống quản lý cơ sở dữ liệu quan hệ [RDBMS]. Đối tác của nó, NoSQL, đề cập đến “không phải SQL” để quản lý cơ sở dữ liệu phi quan hệ. Các biến thể NoSQL như MongoDB đã phát triển nhanh chóng khi các doanh nghiệp bắt đầu dựa vào sự kết hợp giữa dữ liệu có cấu trúc và phi cấu trúc cho hoạt động kinh doanh thông minh

Là một chuyên gia về cơ sở dữ liệu, bạn có thể thực hiện chuyển đổi sang NoSQL như MongoDB Query Language [MQL] không? . Mặc dù cú pháp và ngữ nghĩa có thể khác nhau rất nhiều, truy vấn bằng NoSQL dựa trên các khái niệm giống như truy vấn bằng SQL

Trong bài đăng này, tôi sẽ đề cập đến một số điều cơ bản khi làm việc với Ngôn ngữ truy vấn MongoDB

Ví dụ về dữ liệu có cấu trúc và phi cấu trúc

Sự khác biệt giữa dữ liệu có cấu trúc và phi cấu trúc là một điểm khởi đầu hữu ích. Dữ liệu có cấu trúc tuân theo một mô hình hoặc lược đồ được xác định rõ. Dữ liệu phi cấu trúc không được sắp xếp theo bất kỳ mô hình định sẵn nào. Nghĩ về dữ liệu có cấu trúc dưới dạng định lượng và nghĩ về dữ liệu phi cấu trúc dưới dạng định tính

Các phần tử trong luồng dữ liệu có cấu trúc nằm gọn trong các trường hoặc cột được xác định rõ ràng;

  • Tên
  • Địa chỉ nhà
  • Số tài khoản
  • Số lượng đơn đặt hàng
  • Giá bán
  • Số hàng tồn kho

Bạn có thể có những nhãn đó ở hàng trên cùng của bảng tính và biết rằng tất cả các mục nhập trong mỗi cột sẽ tuân theo nhãn. Bạn có thể truy vấn và phân tích dữ liệu một cách dễ dàng vì luồng được xác định rõ ràng

Mặt khác, trong một luồng dữ liệu phi cấu trúc, các phần tử không vừa khít với các trường hoặc cột. Ví dụ về dữ liệu phi cấu trúc bao gồm những

  • Đoạn ghi hình
  • Hoạt động thiết bị di động
  • sử dụng phương tiện truyền thông xã hội
  • tài liệu văn bản
  • Hình ảnh

Chẳng hạn, không có định nghĩa cho năm giây đầu tiên của bất kỳ video clip hoặc bài hát nổi tiếng nào. Đó là lý do tại sao bạn không bao giờ có thể chắc chắn những gì bạn sẽ thấy và nghe nếu bạn sử dụng các công cụ truyền thống để truy vấn nó. Tương tự, không có cấu trúc xác định cho các nguồn cấp dữ liệu trên mạng xã hội, nơi mọi người viết tự do và sử dụng ngôn ngữ không thể đoán trước. Điều đó gây khó khăn cho việc sử dụng các công cụ thông thường để tìm kiếm các đánh giá sản phẩm thuận lợi và không thuận lợi

Chủ động theo dõi sức khỏe và hiệu suất của tất cả các nền tảng cơ sở dữ liệu của bạn

học như thế nào

Nguồn gốc của Ngôn ngữ truy vấn MongoDB

Những người tạo ra MongoDB đã phát triển một công cụ lưu trữ dữ liệu với nền tảng linh hoạt, có thể mở rộng và linh hoạt phù hợp với dữ liệu phi cấu trúc. Vào năm 2009, họ đã phát hành sản phẩm NoSQL theo thỏa thuận cấp phép nguồn mở cùng với giấy phép doanh nghiệp thương mại

MongoDB là cơ sở dữ liệu tài liệu hướng JSON [Ký hiệu đối tượng JavaScript], mặc dù bên trong nó sử dụng một biến thể được mã hóa nhị phân của JSON có tên là BSON. BSON là định dạng mã hóa tuần tự cho JSON được sử dụng chủ yếu để lưu trữ và truy cập tài liệu. So với JSON, định dạng BSON cung cấp chi phí phân tích cú pháp thấp hơn và hỗ trợ phong phú hơn cho các loại dữ liệu như ngày tháng và dữ liệu nhị phân

Cơ sở dữ liệu quan hệ bao gồm SQL Server, Oracle và MySQL sử dụng SQL để truy cập dữ liệu. Các nhà phát triển MongoDB sử dụng Ngôn ngữ truy vấn MongoDB

SQL so với. MongoDB

Bảng dưới đây liệt kê những khác biệt và tương đồng chính giữa SQL và MongoDB

SQLMongoDBCơ sở dữ liệu quan hệ [SQL]Cơ sở dữ liệu phi quan hệ [NoSQL]SQL dành cho các hệ thống quản lý cơ sở dữ liệu quan hệ. Kho lưu trữ dữ liệu ở định dạng có cấu trúc. NoSQL là một cơ sở dữ liệu tài liệu trong đó dữ liệu được thể hiện trong tài liệu. Cơ sở dữ liệu lưu trữ và truy xuất tài liệu, có thể là XML, JSON, BSON, v.v. Các tài liệu này là cấu trúc dữ liệu cây tự mô tả, phân cấp, bao gồm bản đồ, bộ sưu tập và giá trị vô hướng. Các tài liệu được lưu trữ tương tự nhau nhưng không giống nhau. Để truy vấn dữ liệu có cấu trúc Để truy vấn dữ liệu phi cấu trúcSQL [Ngôn ngữ truy vấn có cấu trúc]MQL [Ngôn ngữ truy vấn MongoDB]TableCollectionRow hoặc tupleBSON hoặc các tài liệu khácCột [thuộc tính]FieldIndexIndexPrimary key có thể được tạo bằng một khóa duy nhất hoặc tổ hợp các cộtKhóa chính là trường Key [_Id] của documentAggregation . Tập hợp là một giao dịch đường ống. Quá trình này tốt cho các ứng dụng có nhu cầu xử lý dữ liệu thấp; . Các mối quan hệ cơ sở dữ liệu SQL được xác định trên các bảng khác nhau bằng cách sử dụng khóa ngoại và khóa chính. Thật đơn giản để thiết lập THAM GIA giữa các bảng. Ngôn ngữ truy vấn MongoDB không hỗ trợ thiết lập THAM GIA như trong SQL; . Các phiên bản mới hơn hoặc mới hơn hỗ trợ truy vấn các giá trị JSON. Ví dụ: SQL Server 2016 và Oracle 11g trở đi hỗ trợ các truy vấn JSON. Hỗ trợ tích hợp cho JSONHỗ trợ trình kích hoạtKhông hỗ trợ trình kích hoạtCác giao dịch truy vấn tuân thủ các thuộc tính ACID. Các giao dịch truy vấn tuân theo định lý CAP. Hoạt động dữ liệu được xử lý và quản lý bởi SQL. Nhập và xuất dữ liệu đơn giản trong MongoDB. Bạn có thể sử dụng Java, Python, JavaScript, v.v. , để xây dựng, thao tác và phân tích các biểu thức truy vấn. Trên thực tế, không cần trình phân tích cú pháp. SQL được phát triển đầy đủ và giàu tính năng. Truy vấn MongoDB vẫn còn hạn chế, đặc biệt là so với các tính năng phong phú của SQL. Không hỗ trợ chia tỷ lệ theo chiều ngang Chia tỷ lệ theo chiều ngang bằng phím phân vùng

Ngôn ngữ truy vấn MongoDB [MQL]

Các truy vấn MongoDB dựa trên JavaScript. Ngôn ngữ này tương đối dễ học và có sẵn nhiều công cụ để truy vấn dữ liệu MongoDB bằng cú pháp SQL

Khi truy vấn dữ liệu, bạn có một loạt các tùy chọn, toán tử, biểu thức và bộ lọc đặc biệt. Tài liệu so sánh Ngôn ngữ truy vấn MongoDB và cú pháp SQL cho các thao tác cơ sở dữ liệu phổ biến. Bảng sau liệt kê nhiều lệnh và tùy chọn thường được sử dụng mà bạn có thể chạy trong trình bao MongoDB để thao tác và truy vấn dữ liệu

Dưới đây là một số ví dụ về mã cho các truy vấn, với Ngôn ngữ truy vấn MongoDB và SQL tương đương nếu áp dụng

LoạiMô tảMQLSQLLựa chọn trườngHàm tìm [] trong Ngôn ngữ truy vấn MongoDB cung cấp cách dễ dàng nhất để truy xuất dữ liệu từ nhiều tài liệu trong một trong các bộ sưu tập của bạn. Chức năng này là chức năng mà bạn sẽ sử dụng thường xuyên. >______1_______>select * from Employee;Mệnh đề điều kiện. Mệnh đề WhereỞ đây, để trả lại tất cả các nhân viên trạng thái A>db.Employee.find [ { status : "A" } ]>select * from Employee where status=’A’Projection. Chọn các trường cụ thểViệc chèn thẻ { NAME. 1 } chỉ định rằng chỉ thông tin từ trường TÊN mới được trả về. Kết quả được sắp xếp và trình bày theo thứ tự tăng dần. >db.Employee.find [ {status : "A"}, {NAME: 1} ];>_______6_______Loại trừ trường Để truy vấn ngược lại, hãy chèn { NAME. 0 } lấy danh sách tất cả các trường ngoại trừ trường TÊN. >>db.Employee.find [ {status : "A"}, {NAME: 0} ];>select age, address, status from Employee;Thao tác phức tạp [Ký hiệu dấu chấm]Khi bạn làm việc với các cấu trúc tài liệu phức tạp hơn chẳng hạn như tài liệu chứa mảng hoặc đối tượng nhúng, bạn có thể sử dụng các phương pháp khác để truy vấn từ chúng. >______9_______>db.Employee.find[]0Chèn nhiều tài liệu Để tạo một mảng tài liệu, hãy xác định biến theo tên và gán mảng tài liệu. >______1_______1>db.Employee.find[]2Chèn tài liệu lồng nhauỞ đây, tài liệu địa chỉ được nhúng trong tài liệu. Ngôn ngữ truy vấn MongoDB đáp ứng điều đó, nhưng SQL tuân thủ nghiêm ngặt các cấu trúc thủ tục và không cho phép chèn giá trị vào các trường không tồn tại. >______1_______3db.Employee.find[]4Nhận trạng thái khác biệt Để chỉ trả về các giá trị duy nhất>_______1_______5db.Employee.find[]6Sắp xếp Ví dụ này sắp xếp kết quả dựa trên khóa Tuổi theo thứ tự tăng dần. Sắp xếp theo thứ tự tăng dần trừ khi có quy định khác [cờ -1 cho thứ tự giảm dần]. >______1_______7>db.Employee.find[]8LimitSử dụng hàm limit [] trong Ngôn ngữ truy vấn MongoDB để chỉ định số lượng kết quả mong muốn tối đa. >______1_______9>select * from Employee;0SkipĐể bỏ qua n tài liệu đầu tiên trong tập hợp. Ở đây, n = 5. >______2_______1>select * from Employee;2Aggregatecount [] trả về số lượng tài liệu trong bộ sưu tập được chỉ định. >______2_______3>select * from Employee;4Groupgroup[] có ba tham số. khóa, ban đầu và giảm. Mục đích của nhóm [] và GROUP BY của SQL là trả về một mảng các mục được nhóm. >______2_______5>_______2_______6So sánhSử dụng các tham số đặc biệt $gt, $lt, $gte và $lte để thực hiện phép so sánh lớn hơn và nhỏ hơn trong các truy vấn. >______2_______7>select * from Employee;8Nhiều biểu thức trong tài liệuSử dụng $or để tìm kiếm nhiều biểu thức trong một truy vấn. >______2_______9>>db.Employee.find [ { status : "A" } ]0Thêm các trường vào tài liệuSử dụng $addToSet để thêm dữ liệu vào một mảng. >______3_______1_______1_______4

Dữ liệu mẫu

Dưới đây là đầu ra mẫu trong Ngôn ngữ truy vấn MongoDB

> db.Employee.find[].pretty[].limit[5] { "_id" : ObjectId["5e1503646c7b5d31e73b40c4"],
		"name" : "Ahmed",
		"age" : 1,
		"status" : "B" } { "_id" : ObjectId["5e1503646c7b5d31e73b40c5"],
		"name" : "Bikram",
		"age" : 10,
		"status" : "C" } { "_id" : ObjectId["5e1503646c7b5d31e73b40c6"],
		"name" : "Carlos",
		"age" : 33,
		"status" : "A"
 } { "_id" : ObjectId["5e1503646c7b5d31e73b40c7"],
		"name" : "Davida",
		"age" : 32,
		"status" : "E"
 } { "_id" : ObjectId["5f287f4007ab6ba4d8c601be"],
		"name" : "Etty",
		"age" : "35",
		"status" : "A" } >

Truy vấn MongoDB có chạy nhanh hơn truy vấn RDBMS không?

NoSQL và RDBMS được thiết kế để hỗ trợ các yêu cầu ứng dụng khác nhau. Nhiều doanh nghiệp sử dụng chúng song song

Trong mô hình tài liệu của MongoDB, dữ liệu liên quan được lưu trữ cùng nhau. Trong khi RDBMS sẽ yêu cầu THAM GIA phức tạp để truy xuất dữ liệu trên nhiều bảng, thì việc truy xuất dữ liệu trong một tài liệu thường nhanh hơn. Tuy nhiên, hiệu suất tổng thể của cơ sở dữ liệu — MongoDB hay cách khác — phụ thuộc vào các yếu tố đa dạng như thiết kế cơ sở dữ liệu, tốc độ dữ liệu, loại giao dịch, khối lượng dữ liệu, mẫu truy vấn và thời gian tải

Chủ Đề