Thu nhỏ SQL Server và đồng bộ hóa dữ liệu trên nhiều máy


7

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.


Bạn có thực sự cần phải bảo vệ cơ sở dữ liệu của bạn? Làm thế nào lớn bạn đang mong đợi cơ sở dữ liệu của bạn sẽ được? Chia tỷ lệ đọc của chúng tôi tương đối đơn giản (ví dụ: sử dụng Nhóm sẵn có), việc viết khó hơn nhiều. Cung cấp bao nhiêu bạn có thể mở rộng quy mô trên cơ sở hạ tầng loại Azure và AWS, tại sao không mở rộng quy mô thay vì ra ngoài?
Greg

Câu trả lời:


3

Tạo cơ sở dữ liệu Scale Out ở quy mô Internet là bước khá lớn. Bạn sẽ phải đối mặt với rất nhiều vấn đề không quan trọng trên một cơ sở dữ liệu lớn. Từ ghi chú của bạn tôi thấy rằng bạn hiểu một số vấn đề cơ bản mà bạn gặp phải.

Vì Microsoft có các bài viết về việc sử dụng SQL Server để mở rộng quy mô, tôi khuyên bạn nên nghiên cứu chúng trước. Chiến lược mở rộng quy mô của bạn sẽ cần phải tính đến máy chủ cơ sở dữ liệu bạn chọn.

Đối với Microsoft SQL Server, trước tiên bạn nên nghiên cứu: http://msdn.microsoft.com/en-us/l Library / aa479364.aspx

Bài viết này thảo luận về các quyết định mà bạn cần phải đưa ra và tại sao chúng quan trọng. Nó cung cấp 5 chiến lược SQL Server để mở rộng quy mô:

• Cơ sở dữ liệu dùng chung có thể mở rộng

• Tái tạo ngang hàng

• Máy chủ được liên kết

• Chế độ xem phân tán

• Định tuyến phụ thuộc dữ liệu

Khi bạn đi xuống ngăn xếp, mọi thứ trở nên phức tạp hơn, nhưng cũng cung cấp những cách mở rộng mạnh mẽ hơn.


0

Bởi vì tôi đã có các ứng dụng trong quá khứ thất bại, tôi sẽ đề xuất hai điều. Một là tôi sẽ không lo lắng về việc mở rộng quy mô cho đến khi bạn gần gũi hơn với một ứng dụng trực tiếp và các quy tắc kinh doanh được tìm ra. Có vẻ như bạn có thể đang giải quyết một vấn đề mà bạn có thể không thực sự gặp phải. Điều đi vào điểm thứ hai là dữ liệu của bạn trông không đủ chín chắn để đưa ra quyết định về Shending. Khi shending bạn thường cần một sự hiểu biết mạnh mẽ về dữ liệu của bạn để quyết định làm thế nào để phân chia.

Trong một dự án, chúng tôi thực sự đã ra ngoài và cố gắng áp dụng thực tiễn tốt nhất để nhân rộng cơ sở dữ liệu của chúng tôi. Chúng tôi quyết định shending bởi người thuê nhà. Sau đó do những thay đổi kinh doanh phát triển, chúng tôi thấy những người thuê nhà không tốt nhất vì những người thuê nhà bắt đầu chia sẻ dữ liệu và các mảnh vỡ được trộn lẫn và được truy cập cùng lúc tạo ra các điểm nóng. Đây là một trong những microsofts coi chừng tại đây: https://msdn.microsoft.com/en-us/l Library / dn589797.aspx

Tôi khuyên bạn nên xây dựng ứng dụng của mình và tìm hiểu xem ứng dụng của bạn sẽ thực sự hoạt động như thế nào trước khi bạn bắt đầu shending. Một cơ sở dữ liệu có thể đi khá xa trước khi cần thực hiện mở rộng theo chiều ngang nếu được xây dựng đúng.

Các tùy chọn khác có thể là đọc / ghi nô lệ. Đọc từ viết này sang viết khác, các nhóm có tính sẵn sàng cao và cân bằng tải.

Chúc may mắn,


-2

Tôi đã thử phân vùngDB * ngày hôm qua. Về cơ bản, theo hiểu biết của tôi, nó cần DPV (Chế độ xem phân tán) và thực hiện công việc cho bạn, có thể một trong những ví dụ liên minh của họ sẽ phù hợp với bạn.

Lưu ý, bạn cần thu thập trường phân đoạn / phân vùng đó sẵn sàng trong tất cả các bảng được phân chia / phân vùng của bạn.

* Tôi là người dùng beta, nhưng không liên kết với sản phẩm này.

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.