MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Cuộc chiến của các cơ sở dữ liệu NoSQL - So sánh MongoDB và CouchDB

MongoDB và CouchDB đều là loại cơ sở dữ liệu NoSQL dựa trên tài liệu. Cơ sở dữ liệu tài liệu còn được gọi là kho lưu trữ mdocument, và chúng thường được sử dụng để lưu trữ định dạng tài liệu của dữ liệu bán cấu trúc và mô tả chi tiết về nó. Nó cho phép tạo và cập nhật các chương trình mà không cần tham chiếu đến lược đồ tổng thể. Quản lý nội dung và xử lý dữ liệu trong ứng dụng di động là hai trong số các lĩnh vực mà kho tài liệu có thể được áp dụng.

Tổng quan về MongoDB

MongoDB là công ty khởi nghiệp của 10gen, có nguồn gốc từ năm 2007. Xuất thân từ gia đình cửa hàng Tài liệu, nó là một trong những cơ sở dữ liệu NoSQL, không có lược đồ điển hình với hiệu suất tương đối cao, khả năng mở rộng và phong phú. trong các chức năng xử lý dữ liệu. Cơ sở dữ liệu mã nguồn mở này được viết bằng C ++ và sử dụng các lược đồ động. Kiến trúc của MongoDB chứa các tài liệu được nhóm thành các bộ sưu tập dựa trên cấu trúc của chúng. Cơ sở dữ liệu này sử dụng BSON. BSON là đại diện nhị phân của JSON và hỗ trợ lưu trữ tài liệu và trao đổi dữ liệu. Trong MongoDB, các chủ đề nghiệp vụ có thể được lưu trữ trong một số lượng tài liệu tối thiểu, có thể được lập chỉ mục chủ yếu hoặc thứ hai mà không cần chia chúng thành nhiều tài liệu quan hệ.

Cùng với các khả năng nêu trên của MongoDB, nó cũng cung cấp một bộ sưu tập các bộ bản sao lớn trong đó mỗi bộ có thể chứa nhiều hơn một bản sao dữ liệu. Trong bộ sao, tất cả các chức năng chính (đọc và ghi) được thực hiện trên bộ chính trong khi bộ thứ cấp được sử dụng trong trường hợp bộ cũ bị hỏng. MongoDB kết hợp sharding, sử dụng quá trình chia tỷ lệ theo chiều ngang. Thuộc tính cân bằng tải của cơ sở dữ liệu lưu trữ tài liệu này được chứng minh bởi thực tế là nó chạy trên nhiều máy chủ, do đó cung cấp sự trùng lặp dữ liệu và cân bằng tải. Đổi lại, nó cũng cung cấp bản sao lưu trong quá trình phần cứng bị lỗi. Nó cũng sử dụng hệ thống tệp lưới để chia tệp cụ thể thành các phần khác nhau và lưu trữ chúng riêng biệt.

Các tính năng chung của MongoDB:

  • Thiết kế mô hình dữ liệu làm giảm nhu cầu liên kết và cung cấp sự phát triển dễ dàng của giản đồ.
  • Hiệu suất cao, vì nó không chứa tham gia cũng như giao dịch giúp truy cập nhanh và do đó hiệu suất được tăng lên.
  • Tính khả dụng cao do kết hợp các bộ bản sao có khả năng cung cấp dự phòng khi hỏng hóc và cũng rất mạnh mẽ.
  • Khả năng mở rộng dễ dàng.
  • Thuộc tính sharding của MongoDB cho phép nó hoạt động nhanh chóng và hiệu quả trong các chức năng được phân phối. Điều này cũng có thể thực hiện được vì nó hỗ trợ chia tỷ lệ dữ liệu theo chiều ngang.
  • Ngôn ngữ truy vấn rất phong phú. MongoDB có ngôn ngữ truy vấn riêng được gọi là ngôn ngữ truy vấn Mongo, có thể thay thế ngôn ngữ truy vấn SQL. Tương tự, các chức năng tiện ích và ánh xạ hoặc giảm bớt có thể thay thế các chức năng tổng hợp phức tạp.
Hình 1:Kiến trúc MongoDB

Tổng quan về CouchDB

