Tôi không có chuyên môn về kiến trúc cơ sở dữ liệu và tôi đã tự dạy mình những thứ mới mỗi ngày. Tôi muốn tạo một ứng dụng quy mô Internet bằng cách sử dụng SQL Server làm kho lưu trữ dữ liệu. Tôi chưa tìm thấy bất kỳ thông tin trực tuyến nào liên quan đến việc nhân rộng SQL Server.
Sự hiểu biết của tôi là nhân rộng ra là tuyệt vời cho thông lượng ghi, nhưng nó không nhất thiết phải mở rộng quy mô đọc. Một ví dụ đơn giản (có liên quan trong trường hợp của tôi) là, nếu dữ liệu bị hủy bằng cách đăng id người dùng, trạng thái 1 được đăng bởi người dùng X sống trong phân đoạn A sẽ có tất cả lượt thích và nhận xét trên toàn liên đoàn. Vì vậy, nếu tôi cần tìm nạp các nhận xét về trạng thái này, tôi cần nhấn mọi cơ sở dữ liệu và hợp nhất và sắp xếp / lọc kết quả trong bộ nhớ ứng dụng. Điều này không tốt cho cơ sở dữ liệu vì chúng luôn bận rộn và không tốt cho các máy chủ web vì tôi sẽ sử dụng CPU và RAM để xử lý hậu kỳ các đối tượng. Lý tưởng nhất, tôi muốn viết vào một cơ sở dữ liệu và đọc từ một cơ sở dữ liệu để có khả năng mở rộng tối đa.
Bây giờ, những gì tôi nghĩ là làm, thay vì shending bằng cách đăng id người dùng, shard bằng cách nhận id người dùng. Vì vậy, nếu người dùng X đăng trạng thái 1, người dùng Y sống trong phân đoạn B có thể chèn nhận xét vào phân đoạn A và tôi có thể thực thi mối quan hệ cha-con giữa trạng thái và nhận xét. Người dùng Z sống trong phân đoạn C có thể chèn một lượt thích vào phân đoạn A cho bình luận, vì vậy bình luận và tương tự có thể tạo thành mối quan hệ cha-con. Lợi ích của phương pháp này là tôi chỉ truy vấn một cơ sở dữ liệu để nhận tất cả các nhận xét và lượt thích cho một trạng thái cụ thể thay vì truy vấn một cách ngây thơ mỗi phân đoạn.
Tuy nhiên, tôi cần nhận được kết quả như "nhận xét về trạng thái 1 của những người là nam hoặc 18 tuổi". Đây là một chức năng quan trọng tôi muốn thực hiện. Tôi vẫn phải nhấn các cơ sở dữ liệu khác để có được thông tin về người dùng. Để loại bỏ điều này, tôi nghĩ đến việc tạo một nhóm đồng bộ hóa trong đó một cơ sở dữ liệu (trung tâm) đồng bộ hóa tất cả các vùng đồng bằng của người dùng với tất cả các phân đoạn (cứ sau 5 phút). Tôi ổn với tính nhất quán cuối cùng mặc dù nó có vấn đề riêng của nó, ví dụ, nếu người dùng xóa tài khoản của họ, từ khi tài khoản bị xóa cho đến khi đồng bằng bị tồn tại, người dùng khác sẽ không thấy thay đổi có khả năng thêm đối tượng con cho các đối tượng được tạo bởi người dùng đó. Đây dường như là một vấn đề toàn vẹn dữ liệu.
Tôi cũng nhận thức được sao chép và lưu trữ để tăng thông lượng đọc.
Câu hỏi của tôi là, tôi nên theo đuổi phương pháp nào? Nếu tôi chọn cái thứ hai, tôi có gặp khó khăn khi đồng bộ hóa dữ liệu trên hàng trăm hoặc hàng nghìn máy chủ không? Chưa kể các trung tâm về cơ bản là một điểm thất bại.