2009-06-26 43 views
6

Thường xuyên cần phải đồng bộ hóa dữ liệu từ bảng chính trong một cơ sở dữ liệu để sao chép bảng trong cơ sở dữ liệu khác, thường trên các máy chủ khác. Ví dụ, hãy xem xét trường hợp hệ thống phụ trợ quản lý dữ liệu khoảng không quảng cáo và dữ liệu khoảng không quảng cáo cuối cùng phải được đẩy vào một hoặc nhiều cơ sở dữ liệu là một phần của ứng dụng trang web.Đồng bộ hóa cơ sở dữ liệu một chiều

Dữ liệu nguồn trong hệ thống phụ trợ được chuẩn hóa rất nhiều, với hàng chục bảng và ràng buộc khóa ngoài. Nó là một hệ thống RDBMS OLTP được thiết kế tốt. Nhiều bảng trong câu hỏi chứa hàng triệu hàng. Sự cần thiết là đẩy dữ liệu này ra các cơ sở dữ liệu khác thường xuyên. Thường xuyên như khả thi; độ trễ có thể được dung thứ. Trên tất cả, thời gian hoạt động tối đa của cả hai cơ sở dữ liệu phụ trợ và từ xa là bắt buộc.

Tôi đang sử dụng SQL Server và quen thuộc với theo dõi thay đổi, chuyển đổi hàng loạt, trình kích hoạt, v.v. Tôi biết rằng Microsoft đẩy nhân rộng, SyncFx, và SSIS rất nhiều cho các kịch bản này. Tuy nhiên, có một sự khác biệt khá lớn giữa các bảng trắng của nhà cung cấp và tổng quan đề xuất các công nghệ và triển khai thực hiện, triển khai và bảo trì giải pháp. Trong thế giới SQL Server, sao chép thường được xem như là giải pháp chìa khóa trao tay, nhưng tôi đang cố gắng khám phá các giải pháp thay thế. (Có một số lo ngại rằng nhân rộng là khó quản lý, làm cho nó khó khăn để thay đổi giản đồ, và trong trường hợp một khởi tạo lại là bao giờ yêu cầu sẽ có thời gian chết lớn cho các hệ thống quan trọng.)

Có rất nhiều gotchas . Do các mối quan hệ khóa ngoại phức tạp giữa số lượng lớn các bảng, xác định thứ tự thực hiện các thao tác chụp hoặc áp dụng các bản cập nhật không phải là tầm thường. Do các chỉ mục duy nhất, hai hàng có thể được lồng vào nhau theo cách cập nhật hàng giờ tại một thời điểm sẽ không hoạt động (cần phải thực hiện cập nhật trung gian cho mỗi hàng trước khi cập nhật lần cuối). Đây không nhất thiết phải hiển thị-stoppers, như chỉ số duy nhất thường có thể được thay đổi để chỉ số thường xuyên và các phím nước ngoài có thể được vô hiệu hóa (mặc dù vô hiệu hóa các phím nước ngoài là cực kỳ không mong muốn). Thông thường, bạn sẽ nghe, "chỉ" sử dụng theo dõi thay đổi SQL 2008 và SSIS hoặc SyncFx. Những loại câu trả lời thực sự không làm công lý cho những khó khăn thực tế. (Và tất nhiên, khách hàng thực sự có một thời gian khó khăn bao trùm đầu của họ về cách sao chép dữ liệu có thể rất khó khăn, làm cho một tình huống khó khăn tồi tệ hơn!)

Vấn đề này cuối cùng rất chung chung: thực hiện đồng bộ hóa một chiều của nhiều người các bảng cơ sở dữ liệu liên quan nhiều với nhiều hàng. Hầu như tất cả mọi người tham gia vào cơ sở dữ liệu phải đối phó với loại vấn đề này. Whitepapers là phổ biến, chuyên môn thực tế khó tìm. Chúng tôi biết điều này có thể là một vấn đề khó khăn, nhưng công việc phải được thực hiện. Chúng ta hãy nghe về những gì đã làm việc cho bạn (và những gì để tránh). Hãy kể kinh nghiệm của bạn với các sản phẩm hoặc sản phẩm của Microsoft từ các nhà cung cấp khác. Nhưng nếu cá nhân bạn không thử nghiệm giải pháp với số lượng lớn các bảng và hàng có liên quan đến nhiều thứ, vui lòng không trả lời. Hãy giữ điều này thực tế - không phải lý thuyết.

Trả lời

7

Better hỏi về serverfault.com (Tôi không thể gửi ý kiến, kịch bản được chia trong SO, vì vậy tôi phải gửi một câu trả lời đầy đủ)

Cập nhật: (chuyển sang Safari, kịch bản hoạt động trở lại, tôi có thể đăng đúng cách)

