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

Cassandra và MongoDB

Cassandra đấu với MongoDB

Bạn đang coi Cassandra hoặc MongoDB là nơi lưu trữ dữ liệu cho dự án tiếp theo của mình? Bạn có muốn so sánh hai cơ sở dữ liệu? Cassandra và MongoDB đều là cơ sở dữ liệu “NoSQL”, nhưng thực tế là chúng rất khác nhau. Chúng có những điểm mạnh và định đề giá trị rất khác nhau - vì vậy bất kỳ sự so sánh nào cũng phải mang một sắc thái riêng. Hãy bắt đầu với các yêu cầu ban đầu… Cả hai cơ sở dữ liệu này đều không thay thế RDBMS, cũng không phải là cơ sở dữ liệu “ACID”. Vì vậy, Nếu bạn có khối lượng công việc giao dịch trong đó chuẩn hóa và nhất quán là yêu cầu chính, thì không cơ sở dữ liệu nào trong số này sẽ phù hợp với bạn. Tốt hơn hết bạn nên gắn bó với các cơ sở dữ liệu quan hệ truyền thống như MySQL, PostgreSQL, Oracle, v.v. Bây giờ chúng ta đã có cơ sở dữ liệu quan hệ, hãy xem xét sự khác biệt chính giữa Cassandra và MongoDB sẽ giúp bạn đưa ra quyết định. Trong bài đăng này, tôi sẽ không thảo luận về các tính năng cụ thể mà sẽ chỉ ra một số khác biệt chiến lược cấp cao để giúp bạn đưa ra lựa chọn của mình.

1. Mô hình đối tượng biểu cảm

MongoDB hỗ trợ một mô hình đối tượng phong phú và biểu cảm. Các đối tượng có thể có các thuộc tính và các đối tượng có thể được lồng vào nhau (cho nhiều cấp độ). Mô hình này rất “hướng đối tượng” và có thể dễ dàng đại diện cho bất kỳ cấu trúc đối tượng nào trong miền của bạn. Bạn cũng có thể lập chỉ mục thuộc tính của bất kỳ đối tượng nào ở bất kỳ cấp độ nào của hệ thống phân cấp - điều này rất mạnh mẽ! Mặt khác, Cassandra cung cấp một cấu trúc bảng khá truyền thống với các hàng và cột. Dữ liệu có cấu trúc hơn và mỗi cột có một loại cụ thể có thể được chỉ định trong quá trình tạo.

Kết luận:Nếu miền có vấn đề của bạn cần một mô hình dữ liệu phong phú, thì dịch vụ lưu trữ MongoDB phù hợp hơn với bạn.

2. Chỉ mục phụ

Chỉ mục phụ là một cấu trúc hạng nhất trong MongoDB. Điều này giúp bạn dễ dàng lập chỉ mục bất kỳ thuộc tính nào của một đối tượng được lưu trữ trong MongoDB ngay cả khi nó được lồng vào nhau. Điều này làm cho nó thực sự dễ dàng truy vấn dựa trên các chỉ mục phụ này. Cassandra chỉ hỗ trợ lướt qua cho các chỉ mục phụ. Các chỉ mục phụ cũng được giới hạn ở các cột đơn và so sánh bình đẳng. Nếu bạn chủ yếu truy vấn bằng khóa chính thì Cassandra sẽ hoạt động tốt cho bạn.

Nhận định:Nếu ứng dụng của bạn cần các chỉ mục phụ và cần sự linh hoạt trong mô hình truy vấn thì MongoDB phù hợp hơn với bạn.

3. Tính khả dụng cao