CouchDB, một Sản phẩm của Apache Software Foundation và được lấy cảm hứng từ Lotus Notes, cũng là một cơ sở dữ liệu NoSQL dựa trên tài liệu mã nguồn mở, chủ yếu tập trung vào việc sử dụng dễ dàng. Nó là một cơ sở dữ liệu nút đơn, hoạt động giống hệt như các cơ sở dữ liệu khác. Nó thường bắt đầu với phiên bản nút đơn nhưng có thể được nâng cấp liền mạch lên cụm. Nó cho phép người dùng chạy một cơ sở dữ liệu duy nhất trên nhiều máy chủ hoặc máy ảo. Một cụm CouchDB cung cấp khả năng và tính sẵn sàng cao so với CouchDB một nút. Nó sử dụng Erlang, một ngôn ngữ có mục đích chung. Giống như MongoDB, nó cũng sử dụng javascript và map / Reduce. Nó lưu trữ dữ liệu dưới dạng một tập hợp các tài liệu hơn là dưới dạng bảng. CouchDB được cập nhật là không khóa, có nghĩa là không cần khóa cơ sở dữ liệu trong khi ghi. Các tài liệu trong cơ sở dữ liệu này cũng sử dụng giao thức HTTP và JSON, cùng với khả năng đính kèm các tệp không phải JSON vào chúng. Vì vậy, CouchDB tương thích với bất kỳ ứng dụng hoặc phần mềm nào hỗ trợ định dạng JSON.

Các tính năng chung của CouchDB

  • Máy chủ CouchDB lưu trữ cơ sở dữ liệu có tên, lưu trữ tài liệu có tên duy nhất trong cơ sở dữ liệu và CouchDB cung cấp API RESTful HTTP để đọc và cập nhật (thêm, chỉnh sửa, xóa) tài liệu cơ sở dữ liệu
  • CouchDB cung cấp GUI dựa trên trình duyệt để xử lý dữ liệu, quyền và cấu hình.
  • CouchDB cung cấp hình thức sao chép đơn giản nhất.
  • CouchDB hỗ trợ xác thực và hỗ trợ phiên:để giữ cho xác thực mở thông qua cookie phiên như một ứng dụng web.
  • CouchDB cung cấp bảo mật cấp cơ sở dữ liệu trong đó các quyền của cơ sở dữ liệu được phân tách thành trình đọc và quản trị viên. Người đọc được phép đọc và ghi vào cơ sở dữ liệu CouchDB.
  • CouchDB xác thực dữ liệu được chèn vào cơ sở dữ liệu bằng cách sử dụng xác thực để xác minh người tạo và id phiên đăng nhập là giống nhau.
Hình 2:Kiến trúc CouchDB

API REST được sử dụng để viết và truy vấn dữ liệu . Nó cũng cung cấp khả năng đọc, thêm, chỉnh sửa và xóa tài liệu. Nó sử dụng mô hình ACID thay vì triển khai BASE by MVCC. Cũng giống như MongoDB hỗ trợ sao chép các thiết bị khi chúng ngoại tuyến. Nó sử dụng một mô hình sao chép đặc biệt được gọi là Tính nhất quán cuối cùng. CouchDB có độ tin cậy cao và nghiêm túc về mặt dữ liệu. Cơ sở dữ liệu một nút sử dụng cấu trúc dữ liệu chống sự cố chỉ phần phụ và cơ sở dữ liệu đa chế độ hoặc cụm có thể lưu dự phòng dữ liệu để có thể cung cấp dữ liệu bất cứ khi nào người dùng cần. CouchDB có thể được mở rộng theo các cụm lớn như cụm toàn cầu đến các cụm nhỏ như thiết bị di động. Khả năng chạy trên mọi thiết bị Android hoặc iOS làm cho CouchDB nổi bật trong số các cơ sở dữ liệu khác.

Kiến trúc CouchDB được phân phối, hỗ trợ đồng bộ hóa hai chiều. Nó không yêu cầu bất kỳ lược đồ nào vì nó sử dụng một id duy nhất. Mặc dù CouchDB tuân theo tính năng AP (tính khả dụng và khả năng chịu phân vùng) của mô hình CAP, để khắc phục tính nhất quán được giao dịch, nó tuân theo mô hình ACID trên cơ sở thực tế.

So sánh giữa CouchDB và MongoDB

Tính năng So sánh

CouchDB

MongoDB

Mô hình Dữ liệu

