MongoDB so với Cassandra [đã đóng]


738

Tôi đang đánh giá những gì có thể là tùy chọn di chuyển tốt nhất.

Hiện tại, tôi đang sử dụng MySQL (phân vùng ngang), với hầu hết dữ liệu của tôi được lưu trữ trong các đốm màu JSON. Tôi không có bất kỳ truy vấn SQL phức tạp nào (đã được di chuyển đi sau khi tôi phân vùng db).

Ngay bây giờ, có vẻ như cả MongoDB và Cassandra đều có thể là các tùy chọn. Hoàn cảnh của tôi:

  • Đọc nhiều trong mọi truy vấn, viết ít thường xuyên hơn
  • Không lo lắng về khả năng mở rộng "khổng lồ"
  • Quan tâm hơn về thiết lập đơn giản, bảo trì và mã
  • Giảm thiểu chi phí phần cứng / máy chủ

4
Một thống kê điểm chuẩn hiệu suất chính thức có sẵn. Cassandra vs MongoDB vs HBase
Ravi

1
> Rất nhiều lần đọc trong mọi truy vấn, ít ghi thường xuyên hơn => Tìm CQRS (tách riêng các lần đọc của bạn khỏi ghi của bạn mà không cần tìm nguồn cung ứng sự kiện nhưng kiểm tra xem bạn có thể cập nhật mô hình đọc không đồng bộ không .. đồng bộ hóa có thể hoạt động không .. nó phụ thuộc vào việc sử dụng của bạn -case)
bodrin

2
Đây là một câu hỏi tuyệt vời thực sự. Tôi tự hỏi nếu có một phiên bản cập nhật của nó? Cái này bây giờ rất cũ
slashdottir

Câu trả lời:


584

Nhiều lượt đọc trong mọi truy vấn, ít viết thường xuyên hơn

Cả hai cơ sở dữ liệu đều hoạt động tốt khi đọc trong đó tập dữ liệu nóng phù hợp với bộ nhớ. Cả hai cũng nhấn mạnh các mô hình dữ liệu không tham gia (và khuyến khích thay thế không chuẩn hóa) và cả hai đều cung cấp các chỉ mục trên các tài liệu hoặc hàng , mặc dù các chỉ mục của MongoDB hiện linh hoạt hơn.

Công cụ lưu trữ của Cassandra cung cấp khả năng ghi liên tục bất kể tập dữ liệu của bạn lớn đến mức nào. Các bài viết có nhiều vấn đề hơn trong MongoDB, một phần là do công cụ lưu trữ dựa trên b-cây, nhưng nhiều hơn là do khóa đa dạng mà nó thực hiện.

Để phân tích, MongoDB cung cấp bản đồ tùy chỉnh / giảm triển khai; Cassandra cung cấp hỗ trợ Hadoop riêng, bao gồm Hive (kho dữ liệu SQL được xây dựng trên bản đồ / giảm Hadoop) và Pig (ngôn ngữ phân tích dành riêng cho Hadoop mà nhiều người cho là phù hợp hơn với bản đồ / giảm khối lượng công việc so với SQL). Cassandra cũng hỗ trợ sử dụng Spark .

Không lo lắng về khả năng mở rộng "khổng lồ"

Nếu bạn đang xem một máy chủ, MongoDB có lẽ phù hợp hơn. Đối với những người quan tâm hơn về tỷ lệ, kiến ​​trúc không có điểm đơn lẻ của Cassandra sẽ dễ dàng thiết lập và đáng tin cậy hơn. (Khóa ghi toàn cầu của MongoDB cũng có xu hướng trở nên đau đớn hơn.) Cassandra cũng cung cấp nhiều quyền kiểm soát hơn về cách thức sao chép của bạn hoạt động, bao gồm hỗ trợ cho nhiều trung tâm dữ liệu.

Quan tâm hơn về thiết lập đơn giản, bảo trì và mã

Cả hai đều không quan trọng để thiết lập, với các mặc định bên ngoài hợp lý cho một máy chủ. Cassandra đơn giản hơn để thiết lập trong cấu hình nhiều máy chủ vì không có nút vai trò đặc biệt nào phải lo lắng.

Nếu bạn hiện đang sử dụng các đốm màu JSON, MongoDB là một kết hợp cực kỳ tốt cho trường hợp sử dụng của bạn, với điều kiện là nó sử dụng BSON để lưu trữ dữ liệu. Bạn sẽ có thể có dữ liệu phong phú hơn và có thể truy vấn nhiều hơn so với trong cơ sở dữ liệu hiện tại của bạn. Đây sẽ là chiến thắng quan trọng nhất cho Mongo.