MongoDB hỗ trợ một mô hình “một cái chính”. Điều này có nghĩa là bạn có một nút chính và một số nút phụ. Trong trường hợp chủ nhân đi xuống, một trong những nô lệ được bầu làm chủ nhân. Quá trình này diễn ra tự động nhưng cần thời gian, thường từ 10-40 giây. Trong thời gian bầu cử lãnh đạo mới này, tập hợp bản sao của bạn không hoạt động và không thể ghi. Điều này hoạt động cho hầu hết các ứng dụng nhưng cuối cùng phụ thuộc vào nhu cầu của bạn. Cassandra hỗ trợ mô hình "nhiều chủ". Việc mất một nút không ảnh hưởng đến khả năng ghi của cụm - vì vậy bạn có thể đạt được 100% thời gian hoạt động để ghi.

Kết luận:Nếu bạn cần 100% thời gian hoạt động thì Cassandra là lựa chọn phù hợp hơn cho bạn.

4. Viết khả năng mở rộng

MongoDB với mô hình “một cái chính” của nó chỉ có thể ghi trên chính. Các máy chủ phụ chỉ có thể được sử dụng để đọc. Vì vậy, về cơ bản nếu bạn có bộ bản sao ba nút, chỉ nút chính đang ghi và hai nút còn lại chỉ được sử dụng để đọc. Điều này hạn chế đáng kể khả năng mở rộng ghi. Bạn có thể triển khai nhiều phân đoạn nhưng về cơ bản chỉ 1/3 số nút dữ liệu của bạn có thể ghi. Cassandra với mô hình “nhiều chủ” có thể ghi trên bất kỳ máy chủ nào. Về cơ bản, khả năng mở rộng ghi của bạn bị giới hạn bởi số lượng máy chủ bạn có trong cụm. Bạn càng có nhiều máy chủ trong cụm, nó sẽ mở rộng quy mô càng tốt.

Kết luận:Nếu khả năng mở rộng ghi là điều của bạn, thì Cassandra phù hợp hơn với bạn.

5. Hỗ trợ ngôn ngữ truy vấn

Cassandra hỗ trợ ngôn ngữ truy vấn CQL rất giống với SQL. Nếu bạn đã có một nhóm các nhà phân tích dữ liệu, họ sẽ có thể chuyển phần lớn các kỹ năng SQL của họ, vốn rất quan trọng đối với các tổ chức lớn. Tuy nhiên CQL không hoàn toàn là ANSI SQL - Nó có một số hạn chế (Không hỗ trợ nối, không có mệnh đề HOẶC) vv MongoDB tại thời điểm này không hỗ trợ ngôn ngữ truy vấn. Các truy vấn được cấu trúc dưới dạng các đoạn JSON.

Kết luận:Nếu bạn cần hỗ trợ ngôn ngữ truy vấn, thì Cassandra là lựa chọn phù hợp hơn cho bạn.

6. Điểm chuẩn hiệu suất

Hãy nói về hiệu suất. Tại thời điểm này, bạn có thể đang mong đợi một so sánh chuẩn hiệu suất của các cơ sở dữ liệu. Tôi đã cố tình không đưa điểm chuẩn hiệu suất vào so sánh. Trong bất kỳ phép so sánh nào, chúng ta phải đảm bảo rằng chúng ta đang so sánh giữa quả táo và quả táo.

1. Mô hình cơ sở dữ liệu - Mô hình / lược đồ cơ sở dữ liệu của ứng dụng đang được thử nghiệm tạo ra sự khác biệt lớn. Một số lược đồ rất phù hợp với MongoDB và một số lược đồ rất phù hợp với Cassandra. Vì vậy, khi so sánh các cơ sở dữ liệu, điều quan trọng là phải sử dụng một mô hình hoạt động tốt cho cả hai cơ sở dữ liệu.
2. Đặc điểm tải - Các đặc tính của tải chuẩn là rất quan trọng. Ví dụ. Trong các điểm chuẩn nặng về ghi, tôi cho rằng Cassandra sẽ hút MongoDB. Tuy nhiên, trong các tiêu chuẩn đọc nhiều, MongoDB và Cassandra sẽ có hiệu suất tương tự nhau.
3. Yêu cầu nhất quán - Đây là một khó khăn. Bạn cần đảm bảo rằng các yêu cầu nhất quán về đọc / ghi được chỉ định là giống hệt nhau trong cả hai cơ sở dữ liệu và không thiên về một người tham gia. Rất thường xuyên trong một số điểm chuẩn của ‘Tiếp thị’, các nút bấm được điều chỉnh để gây bất lợi cho phía bên kia. Vì vậy, hãy chú ý đến cài đặt nhất quán.

