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 để ghép lại với nhau:
Phân cụm
Clustering theo nghĩa chung 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 như 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 đẹp ở đó). 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ố điều hay về nó, và nhìn chung thì 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ó 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ấu hình master-master , cho phép mở rộng quy mô ghi bằng cách có một số máy chủ ghi cùng một lúc.
Mỗi cấu hình đều có ưu và nhược điểm của nó, 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 mọi lúc. Điều này đòi hỏi ứ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 nhận thức được việc sửa đổi để 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ư Hibernate Shard , một phần mở rộng cho Hibernate ORM (tiếc là trong Java. Tôi đang sử dụng PHP). HiveDB là một giải pháp khác cũng hỗ trợ tái cân bằng phân đoạn.
Khác
Nhân sư
Sphinx là một công cụ tìm kiếm toàn vă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à sắp xếp), đồ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 lược
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 chủ) 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ể (các 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 không vì nó sẽ liên quan đến ít thay đổi nhất đối với mã ứng dụng.