86
Hoàn toàn khác nhau, một nhận xét không đủ lớn, nhưng ... Cassandra là một máy phát điện có thể mở rộng tuyến tính (thời gian không đổi được đọc và ghi) kết hợp động / google bigtable có tính năng ghi nhanh bất kể kích thước dữ liệu. Bộ tính năng của nó là tối giản, vượt xa so với cửa hàng giá trị khóa được đặt hàng. MongoDB là một kho lưu trữ tài liệu rất nổi bật (và nhanh chóng) với chi phí cho độ bền và đảm bảo về việc ghi vẫn tồn tại (vì chúng không được ghi ngay vào đĩa). Chúng là những quái thú khác nhau với những triết lý khác nhau, MongoDB gần gũi hơn với sự thay thế RDMS ...
Michael

28
trong khi Cassandra ở cấp độ thấp hơn nhưng cho phép mở rộng quy mô (xem Twitter / Digg / Facebook), nhưng bạn sẽ phải cân nhắc về cách bạn sắp xếp dữ liệu của mình, xây dựng các chỉ mục phụ, v.v., vì không cho phép truy vấn linh hoạt.
Michael

11
Bởi vì tất cả mọi người đã đề cập twitter ở đây liên quan đến Cassandra: họ không sử dụng Cassandra cho các tweet vẫn tồn tại, họ vẫn sử dụng MySQL ở đây ( Engineering.twitter.com/2010/07/cassandra-at-twitter-today.html ). Ok, nhưng tôi có thể tưởng tượng rằng họ vẫn lưu trữ nhiều dữ liệu cho các mục đích khác trong Cassandra.
H6.

7
Có vẻ như khóa ghi toàn cầu có thể đã bị xóa trong Mongo 2.2 ...
Matt Farmer

16
Ngay cả trước khi dự án của tôi đi vào hoạt động, tôi cảm thấy những điểm đau đớn của Mongodb. Sao lưu nóng là một yêu cầu cơ bản. Để thực hiện sao lưu dự phòng trong máy chủ Linux, trước tiên bạn phải thiết lập phân vùng LVM (không phổ biến) và chụp ảnh nhanh trước mỗi phiên sao lưu. Một cách dễ dàng khác là sử dụng dịch vụ sao lưu trả phí Mongodb. Nhưng, dịch vụ đó đắt tiền (2,3 $ / GB / tháng). Bạn sẽ sớm cần một bản sao để chịu lỗi. Với phiên bản nguồn mở, các nút chỉ có thể trao đổi dữ liệu dưới dạng văn bản rõ ràng. Đối với SSL, bạn phải sử dụng phiên bản Entprise. Và đó là 10.000 đô la. Tạm biệt Mongodb. Tái cấu trúc mã của tôi thành Cassandra.
Karthik Sankar

146

Tôi đã sử dụng MongoDB một cách rộng rãi (trong 6 tháng qua), xây dựng một hệ thống quản lý dữ liệu phân cấp và tôi có thể chứng minh cho cả việc dễ dàng thiết lập (cài đặt, chạy, sử dụng nó!) Và tốc độ. Miễn là bạn nghĩ về các chỉ số một cách cẩn thận, nó hoàn toàn có thể hét lên, tốc độ khôn ngoan.

Tôi tập hợp rằng Cassandra, do được sử dụng với các dự án quy mô lớn như Twitter, có chức năng mở rộng tốt hơn, mặc dù nhóm MongoDB đang làm việc ngang bằng ở đó. Tôi nên chỉ ra rằng tôi đã không sử dụng Cassandra ngoài giai đoạn chạy thử, vì vậy tôi không thể nói chi tiết.

Người thay đổi thực sự đối với tôi, khi chúng tôi đánh giá cơ sở dữ liệu NoQuery, là truy vấn - Cassandra về cơ bản chỉ là một kho lưu trữ khóa / giá trị khổng lồ và truy vấn hơi khó hiểu (ít nhất là so với MongoDB), vì vậy về hiệu suất bạn phải sao chép khá nhiều dữ liệu dưới dạng một chỉ mục thủ công. MongoDB, mặt khác, sử dụng mô hình "truy vấn bằng ví dụ".

Ví dụ: giả sử bạn đã có Bộ sưu tập (cách nói MongoDB tương đương với bảng RDMS) có chứa Người dùng. MongoDB lưu trữ các bản ghi dưới dạng Tài liệu, về cơ bản là các đối tượng JSON nhị phân. ví dụ:

{
   FirstName: "John",
   LastName: "Smith",
   Email: "john@smith.com",
   Groups: ["Admin", "User", "SuperUser"]
}

Nếu bạn muốn tìm tất cả người dùng được gọi là Smith có quyền Quản trị viên, bạn chỉ cần tạo một tài liệu mới (tại bảng điều khiển quản trị bằng Javascript hoặc trong sản xuất bằng ngôn ngữ bạn chọn):