Một điều cuối cùng cần ghi nhớ là tải điểm chuẩn có thể phản ánh hoặc không phản ánh hiệu suất của ứng dụng của bạn. Vì vậy, để điểm chuẩn trở nên hữu ích, điều rất quan trọng là phải tìm tải điểm chuẩn phản ánh các đặc điểm hiệu suất của ứng dụng của bạn. Dưới đây là một số điểm chuẩn mà bạn có thể muốn xem:
- Điểm chuẩn hiệu suất NoSQL
- Cassandra so với MongoDB so với Couchbase và HBase

7. Tính dễ sử dụng

Nếu bạn đã hỏi câu hỏi này vài năm trước, MongoDB sẽ là người chiến thắng. Đó là một nhiệm vụ khá đơn giản để thiết lập và chạy MongoDB. Tuy nhiên, trong vài năm gần đây, Cassandra đã đạt được những bước tiến lớn trong khía cạnh này của sản phẩm. Với việc chấp nhận CQL làm giao diện chính cho Cassandra, điều này đã tiến thêm một bước nữa - họ đã làm cho việc sử dụng Cassandra của các lập trình viên SQL trở nên rất đơn giản.

Kết luận:Cả hai đều khá dễ sử dụng và phát triển mạnh.

8. Tổng hợp Gốc

MongoDB có một khung Tổng hợp tích hợp để chạy một đường ống ETL để chuyển đổi dữ liệu được lưu trữ trong cơ sở dữ liệu. Điều này rất tốt cho các công việc vừa và nhỏ nhưng khi nhu cầu xử lý dữ liệu của bạn trở nên phức tạp hơn, khung tổng hợp trở nên khó gỡ lỗi. Cassandra không có một khung tổng hợp tích hợp sẵn. Các công cụ bên ngoài như Hadoop, Spark được sử dụng cho việc này.

9. Mô hình ít giản đồ

Trong MongoDB, bạn có thể chọn không thực thi bất kỳ lược đồ nào trên tài liệu của mình. Mặc dù đây là cài đặt mặc định trong các phiên bản trước nhưng trong phiên bản mới hơn, bạn có tùy chọn để thực thi một lược đồ cho tài liệu của mình. Mỗi tài liệu trong MongoDB có thể là một cấu trúc khác nhau và việc diễn giải dữ liệu tùy thuộc vào ứng dụng của bạn. Mặc dù điều này không liên quan đến hầu hết các ứng dụng, nhưng trong một số trường hợp, tính linh hoạt bổ sung là rất quan trọng. Cassandra trong các phiên bản mới hơn (với CQL là ngôn ngữ mặc định) cung cấp tính năng nhập tĩnh. Bạn cần xác định loại cột trả trước.

Để tóm tắt đây là những khác biệt quan trọng trong biểu mẫu bảng:
Nếu bạn muốn xem toàn bộ đồ họa thông tin, bạn có thể truy cập trang so sánh Cassandra và MongoDB của chúng tôi.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách thực hiện Tìm kiếm Toàn văn trong MongoDB

  2. Mongoose ghi đè lên tài liệu thay vì các trường `$ set`

  3. MongoDB dưới dạng Cơ sở dữ liệu chuỗi thời gian

  4. Nhóm có điều kiện với $ tồn tại bên trong $ cond

  5. Làm cách nào để bạn đổi tên cơ sở dữ liệu MongoDB?