Nó tuân theo mô hình hướng tài liệu và dữ liệu được trình bày ở định dạng JSON.

Nó tuân theo mô hình hướng tài liệu, nhưng dữ liệu được trình bày ở định dạng BSON.

Giao diện

CouchDB sử dụng giao diện dựa trên HTTP / REST. Nó rất trực quan và được thiết kế rất tốt.

MongoDB sử dụng giao thức nhị phân và giao thức tùy chỉnh qua TCP / IP.

Lưu trữ Đối tượng

Trong CouchDB, cơ sở dữ liệu chứa các tài liệu.

Trong MongoDB, cơ sở dữ liệu chứa các bộ sưu tập và bộ sưu tập chứa các tài liệu.

Tốc độ

Tốc độ đọc rất quan trọng đối với cơ sở dữ liệu, MongoDB nhanh hơn CouchDB

MongoDB cung cấp tốc độ đọc nhanh hơn.

Hỗ trợ Di động

CouchDB có thể chạy trên các thiết bị Apple iOS và Android, cung cấp hỗ trợ cho các thiết bị di động.

Không cung cấp hỗ trợ di động

Kích thước

Cơ sở dữ liệu có thể phát triển với CouchDB; MongoDB phù hợp hơn để tăng trưởng nhanh khi cấu trúc không được xác định rõ ràng ngay từ đầu.

Nếu chúng ta có cơ sở dữ liệu đang phát triển nhanh chóng, MongoDB là lựa chọn tốt hơn.

Phương thức Truy vấn

Truy vấn sử dụng chức năng thu nhỏ bản đồ. Mặc dù đây có thể là một giải pháp tốt, nhưng những người có kinh nghiệm SQL truyền thống sẽ khó học hơn.

MongoDB tuân theo Map / Reduce (JavaScript) tạo bộ sưu tập + ngôn ngữ truy vấn dựa trên đối tượng. Đối với người dùng có kiến ​​thức SQL, MongoDB dễ học hơn vì nó gần gũi hơn về cú pháp.

Sao chép

CouchDB hỗ trợ sao chép chính-cái với các chức năng giải quyết xung đột tùy chỉnh.

MongoDB hỗ trợ sao chép master-slave.

Đồng tiền

Nó tuân theo MVCC (Kiểm soát đồng thời nhiều phiên bản).

Cập nhật tại chỗ.

Tùy chọn

CouchDB ủng hộ tính khả dụng.

MongoDB ủng hộ tính nhất quán.

Hiệu suất nhất quán

CouchDB an toàn hơn MongoDB.

MongoDB, cơ sở dữ liệu chứa bộ sưu tập và bộ sưu tập chứa tài liệu.

Nhất quán

CouchDB cuối cùng cũng nhất quán.

MongoDB rất nhất quán.

Viết bằng

Nó được viết bằng Erlang.

Nó được viết bằng C ++.

Phân tích

Nếu chúng ta yêu cầu một cơ sở dữ liệu chạy trên thiết bị di động, cần sao chép tổng thể hoặc độ bền của một máy chủ, thì CouchDB là một lựa chọn tuyệt vời.

Nếu chúng ta đang tìm kiếm thông lượng tối đa hoặc có cơ sở dữ liệu đang phát triển nhanh chóng, MongoDB là lựa chọn phù hợp.

CouchDB và MongoDB:Các truy vấn hoàn toàn khác nhau

CouchDB và MongDB là các kho dữ liệu hướng tài liệu hoạt động với các tài liệu JSON nhưng khi nói đến truy vấn, cả hai cơ sở dữ liệu không thể khác nhau được nữa. CouchDB yêu cầu các dạng xem được xác định trước (về cơ bản là các hàm MapReduce của JavaScript) và MongoDB hỗ trợ các truy vấn động (về cơ bản chúng ta đã quen với các truy vấn SQL ad-hoc RDBMS thông thường).

Ví dụ:để chèn một số dữ liệu trong CouchDB bằng cách sử dụng Groovy’s RESTClient và phát hành một bài đăng RESTful như sau:

import static groovyx.net.http.ContentType.JSON

import groovyx.net.http.RESTClient

 def client = new RESTClient("http://localhost:5498/")