Không có dấu đầu dòng bạc. Để dễ sử dụng và triển khai 'một lần lượt', không có gì có thể đánh bại bản sao. Là giải pháp duy nhất bao gồm phát hiện và giải quyết xung đột sâu sắc, có hỗ trợ cho việc đẩy các thay đổi lược đồ và đi kèm với một bộ công cụ toàn diện để thiết lập và giám sát nó. Nó đã được các con MS áp phích của đồng bộ hóa dữ liệu trong nhiều năm trước khi 'chương trình nghị sự' này đã được thực hiện trên bởi đám đông. Net. Nhân rộng có hai vấn đề cơ bản trong quan điểm của tôi:

  • Công nghệ được sử dụng để đẩy thay đổi là nguyên thủy, chậm và không đáng tin cậy.Nó yêu cầu chia sẻ tệp để khởi tạo các bản sao và nó phụ thuộc vào T-SQL để thực sự sao chép dữ liệu, dẫn đến tất cả các vấn đề về khả năng mở rộng: các chủ đề nhân rộng sử dụng các luồng công nhân máy chủ và thực tế là chúng tương tác với các bảng tùy ý và truy vấn ứng dụng dẫn đến chặn và deadlocks. Các triển khai lớn nhất mà tôi đã nghe nói là khoảng 400-500 trang web và được thực hiện bởi các MVP siêu nhân và các nhà tư vấn hàng đầu về đô la. Điều này dừng lại trên đường đua của nó nhiều dự án mà bắt đầu tại 1500 trang web (cách vượt quá dự án nhân rộng được triển khai lớn nhất). Tôi tò mò muốn nghe nếu tôi sai và bạn biết về một giải pháp sao chép SQL Server được triển khai với hơn 500 trang web.
  • Ẩn dụ sao chép là quá tập trung vào dữ liệu. Nó không tính đến các yêu cầu của các ứng dụng phân tán: nhu cầu của các hợp đồng được phiên bản và chính thức hóa, quyền tự chủ dữ liệu 'fiefdoms', khớp nối lỏng lẻo với tính sẵn sàng và bảo mật. Như một giải pháp dựa trên nhân rộng kết quả giải quyết nhu cầu trước mắt để 'làm cho dữ liệu có sẵn ở đó', nhưng không giải quyết được vấn đề thực sự của 'ứng dụng của tôi cần nói chuyện với ứng dụng của bạn'.

Ở đầu kia, bạn sẽ tìm thấy giải pháp thực sự giải quyết vấn đề liên lạc ứng dụng, như dịch vụ dựa trên tin nhắn xếp hàng đợi. Nhưng có thể chậm chạp và khó khăn với các vấn đề bắt nguồn từ việc tách cơ chế truyền thông (dịch vụ web và msmq) và lưu trữ dữ liệu (giao dịch DTC giữa comm và db, không có câu chuyện phổ biến về tính sẵn sàng cao, không có câu chuyện khôi phục chung, v.v.). Các giải pháp là blazingly fast and fully integrated with DB exists in the MS stack, nhưng không ai biết cách sử dụng chúng. Một nơi nào đó ở giữa các bản sao này và bạn sẽ tìm thấy các giải pháp trung gian khác nhau, như khuôn khổ OCS/Synch và các giải pháp tùy chỉnh dựa trên SSIS. Không có gì sẽ cung cấp sự dễ dàng thiết lập và giám sát nhân rộng, nhưng chúng có thể mở rộng và hoạt động tốt hơn.

Tôi đã tham gia một số dự án yêu cầu 'đồng bộ hóa dữ liệu' ở quy mô rất lớn (+1200 trang web, +1600 trang web) và giải pháp của tôi là giải quyết vấn đề. Khi suy nghĩ được thay đổi thành luồng này và luồng dữ liệu không còn được xem là 'bản ghi với khóa X của bảng Y' mà thay vào đó 'thông báo giao tiếp mua mặt hàng X của khách hàng Y', giải pháp trở nên dễ hiểu và dễ áp ​​dụng hơn. Bạn không còn nghĩ về 'chèn các bản ghi theo thứ tự X-Y-Z để các mối quan hệ FK không phá vỡ' mà thay vào đó là 'quá trình mua hàng như mô tả bằng thông điệp XYZ'.

Trong bản sao chế độ xem của tôi và các dẫn xuất của nó (ví dụ: theo dõi dữ liệu và vận chuyển dữ liệu gram), là các giải pháp được neo trong '80 công nghệ và chế độ xem dữ liệu/ứng dụng. Khủng long quá cũ (và không có cách nào biến thành chim).

Tôi biết điều này thậm chí không bắt đầu để giải quyết tất cả các vấn đề (rất legit) của bạn, nhưng viết ra tất cả những gì có thể nói/rant/rable về chủ đề này sẽ lấp đầy khối lượng của bìa mềm ...

+0

Cảm ơn, nhưng Tôi đang xem điều này từ quan điểm của một nhà phát triển cơ sở dữ liệu, không phải là quản trị viên máy chủ. Điều này quan trọng từ quan điểm thiết kế phần mềm trả trước, không chỉ là vấn đề hoạt động. –

+0

Cảm ơn thông tin chi tiết của bạn. Để tham khảo, lưu ý rằng số lượng trang web mục tiêu mà tôi đặc biệt quan tâm là rất nhỏ (1-3 cơ sở dữ liệu) so với các dự án bạn đã thực hiện. Mục đích là chạy logic phần mềm giống nhau trên mỗi nút, do đó lược đồ cơ sở dữ liệu của các bảng được đề cập sẽ giống nhau. Tôi hiểu những gì bạn nói về "giao tiếp ứng dụng", đó là điều phải khi các hệ thống khác nhau tham gia, nhưng một giải pháp đa năng hơn đòi hỏi ít mã bằng cách tận dụng các lược đồ giống như những gì tôi đang tìm kiếm. –

+0

Bạn đang mô tả sao chép. Nếu nó phù hợp với nhu cầu của bạn, với tất cả các gothic của nó, không đổ mồ hôi để phát minh lại nó. Có nghĩa là nhiều năm kinh nghiệm và phản hồi đã được tích lũy trong bản sao 'out-of-the-box'. Các gotchas bạn thấy là những gì * còn lại * sau khi nhiều vấn đề đã được cố định, và bạn sẽ chỉ phải vượt qua tất cả những người thân. –

Các vấn đề liên quan