Tiết lộ: Tôi là nhân viên của MySQL, làm việc trên MySQL Cluster.
Tôi có thể nói rằng MySQL Cluster có thể đạt được thông lượng / máy chủ cao hơn so với MySQL + InnoDB đã loại bỏ với điều kiện:
- Truy vấn rất đơn giản
- Tất cả dữ liệu phù hợp trong bộ nhớ
Về độ trễ, MySQL Cluster nên có độ trễ ổn định hơn so với MySQL bị loại bỏ. Độ trễ thực tế cho dữ liệu hoàn toàn trong bộ nhớ có thể tương tự nhau.
Khi các truy vấn trở nên phức tạp hơn và dữ liệu được lưu trữ trên đĩa, việc so sánh hiệu suất trở nên khó hiểu hơn. Để có câu trả lời cụ thể hơn, bạn cần mô tả thêm về ứng dụng của mình và các truy vấn bạn thực hiện, cũng như số lượng máy chủ và khối lượng dữ liệu. MySQL Cluster gần đây đã đạt được thực thi truy vấn cục bộ (AQL) song song, có nghĩa là nó có thể cạnh tranh với MySQLD độc lập mặc dù có dữ liệu được phân phối trên nhiều máy chủ.
MySQL Cluster hiện bị giới hạn ở 'shending' trên 48 máy chủ. MySQL sharded trong lý thuyết không có giới hạn. Tuy nhiên, đối với thông lượng mục tiêu nhất định, có thể cần ít máy chủ cụm MySQL hơn so với máy chủ MySQL bị loại bỏ.
Sự khác biệt thú vị hơn là khi bạn nhìn vào các lĩnh vực khác ngoài hiệu suất:
- MySQL Cluster hỗ trợ các truy vấn tùy ý trên tất cả các phân đoạn
- MySQL Cluster hỗ trợ các giao dịch tùy ý trên tất cả các phân đoạn
- MySQL Cluster hỗ trợ sao chép đồng bộ các phân đoạn với chuyển đổi dự phòng và phục hồi tự động
- MySQL Cluster hỗ trợ thêm nút trực tuyến (mở rộng cụm)
- MySQL sharded là 'cuộn của riêng bạn'
Việc tích hợp sẵn trong ứng dụng của bạn mang lại cho bạn tiềm năng mở rộng tối đa, nhưng thêm sự phức tạp và hạn chế tính linh hoạt của bạn về các truy vấn và hoạt động chéo. Nếu shending của bạn là sớm thì nó có thể là gốc rễ của một số vấn đề cho bạn. MySQL Cluster cho phép bạn nhận được một số lợi ích của shending mà không phải buộc ứng dụng của bạn trở thành một phân đoạn duy nhất.
Về câu trả lời trước, một vài làm rõ:
"Mặc dù MySQL Cluster là khiếu nại ACID, nhưng nó không cung cấp một công cụ lưu trữ phù hợp cho dữ liệu với các khóa ghép."
MySQL Cluster hỗ trợ các khóa chính và khóa phụ. Không chắc chắn những gì không 'phù hợp' về nó. Có lẽ các poster trước có thể giải thích?
"Để có dữ liệu có cùng đặc điểm khóa được lưu trữ trong một tập hợp các nút dữ liệu cụ thể, bạn có thể thực hiện các thao tác sau:
- Lấy tất cả các nút dữ liệu ngoại tuyến, chỉ để lại các nút dữ liệu mà bạn muốn chứa dữ liệu có cùng đặc điểm chính.
- Tải dữ liệu của bạn vào Cụm MySQL, chỉ chứa các nút dữ liệu đã chọn của bạn
- Đưa tất cả các nút dữ liệu trở lại trực tuyến "
Điều này là không chính xác. Phân phối dữ liệu độc lập với các nút xảy ra trực tuyến bất cứ lúc nào. MySQL Cluster hỗ trợ các sơ đồ phân phối dữ liệu khác nhau để hỗ trợ các tối ưu hóa mà bạn mô tả. Tôi mô tả phân phối dữ liệu trong MySQL Cluster trong một bài đăng trên blog ở đây: Phân phối dữ liệu trong MySQL Cluster