Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Các giải pháp chia tỷ lệ cho MySQL (Nhân rộng, Phân cụm)

Tôi đã đọc RẤT NHIỀU về các tùy chọn có sẵn. Tôi cũng đã có trong tay phiên bản thứ 2 của MySQL hiệu suất cao, mà tôi thực sự khuyên bạn nên sử dụng.

Đây là những gì tôi đã cố gắng để tổng hợp lại:

Phân cụm

Theo nghĩa chung, phân cụm là phân phối tải trên nhiều máy chủ xuất hiện cho một ứng dụng bên ngoài dưới dạng một máy chủ.

MySQL NDB Cluster

MySQL NDB Cluster là một công cụ lưu trữ phân tán, trong bộ nhớ, không chia sẻ gì với tính năng sao chép đồng bộ và phân vùng dữ liệu tự động (xin lỗi, tôi mượn nghĩa đen từ cuốn sách Hiệu suất cao, nhưng họ đặt nó rất hay ở đó). Nó có thể là một giải pháp hiệu suất cao cho một số ứng dụng, nhưng ứng dụng web nói chung không hoạt động tốt trên nó.

Vấn đề chính là ngoài các truy vấn rất đơn giản (chỉ chạm vào một bảng), cụm thường sẽ phải tìm kiếm dữ liệu trên một số nút, cho phép độ trễ mạng tăng lên và làm chậm đáng kể thời gian hoàn thành cho các truy vấn. Vì ứng dụng coi cụm như một máy tính nên nó không thể cho nó biết nút nào để tìm nạp dữ liệu từ đó.

Ngoài ra, yêu cầu trong bộ nhớ không khả thi đối với nhiều cơ sở dữ liệu lớn.

Sequoia liên tục

Đây là một giải pháp phân cụm khác cho MySQL, hoạt động như một phần mềm trung gian trên máy chủ MySQL. Nó cung cấp nhân rộng đồng bộ, cân bằng tải và chuyển đổi dự phòng. Nó cũng đảm bảo rằng các yêu cầu luôn nhận được dữ liệu từ bản sao mới nhất, tự động chọn một nút có dữ liệu mới.

Tôi đã đọc một số những điều hay về nó, và nhìn chung, nó có vẻ khá hứa hẹn.

Liên kết

Liên kết tương tự như phân cụm, vì vậy tôi cũng kéo nó ở đây. MySQL cung cấp liên kết thông qua công cụ lưu trữ liên kết. Tương tự như giải pháp cụm NDB, nó chỉ hoạt động tốt với các truy vấn đơn giản - nhưng thậm chí còn tệ hơn với giải pháp cụm phức tạp (vì độ trễ mạng cao hơn nhiều).

Nhân rộng và cân bằng tải

MySQL được tích hợp sẵn khả năng tạo bản sao của cơ sở dữ liệu trên các máy chủ khác nhau. Điều này có thể được sử dụng cho nhiều việc - chia nhỏ tải giữa các máy chủ, sao lưu nóng, tạo máy chủ thử nghiệm và chuyển đổi dự phòng.

Thiết lập cơ bản của sao chép liên quan đến một máy chủ chủ xử lý chủ yếu là ghi và một hoặc nhiều nô lệ xử lý chỉ đọc. Một biến thể nâng cao hơn là của master-master cấu hình, cho phép mở rộng quy mô ghi bằng cách có nhiều máy chủ ghi cùng một lúc.

Mỗi cấu hình đều có ưu và nhược điểm, nhưng một vấn đề mà tất cả chúng đều chia sẻ là độ trễ sao chép - vì sao chép MySQL là không đồng bộ, không phải tất cả các nút đều có dữ liệu mới nhất tại mọi thời điểm. Điều này yêu cầu ứng dụng phải nhận thức được bản sao và kết hợp các truy vấn nhận biết bản sao để hoạt động như mong đợi. Đối với một số ứng dụng, điều này có thể không thành vấn đề, nhưng nếu bạn luôn cần dữ liệu mới nhất, mọi thứ sẽ hơi phức tạp.

Việc sao chép yêu cầu một số cân bằng tải để phân chia tải giữa các nút. Điều này có thể đơn giản như một số sửa đổi đối với mã ứng dụng hoặc sử dụng các giải pháp phần cứng và phần mềm chuyên dụng.

Làm sắc nét và chia nhỏ

Sharding là cách tiếp cận thường được sử dụng để mở rộng các giải pháp cơ sở dữ liệu. Bạn chia dữ liệu thành các mảnh nhỏ hơn và rải chúng xung quanh các nút máy chủ khác nhau. Điều này đòi hỏi ứng dụng phải biết về việc sửa đổi bộ lưu trữ dữ liệu để hoạt động hiệu quả, vì nó cần biết nơi tìm thông tin mà nó cần.

Có sẵn các khuôn khổ trừu tượng để giúp xử lý dữ liệu sharding, chẳng hạn như Phân đoạn Hibernate , một phần mở rộng cho ORM Hibernate (không may là trong Java. Tôi đang sử dụng PHP). HiveDB là một giải pháp khác như vậy cũng hỗ trợ tái cân bằng phân đoạn.

Khác

Tượng nhân sư

Sphinx là một công cụ tìm kiếm toàn văn bản, có thể được sử dụng cho nhiều mục đích hơn là tìm kiếm thử nghiệm. Đối với nhiều truy vấn, nó nhanh hơn nhiều so với MySQL (đặc biệt là để phân nhóm và phân loại), đồng thời có thể truy vấn hệ thống từ xa song song và tổng hợp kết quả - điều này rất hữu ích khi sử dụng với sharding.

Nói chung, sphinx nên được sử dụng với các giải pháp mở rộng quy mô khác để có thêm phần cứng và cơ sở hạ tầng sẵn có. Nhược điểm là một lần nữa, bạn cần mã ứng dụng để nhận biết về nhân sư để sử dụng nó một cách khôn ngoan.

Tóm tắt

Các giải pháp chia tỷ lệ khác nhau tùy thuộc vào nhu cầu của ứng dụng cần nó. Đối với chúng tôi và đối với hầu hết các ứng dụng web, tôi tin rằng sao chép (có thể là đa tổng thể) là cách để đi với bộ cân bằng tải phân phối tải. Làm sắc nét các khu vực vấn đề cụ thể (bảng lớn) cũng là điều cần thiết để có thể mở rộng quy mô theo chiều ngang.

Tôi cũng sẽ thử xem xét Continuent Sequoia và xem liệu nó có thực sự làm được những gì nó hứa hẹn hay không vì nó sẽ liên quan đến ít thay đổi nhất đối với mã ứng dụng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách cài đặt MySQL với phpMyAdmin trên Ubuntu 14.04

  2. Nối ba bảng bằng MySQL

  3. Thêm phân trang và tìm kiếm bằng cách sử dụng dữ liệu jquery

  4. Làm cách nào để lấy kích thước bảng MySQL cho các bảng trong cơ sở dữ liệu?

  5. Tạo bảng mới bằng cách chọn dữ liệu từ các bảng khác với TẠO BẢNG NHƯ