{
   LastName: "Smith",
   Groups: "Admin"
}

... Và sau đó chạy truy vấn. Đó là nó. Có các toán tử được thêm vào để so sánh, lọc RegEx, v.v., nhưng tất cả đều khá đơn giản và tài liệu dựa trên Wiki khá tốt.


54
Cập nhật (ngày 8 tháng 8 năm 2011): Trung tâm dữ liệu Ireland EC2 của Amazon đã xảy ra sự cố liên quan đến sét đêm qua và khi phân loại phục hồi máy chủ của chúng tôi, tôi đã phát hiện ra một điểm khá quan trọng: nếu bạn có một bản sao của hai máy chủ (và chúng Thật dễ dàng để thiết lập), hãy đảm bảo bạn có nút Arbiter, vì vậy nếu một nút bị hỏng, nút kia sẽ không hoảng loạn và bị đình trệ ở chế độ Thứ cấp! Tin tôi đi, đó là một nỗi đau ở phía sau để sắp xếp với một cơ sở dữ liệu lớn.
Richard K.

8
để thêm những gì @Richard K đã nói, bạn nên có nút arbiter khi bạn có số nút chẵn (chính + phụ) trong một bộ bản sao.
Amareswar

Đã thêm vào đó xem xét mongodb khi tổng hợp nhiều hơn được thực hiện trên phân tích dữ liệu.
user1503117

As long as you think about indexes carefully, it can absolutely scream along, speed-wise.Đợi cho đến khi bộ nhớ vật lý của bạn đầy và hệ điều hành bắt đầu lỗi trang lol
sturcotte06

117

Tại sao phải chọn giữa cơ sở dữ liệu truyền thống và kho lưu trữ dữ liệu NoQuery? Sử dụng cả hai! Vấn đề với các giải pháp NoQuery (vượt ra ngoài đường cong học tập ban đầu) là thiếu giao dịch - bạn thực hiện tất cả các bản cập nhật cho MySQL và có MySQL lưu trữ dữ liệu NoQuery để đọc - sau đó bạn được hưởng lợi từ mỗi thế mạnh của công nghệ. Điều này không thêm phức tạp, nhưng bạn đã có phía MySQL - chỉ cần thêm MongoDB, Cassandra, v.v. vào hỗn hợp.

Các kho dữ liệu của NoQuery thường có quy mô tốt hơn so với DB truyền thống cho cùng một thông số kỹ thuật khác - có một lý do tại sao Facebook, Twitter, Google và hầu hết các công ty mới khởi nghiệp đang sử dụng các giải pháp NoQuery. Đó không chỉ là những người đam mê công nghệ mới.


8
Tôi hoàn toàn đồng ý. Tôi đang sử dụng mongodb + mysql trong một trong những sản phẩm sắp ra mắt mà tôi đang kiến ​​trúc. Nó là một đám mây sản phẩm tài chính sắp tới. mysql được sử dụng khi chúng ta thực sự cần khả năng giao dịch. mongodb được sử dụng để lưu trữ các cấu trúc dữ liệu phức tạp không tính toán mà chỉ cần được kéo lên khi có yêu cầu. làm việc tốt cho đến nay. :)
Ram trên Rails-n-React

Tôi cũng đã sử dụng một cách tiếp cận kép như vậy trong hầu hết các dự án của mình và trong một số trường hợp khác, hệ thống tệp được gắn NFS đã được sử dụng cùng với PostgreQuery cho các đốm địa chấn gần 1 Gb trong một số trường hợp. Đường dẫn là một loại truy vấn đến cơ sở dữ liệu khóa.
Audrius Meskauskas

1
Dưới đây là một liên kết đến một câu hỏi tôi hỏi về làm thế nào để kiến trúc sư cả sql và NoSQL cơ sở dữ liệu: dba.stackexchange.com/questions/102053/... tôi có thể sử dụng một số cái nhìn sâu sắc bạn có thể có
j sẽ

Anh ta đã thoát khỏi các giao dịch tốt => bây giờ khả năng mở rộng vô hạn có thể có thể .. nếu không -> không :)
bodrin

1
Đây không phải là một giải pháp tốt nếu dữ liệu của bạn được phân phối
Esteban Verbel

60

Có lẽ tôi sẽ trở thành một người kỳ quặc, nhưng tôi nghĩ bạn cần ở lại với MySQL. Bạn chưa mô tả một vấn đề thực sự cần giải quyết và MySQL / InnoDB là một back-end lưu trữ tuyệt vời ngay cả đối với dữ liệu blob / json.

