MySQL Shending vs MySQL Cluster


12

Chỉ xem xét hiệu suất , một cụm MySQL có thể đánh bại một giải pháp tùy chỉnh dữ liệu MySQL không? shending = phân vùng ngang

Ví dụ, khi tôi đề cập đến shending, tôi đang xem xét shending được tạo trong lớp ứng dụng, phân phối các bản ghi đồng đều trên các phiên bản MySQL độc lập. Đối với hai máy chủ, nó có thể là (khóa mod 2).

Câu trả lời:


21

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:

  1. 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.
  2. 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
  3. Đư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


Này, kẻ lừa đảo. Tôi đọc các liên kết bạn cung cấp. Chỉ để làm rõ, nhận xét 'khóa ghép' của tôi dựa trên các chỉ mục không duy nhất. Công ty chủ nhân của tôi đã dùng thử MySQL Cluster vào khoảng năm 2007 Q1 và không thích nó vì hiệu suất kém. IMHO đó là sự lựa chọn nghèo nàn của khách hàng đối với các khóa (số lượng nhỏ) và các truy vấn của anh ta. MySQL Cluster phải trưởng thành hơn kể từ đó dựa trên liên kết của bạn. Theo tuyên bố thứ hai của tôi, đây là số lượng người dùng MongoDB cư trú trong các phân đoạn cụ thể. Một số khách hàng của chủ nhân của tôi đã thực hiện điều này với các thiết lập MySQL tùy chỉnh của họ.
RolandoMySQLDBA

Trong liên kết của bạn, nó đã đề cập đến 'quét chỉ mục theo thứ tự' không thể cắt xén, vì các hàng khớp không được đảm bảo được lưu trữ trong một đoạn bảng. Đây là lý do tại sao tôi đề xuất cách ly dữ liệu với các phân đoạn cụ thể (các nút dữ liệu) để giảm thiểu dữ liệu địa điểm sẽ lan truyền. Vì câu trả lời của bạn đưa ra mặt tích cực của MySQL Cluster, nó phù hợp hơn với câu hỏi được đăng ban đầu. Câu trả lời của tôi sai về sự thận trọng, bi quan và hơi ngây thơ về sức mạnh của cụm Cluster ngày nay.
RolandoMySQLDBA

Thay cho lời ca tụng và ca ngợi của tôi, +1 cho câu trả lời của bạn !!!
RolandoMySQLDBA

Xin chào Rolando, Cảm ơn bạn đã làm rõ tuyên bố của bạn. Đúng là quét chỉ mục không được cắt tỉa là 'đắt' trong Cụm, vì tất cả các nút dữ liệu đều có liên quan. Nghe có vẻ như những lần quét này trên các chỉ số cardinality thấp sẽ đắt trên bất kỳ hệ thống nào, nhưng trên Cluster chúng trở nên đắt đỏ rõ rệt. Sự thận trọng và bi quan của bạn chắc chắn đã cứu bạn nhiều hơn một lần :) Cảm ơn vì +1
Frazer Clement
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.