response = client.put(path: "parking_tickets/1280002020",

  contentType: JSON,

  requestContentType:  JSON,

  body: [officer: "Micheal Jordan",

      location: "189 Berkely Road",

      vehicle_plate: "KL5800",

      offense: "Parked in no parking zone",

      date: "2020/02/01"])

Mã mẫu một hàm để truy vấn bất kỳ tài liệu nào có thuộc tính viên chức là “Micheal Jordan”:

Hàm
function(doc) {

  if(doc.officer == "Micheal Jordan"){

emit(null, doc);

  }

}

Khi chúng tôi đưa ra yêu cầu HTTP GET cho tên của chế độ xem đó, chúng tôi có thể mong đợi ít nhất một tài liệu như sau:

response = client.get(path: "parking_tickets/_view/by_name/officer_grey",

     contentType: JSON, requestContentType: JSON)

assert response.data.total_rows == 1

response.data.rows.each{

   assert it.value.officer == "Micheal Jordan"

}

MongoDB hoạt động giống như chúng ta đã quen với cơ sở dữ liệu thông thường:chúng ta có thể truy vấn bất cứ điều gì mà trái tim chúng ta mong muốn trong thời gian chạy.

Chèn cùng một phiên bản vé đỗ xe bằng trình điều khiển Java gốc của MongoDB:

DBCollection coll = db.getCollection("parking_tickets");

BasicDBObject doc = new BasicDBObject();



doc.put("officer", "Micheal Jordan");

doc.put("location", "189 Berkely Road ");

doc.put("vehicle_plate", "KL5800");

//...

coll.insert(doc);

Để truy vấn bất kỳ phiếu nào từ MongoDB do Sĩ quan Micheal Jordan cấp bằng cách chỉ cần đưa ra một truy vấn trên thuộc tính viên chức:

BasicDBObject query = new BasicDBObject();

query.put("officer", "Micheal Jordan");

DBCursor cur = coll.find(query);

while (cur.hasNext()) {

   System.out.println(cur.next());

}

Kết luận

Trong blog này, chúng tôi đã so sánh hai cơ sở dữ liệu NoSQL dựa trên tài liệu - MongoDB và CouchDB. Bảng này cung cấp một cái nhìn tổng quan về các so sánh tham số chính giữa hai cơ sở dữ liệu này. Như chúng ta đã thấy, mức độ ưu tiên của dự án sẽ quyết định việc lựa chọn hệ thống. Sự khác biệt chính bao gồm phương pháp nhân rộng và hỗ trợ nền tảng. Ngoài ra, từ các so sánh, rõ ràng là nếu ứng dụng đòi hỏi hiệu quả và tốc độ cao hơn, thì MongoDB là lựa chọn tốt hơn so với CouchDB. Nếu người dùng cần chạy cơ sở dữ liệu của mình trên thiết bị di động và cũng cần sao chép nhiều chủ thì CouchDB là một lựa chọn hiển nhiên. Ngoài ra, MongoDB phù hợp hơn CouchDB nếu cơ sở dữ liệu đang phát triển nhanh chóng. Ưu điểm chính của việc sử dụng CouchDB là nó được hỗ trợ trên thiết bị di động (Android và iOS) hơn là MongoDB. Vì vậy, về cơ bản, các yêu cầu ứng dụng khác nhau sẽ yêu cầu các cơ sở dữ liệu khác nhau dựa trên các tình huống.

Chúng tôi đã nhận thấy rằng MongoDB tốt hơn một chút so với CouchDB vì nó sử dụng cấu trúc giống SQL để truy vấn và điều này cũng dễ dàng hơn trong cấu trúc trước đây. Ngoài ra, để sử dụng các truy vấn động, MongoDB là một lựa chọn tốt hơn nhiều. Về bảo mật trong cả hai cơ sở dữ liệu, nghiên cứu vẫn đang tiếp tục và khó có thể nói cơ sở dữ liệu nào trong số này cung cấp một môi trường tốt hơn và an toàn.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Lưu trữ tệp vào MongoDB bằng Multer trong Mongoose

  2. Làm cách nào để xóa tài liệu bằng Node.js Mongoose?

  3. Cách cập nhật tài liệu con trong mongodb

  4. Cách sử dụng mô hình hóa dữ liệu MongoDB để cải thiện hoạt động thông lượng

  5. Đếm trong kho lưu trữ MongoDB của Spring Data