2010-02-18 18 views
5

Khung đồng bộ hóa đồng bộ hóa dữ liệu trên cơ sở từng bảng, nhưng các thực thể của tôi được chuẩn hóa trên các tập hợp các bảng cha-con có liên quan. Điều này tạo ra các vấn đề cho ứng dụng của tôi, nơi một hàng cha mẹ có thể xuất hiện trên máy chủ được xử lý, nhưng các hàng con có thể không xuất hiện trong vài giây. Nếu có sự cố kết nối giữa ứng dụng khách và máy chủ của tôi, các hàng con có thể không xuất hiện trong một thời gian.Với MS Sync Framework 2.0, làm thế nào tôi có thể xử lý tốt nhất các bảng liên quan?

Tôi làm cách nào để thiết kế ứng dụng của mình để xử lý các bảng con được đồng bộ hóa riêng biệt với bảng cha?

Kịch bản cụ thể mà tôi đang xem đang nhận đơn đặt hàng công việc trên máy chủ từ hệ thống phụ trợ để phân phối cho các kỹ sư trong trường sử dụng máy tính bảng hoặc PDA. Các lệnh làm việc này là các thực thể phức tạp, lớn có thể bao gồm nửa tá bảng. Các kỹ sư hoàn thành công việc của họ, đồng bộ các kết quả và máy chủ trả về thứ tự công việc đã hoàn thành cho hệ thống phụ trợ.

Một vài ý tưởng của riêng tôi cho đến thời điểm này được đăng bên dưới.

Trả lời

2

Sử dụng khung đồng bộ, thêm các bảng có liên quan vào nhóm đồng bộ hóa của riêng chúng. Ví dụ. Thêm các bảng OrderHeader và OrderDetail vào nhóm đồng bộ của riêng chúng được gọi là Orders.

Không đặt bất kỳ thứ gì khác vào nhóm đồng bộ trừ khi có liên quan trực tiếp với nhóm đó.

Sau đó, đồng bộ hóa từng nhóm đồng bộ trong một giao dịch. Bằng cách đó, bạn được đảm bảo nhận cả hai hoặc không có bảng nào được đồng bộ hóa ...

Vui lòng hỏi xem bạn có cần thêm chi tiết về quy trình này hay không.

+0

Âm thanh như vậy có thể hoạt động, nhưng nó sẽ mở rộng như thế nào? Khung Sync sẽ vẫn đồng bộ tất cả các đơn đặt hàng, sau đó tất cả các chi tiết đặt hàng? Điều gì sẽ xảy ra nếu tôi có 100 Đơn đặt hàng mới với 100 mặt hàng? Nếu có một lỗi trên 99, nó sẽ quay trở lại tất cả mọi thứ? –

+0

Câu trả lời này không giải quyết các vấn đề cố hữu trong đồng bộ hóa từng bảng: Điều gì sẽ xảy ra nếu tôi phải đồng bộ 20 bảng có liên quan? Tôi có đồng bộ toàn bộ cơ sở dữ liệu trong một giao dịch không? Nếu tôi đặt nhiều bảng trong một giao dịch, tôi sẽ thực hiện giao dịch lâu hơn nữa. Nếu nó hết thời gian, tôi sẽ không thể đồng bộ hóa bất cứ điều gì. -1. –

+0

Khi xây dựng các ứng dụng mà bạn dự định có một số đồng bộ hóa, bạn phải tính đến điều đó khi thiết kế dữ liệu ứng dụng. Bởi chính bản chất của lý do bạn muốn làm đồng bộ. tức là, bạn bị ngắt kết nối tại một thời điểm hoặc liên kết không thành công (nói một liên kết 3g) tại một thời điểm nào đó. Nếu bạn thiết kế ứng dụng cần phải có 20 bảng tất cả trong bước, thì có bạn phải thiết kế có một giao dịch chạy dài, và, như bạn nói nó không thành công thì bạn cần phải cuộn tất cả trở lại .. một cách ra là xây dựng một hệ thống loại tệp nhật ký nơi bạn viết thay đổi, giả sử bằng trình kích hoạt cho một bảng, sau đó đồng bộ hóa .. – JohnnyJP

0

Tôi có thể tùy chỉnh Sync Framework để làm cho nó tôn trọng mối quan hệ cơ sở dữ liệu. Khi một SyncAdapter tùy chỉnh đi qua một hàng với các thay đổi, nó có thể đi qua các mối quan hệ con trong lược đồ cơ sở dữ liệu để nhận bất kỳ thay đổi nào trong các hàng có liên quan. Tất cả những thay đổi này sẽ được thêm vào cùng một tập dữ liệu và được đồng bộ hóa dưới dạng một giao dịch duy nhất.

Ưu điểm:

  • Điều này có vẻ như giải pháp tốt nhất từ ​​quan điểm của toàn vẹn dữ liệu. Tôi có thể chắc chắn rằng một thực thể cụ thể chứa tất cả các thay đổi có sẵn từ một khách hàng hoặc không có thay đổi nào trong số đó.
  • Tôi không cần phải thay đổi thực thể của mình hoặc mô tả chúng theo bất kỳ cách đặc biệt nào cho bộ điều hợp tùy chỉnh - tất cả thông tin cần thiết có thể được bắt nguồn cho các mối quan hệ cơ sở dữ liệu tôi đã có.
  • Tôi không cần phải làm bất cứ điều gì đặc biệt với lược đồ cơ sở dữ liệu của mình - Tôi có thể trỏ mã của tôi vào bất kỳ cơ sở dữ liệu nào và nó sẽ hoạt động.