Có một mẹo phổ biến giữa các kỹ sư Web là cố gắng sử dụng nhiều NoQuery hơn ngay khi nhận ra rằng không phải tất cả các tính năng của RDBMS đều được sử dụng. Điều này một mình không phải là một lý do chính đáng, vì hầu hết các cơ sở dữ liệu NoQuery thường có các công cụ dữ liệu khá kém (thứ mà MySQL gọi là công cụ lưu trữ).

Bây giờ, nếu bạn không thuộc loại đó, thì vui lòng chỉ định những gì còn thiếu trong MySQL và bạn đang tìm kiếm trong một cơ sở dữ liệu khác (như, tự động tắt, chuyển đổi dự phòng tự động, sao chép đa chủ, đảm bảo tính nhất quán dữ liệu yếu hơn trong cụm thanh toán trong thông lượng ghi cao hơn, vv).


13
Anh ta đang sử dụng shending, có nghĩa là dữ liệu của anh ta được phân vùng thủ công trên các máy chủ. Mongodb có thể tự động hóa shending, có thể là một lợi ích.
fabspro

18
Anh ta cũng đang lưu trữ hầu hết các đốm màu JSON trong RDBMS - khiến cho thiết kế quan hệ (tính năng) trở nên vô dụng.
Damir Sudarevic

4
Các mô hình dữ liệu và sharding tự động có thực sự khác nhau, nhưng khi lựa chọn một cơ sở dữ liệu, bạn cần phải xem xét các công cụ lưu trữ đầu tiên , và phần còn lại của chuông và còi thứ hai. Làm thế nào là công cụ lưu trữ sẽ thực hiện dưới một tải tăng đột biến? Làm thế nào là tính năng tự động lưu trữ sẽ thực hiện theo một luồng dữ liệu tăng đột biến? Trước khi bạn từ bỏ quyền kiểm soát cơ sở dữ liệu cho các khía cạnh quan trọng này, tốt hơn hết bạn nên đảm bảo rằng nó sẽ có khả năng thực hiện nhiệm vụ.
Kostja

7
Mô hình quan hệ là một trong những mô hình dữ liệu chu đáo và hiệu quả nhất để thực hiện và tiết kiệm. "Kết xuất các tính năng thiết kế quan hệ vô dụng" có thể liên quan đến các ràng buộc, kích hoạt hoặc tính toàn vẹn tham chiếu - nhưng tất cả những thứ này đều được trả cho mỗi lần sử dụng.
Kostja

20

Tôi chưa sử dụng Cassandra, nhưng tôi đã sử dụng MongoDB và nghĩ rằng nó thật tuyệt vời.

Nếu bạn đang thiết lập đơn giản, thì đây là: Bạn chỉ cần gỡ bỏ MongoDB và chạy trình nền mongod và đó là ... nó đang chạy.

Rõ ràng đó chỉ là một khởi đầu, nhưng để giúp bạn bắt đầu thì thật dễ dàng.


22
AFAIK, điều tương tự cũng áp dụng cho Cassandra. Untar, chạy daemon. Các cụm thử nghiệm được thiết lập và sẵn sàng để sản xuất!
vào

13

Tôi đã thấy một bài thuyết trình trên mongodb ngày hôm qua. Tôi chắc chắn có thể nói rằng thiết lập là "đơn giản", đơn giản như giải nén nó và kích hoạt nó. Làm xong.

Tôi tin rằng cả mongodb và cassandra sẽ chạy trên hầu hết mọi phần cứng linux thông thường, do đó bạn không nên tìm thấy nhiều rào cản trong khu vực đó.

Tôi nghĩ rằng trong trường hợp này, vào cuối ngày, cá nhân bạn sẽ cảm thấy thoải mái hơn và có bộ công cụ nào bạn thích. Theo như bài thuyết trình về mongodb, người trình bày đã chỉ ra rằng bộ công cụ cho mongodb khá nhẹ và có rất nhiều công cụ (họ nói thực sự) tương tự như những gì có sẵn cho MySQL. Tất nhiên đây là kinh nghiệm của họ nên YMMV. Một điều mà tôi rất thích về mongodb là dường như có rất nhiều ngôn ngữ hỗ trợ cho nó (Python và .NET là hai ngôn ngữ mà tôi chủ yếu sử dụng).

Danh sách các trang web sử dụng mongodb khá ấn tượng và tôi biết rằng twitter mới chuyển sang sử dụng cassandra.


4
Vào cuối ngày, nó là so sánh táo và cam. Cả hai cơ sở dữ liệu đều có thế mạnh riêng. Dưới đây là một số điều cần xem xét - Mô hình đối tượng, Chỉ mục phụ, khả năng mở rộng, khả năng sẵn sàng cao, v.v. có một bài đăng trên blog giải thích sự khác biệt chiến lược cấp cao giữa mongodb và cassandra ở đây - scalegrid.io/blog/cassandra-vs-mongodb
Dharshan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.