Bester Ansatz zum Synchronisieren mehrerer Clients mit server

Ich arbeite an einer Anwendung, die auf 5 verschiedenen Maschinen laufen wird. Die data der einzelnen Maschinen werden auf demselben Rechner gespeichert. Ich muss data aller Maschinen mit einer zentralen database synchronisieren. Ich bin nicht in der Lage, auf diese Frage zu antworten: Was wird der beste Ansatz dafür sein?

  1. Auf jeder Maschine wird ein timeplan sql Job die data mit dem zentralen server synchronisieren
  2. Der server fordert jede Maschine auf, die data zu synchronisieren

Mit freundlichen Ratschlägen mit Vor- und Nachteilen.

Sie können den SQL-server so konfigurieren, dass er die Replikation verwendet und eine Replik zu jedem der 5 Maschinen veröffentlicht.

Sie müssen auswerten, wenn Sie alle Änderungen in allen Maschinen benötigen, wenn ja Sie brauchen, um Replikation zusammenzuführen, sie haben andere Strukturen und Optionen wie Filter, um nur bestimmte data in Ihren Remote-Rechnern zu haben.

Microsoft hat dieses Problem für Sie getriggers – sie haben das Sync-Framework entwickelt . Ich habe das schon vor 4 Jahren benutzt und es war ziemlich gut – aber wie @Juan in seinem Kommentar sagt, ist es jetzt nicht mehr aktiv von Microsoft entwickelt und die Open Source Version scheint ziemlich ruhig zu sein.

Es gibt zwei offensichtliche Optionen.

Sie können die Replikation (Merge) verwenden, wenn Sie dies als databaseproblem lösen möchten. Dies ist die einfachste Lösung – die Replikation kopiert einfach die data von Ihren Clients in die Zieldatenbank und Microsoft behandelt alle Terminplanung, Konfliktlösung etc.

Allerdings gibt es oft einige data oder Geschäftslogik zwischen den Clients – ein häufiges Problem ist, dass es einen Konflikt zwischen Primärschlüsseln oder Lookup-Werte zwischen Ihren Clients geben kann. Wenn Sie z. B. Integers für Ihre Primärschlüssel verwenden und Maschine 1 und Maschine 2 beide "1000" als Primärschlüssel für einen datasatz in der Tabelle "Verkauf" zuweisen, wird die Replikation schwierig. Ein weiteres gemeinsames Szenario ist, dass es einige Geschäftslogik gibt, die durchgesetzt werden muss, was einfach auf einer einzigen Maschine ist, aber hart, wenn es um mehrere gelegentlich verbundene Maschinen geht. Zum Beispiel, wenn ein Kunde eine Bestellung abgibt, kann die Anwendung prüfen, ob der Gesamtauftragswert das Kreditlimit des Kunden nicht übersteigt – aber was ist, wenn eine andere Transaktion an einem separaten Client ansteht?

In diesen Fällen können Sie ein serviceorientiertes Synchronisationsdesign erstellen. Microsoft stellte WCF dafür zur Verfügung. Während es flexibler ist, ist es wahrscheinlich viel mehr Aufwand zu implementieren. In diesem model behandeln Sie wahrscheinlich die lokale database auf Ihren Clients als Cache, und Sie schieben Nachrichten an die zentrale Maschine, um die Benutzerinteraktion zu reflektieren.