Nhược điểm:

  • Tùy chỉnh khung Sync theo cách này có thể là rất nhiều công việc và sẽ đòi hỏi kiến ​​thức chi tiết về internals của khung.
  • Bộ điều hợp tùy chỉnh sẽ cần phát hiện và xử lý các mối quan hệ cơ sở dữ liệu vòng tròn.
0

Thiết kế ứng dụng sao cho dữ liệu không xuất hiện ở các thời điểm khác nhau. Ứng dụng sẽ hiển thị hoặc hoạt động trên bất kỳ dữ liệu nào có sẵn tại thời điểm đó. Nếu nhiều dữ liệu xuất hiện sau đó, nó sẽ hiển thị quá.

Ưu điểm:

  • Đây có thể là một cách linh hoạt và mạnh mẽ để đối phó với dữ liệu và không phụ thuộc vào rất nhiều mã đồng bộ phức tạp.

Nhược điểm:

  • Nó có thể gây nhầm lẫn cho người dùng nếu họ nghĩ rằng họ đang tìm kiếm một công việc hoàn tất, hoặc để làm việc, hoặc bất cứ điều gì, nhưng các đoạn phụ xuất hiện sau này.
  • Nếu dữ liệu được đồng bộ hóa từ người dùng đến máy chủ được gửi đến một số hệ thống phụ trợ khác, hệ thống đó có thể không hỗ trợ gửi một phần.
0

Còn điều gì đó với tổng kiểm tra thì sao? Mỗi khi ứng dụng thực hiện thay đổi đối với thực thể, ứng dụng sẽ tính toán băm dựa trên nội dung mới nhất của đối tượng và lưu nó vào hàng chính. Khi ứng dụng đọc thực thể, nó có thể tính toán lại giá trị băm. Nếu dữ liệu có sẵn tại thời điểm không khớp với băm được lưu trữ với thực thể, ứng dụng sẽ biết rằng có nhiều đồng bộ hóa hơn được thực hiện.

Ưu điểm:

  • Có thể là một sự thay đổi khá đơn giản để mô hình miền của ứng dụng mà không liên quan đến việc thay đổi internals Sync Framework của.

Nhược điểm:

  • Ứng dụng này sẽ cần phải đọc tất cả các hàng có liên quan đến tổ chức vào bộ nhớ mỗi khi nó làm cho một sự thay đổi.
  • Điều này sẽ phức tạp hơn nhiều nếu ứng dụng phải hỗ trợ cập nhật cho cùng một thực thể đến từ nhiều khách hàng.
  • Cần phải lập kế hoạch cẩn thận những thay đổi nào được đồng bộ hóa theo từng hướng và khi tính băm tương ứng. Tùy thuộc vào dữ liệu của bạn, bạn có thể cần phải đồng bộ hóa cùng một bảng nhiều lần.
  • Đặt riêng cho một ứng dụng; bạn không thể lấy cùng một mã và áp dụng nó cho cái gì khác.
0

Không chuẩn hóa mọi thứ. Tạo chế độ xem cơ sở dữ liệu làm phẳng các bảng có liên quan thành một tập hợp kết quả được kết hợp duy nhất hoặc chỉ lưu trữ dữ liệu của bạn trong một bảng lớn ở vị trí đầu tiên. Định cấu hình Sync Framework để đồng bộ hóa một bảng, trộn nó bằng phím "ngoài cùng bên trái" trong chế độ xem, đây sẽ là khóa chính của bảng gốc trong cấu trúc phân cấp. Mỗi giao dịch trên máy khách hiện bao gồm tất cả các thay đổi được thực hiện cho một thực thể duy nhất.

Ưu điểm:

  • có thể được thực hiện hoàn toàn bằng cơ sở dữ liệu.
  • Không cần phải thay thế bất kỳ phần nào của Khung đồng bộ hóa.
  • Có thể mở rộng quy mô khá tốt với số hàng lớn miễn là bạn cẩn thận về cách chế độ xem được tạo và lọc và cách các bảng bên dưới được lập chỉ mục.

Nhược điểm:

  • Ném ra chuẩn hóa dữ liệu có thể được coi là xấu.
  • Có thể không mở rộng tốt với số lượng lớn các bảng và cột, yêu cầu nhiều lần tham gia.
  • Phải tổng hợp dữ liệu theo dõi thay đổi.
  • Nếu sử dụng chế độ xem, phải tạo trình kích hoạt để làm cho nó có thể cập nhật.
0

Không đủ không gian bên trong hộp bình luận cho suy nghĩ của tôi:

Đồng bộ hóa tổng thể các đơn vị thay vì dữ liệu quan hệ? Tôi không biết liệu chúng tôi có thể làm điều đó với Sync Framework ... có thể triển khai nhà cung cấp tùy chỉnh không?

Vẫn còn sự cố về giao dịch. Hãy lấy một mẫu câm, bạn có tài khoản, mỗi tài khoản là một thực thể chủ.

Cơ sở dữ liệu Một

BeginTransaction 
    Substract $500 from account 1 
    Add $200 to account 2 
    Add $300 to account 3 
EndTransaction 

Cơ sở dữ liệu B

BeginTransaction 
    Substract $100 from account 1 
    Add $100 to account 4 
EndTransaction 

Khi bạn đồng bộ hóa, bạn sẽ phát hiện một cuộc xung đột trên 1 nhưng không phải trên 2, 3 và 4. Với mẫu này bạn có thể xây dựng một merge chiến lược nhưng đó không phải luôn luôn như vậy.

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