it-swarm.com.de

Beste Möglichkeit, Daten zwischen lokalen und Remote-SQL-Datenbanken zu verwalten

Ich habe also eine häufig gestellte Frage, auf die ich scheinbar keine Antwort finde. Ich versuche zu finden was ist die "beste Vorgehensweise", um eine Datenbank zu erstellen, die Daten lokal verwaltet und diese Daten dann mit einer entfernten Datenbank synchronisiert, die von vielen Clients gemeinsam genutzt wird. Um die Dinge klarer zu machen, würde diese entfernte Datenbank viele Clients haben, die sie verwenden.

Zum Beispiel, wenn ich eine Desktop-Anwendung hatte, die Aufgabenlisten (in SQL) mit einzelnen Elementen speicherte. Dann möchte ich in der Lage sein, diese Daten an einen Webdienst zu senden, der eine "Master" -Kopie aller verschiedenen Kundeninformationen hatte. Ich mache mir keine Sorgen um Synchronisierungsprobleme, sondern versuche nur, die tatsächliche Architektur der Client-Tabellen und der Web-Service-Tabellen zu überdenken.

Hier ist ein Beispiel, wie ich darüber nachgedacht habe:

Client-Datenbank

list
--list_client_id (primary key, auto-increment)
--list_name

list_item
--list_item_client_id (primary key, auto-increment)
--list_id
--list_item_text

Web Based Master Database (Wird von vielen Clients geteilt)

list
--list_master_id
--list_client_id (primary key, auto-increment)
--list_name
--user_id


list_item
--list_item_master_id (primary key, auto-increment)
--list_item_remote_id
--list_id
--list_item_text
--user_id

Die Idee wäre, dass der Client Aufgabenlisten mit Elementen erstellen und diese jederzeit mit dem Webdienst synchronisieren kann (dh wenn sie die Datenverbindung verlieren und die Informationen erst später senden können, wird nichts herauskommen Auftrag). Der Webdienst zeichnet die Datensätze mit den Client-IDs als zusätzliche Felder auf. Auf diese Weise kann der Client "Aktualisierungsliste Nummer 4 mit einem neuen Namen" sagen, und der Server versteht dies als "Aktualisierung der Listennummer 4 von Benutzer 12 mit einem neuen Namen".

22
JoeCortopassi

Wir hatten einen ähnlichen Fall. Die Lösung war ungewöhnlich: Jede Datenbank, ob Hauptserver oder lokaler Client, hatte eine Kopie derselben Datenbankstruktur oder desselben Schemas. (Gleiche Tabellen mit gleichen Feldern und gleichen Feldtypen).

Wir fügen einen Client-Tabellenkatalog hinzu:

create table client
{
   client_key int primary key,
   client_title varchar(200)
}

Der Primärschlüssel jeder Tabelle war eine Ganzzahl, wurde jedoch verwaltet, da es sich um eine Zeichenfolge/ein Zeichen eines festen Typs mit Ganzzahlen bis zu 9999 9999 9999 9999 handelte

Seine Länge war groß genug, um eine große Menge zu tragen. von Aufzeichnungen.

Die Zahlen wurden umgekehrt gespeichert, um das Auffüllen mit Nullen zu unterstützen. Wenn wir eine "4" speichern möchten, sollte dies folgendermaßen aussehen: "4000 0000 0000 0000".

Die ersten 3 Ziffern speichern den mit 0 aufgefüllten Schlüssel der Tabelle. Die restlichen 12 Ziffern speichern den inkrementellen Wert des mit Nullen aufgefüllten Schlüssels.

Also die folgenden Daten:

Client Sequential Number <other fields>
1      1                 ...
2      1                 ...
3      1                 ...
1      2                 ...
2      2                 ...
3      2                 ...
1      3                 ...
2      3                 ...
3      3                 ...

Wurde im Primärschlüssel jeder Tabelle wie folgt gespeichert:

Table_Key        <other fields>
1000000000001000 ...
1000000000002000 ...
1000000000003000 ...
2000000000001000 ...
2000000000002000 ...
2000000000003000 ...
3000000000001000 ...
3000000000002000 ...
3000000000003000 ...

Um Kollisionen mit Primärschlüsseln zu vermeiden.

2
umlcat

Ich verstehe, Sie möchten ein lokales Geschäft, z. Die lokale Kopie der Aufgabenliste lädt dann die Daten hoch und synchronisiert sie wieder mit der Master-Datenbank. Das Schreiben der Dienste ist nicht der schwierige Teil, sondern das Verwalten der Synchronisierung zwischen Datenbanken. Ich habe mich kürzlich mit nServiceBus http://nservicebus.com/ befasst, um die Verwaltung der Datensynchronisierung zwischen Systemen zu verbessern. Es ist ein Bereich, in dem ich interessant bin, aber noch nicht den besten Ansatz oder das beste Wundermittel gefunden habe. Ich würde empfehlen, einen Blick in nServiceBus zu werfen.

0
Nickz