AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Zwei SQLite Datenbanken synchronisieren - Strategie
Thema durchsuchen
Ansicht
Themen-Optionen

Zwei SQLite Datenbanken synchronisieren - Strategie

Ein Thema von Grolle · begonnen am 24. Feb 2010 · letzter Beitrag vom 27. Feb 2010
Antwort Antwort
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#1

Zwei SQLite Datenbanken synchronisieren - Strategie

  Alt 24. Feb 2010, 12:07
Datenbank: SQLite • Version: 3.6 • Zugriff über: Unidac
Hallo,

was ist die beste Strategie, um 2 SQLite Datenbanken (1 Tabelle) zu synchronisieren. Jeder Datensatz hat momentan einen created und updated timestamp. Ist es sinnvoll für eine Synchronisation noch einen Hash über jeden Datensatz anzulegen? und wie könnte dann eine Synchronisation per SQL aussehen?

Vielen Grüße ...

  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

Re: Zwei SQLite Datenbanken synchronisieren - Strategie

  Alt 24. Feb 2010, 12:39
ein hash wäre wohl am sinnvollsten imho, da du ja alle daten verändern kannst, ohne die zeitstempel zu veränden
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Zwei SQLite Datenbanken synchronisieren - Strategie

  Alt 24. Feb 2010, 12:47
Hi,
Zitat von s.h.a.r.k:
ein hash wäre wohl am sinnvollsten imho, da du ja alle daten verändern kannst, ohne die zeitstempel zu veränden
bei einem Update wird natürlich immer der (update)Zeitstempel gesetzt (ich gehe jetzt nicht von einem direkten ändern in der Datenbank aus, sondern nur über mein Programm).

Viele Grüße ...

  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

Re: Zwei SQLite Datenbanken synchronisieren - Strategie

  Alt 24. Feb 2010, 12:57
Wenn du garantieren kannst, dass die Zeitstempel bei jedem Update auch aktualisiert werden, dann kannst du das wahrlich via Zeitstempel machen. Wer sollte sonst auf die Daten Zugriff nehmen? Wenn das nicht der Fall ist, dann wäre die Idee mit dem Hash richtig.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Zwei SQLite Datenbanken synchronisieren - Strategie

  Alt 24. Feb 2010, 13:07
Hi,

ja, dass kann ich garantieren, jetzt fehlt mir nur noch die Synchronisation per SQL bzw. ein Ansatz dafür (beide Datenbanken sollen nach der Synchronisation auf dem aktuellsten Stand sein).

Viele Grüße ...

  Mit Zitat antworten Zitat
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Zwei SQLite Datenbanken synchronisieren - Strategie

  Alt 27. Feb 2010, 12:17
Hi,

ich push das nochmal, da ich etwas ratlos bin. Das Problem was ich habe, dass sich in beiden Datenbanken was ändern kann. Daher habe ich ja keinerlei Anhaltspunkte, ob ein Datensatz dann ein Update geändert werden kann oder noch gar nicht vorhanden ist.

Ratlose Grüße ...

  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Zwei SQLite Datenbanken synchronisieren - Strategie

  Alt 27. Feb 2010, 13:59
Das größte Problem dabei sind gelöschte Datensätze. Weil dieser dann auf der anderen Seite existiert und man dann nicht weiß, ob dieser dann gelöscht oder eben aus der anderen DB übertragen werden soll.

Ich habe soetwas gelöst, indem ich ein Protokoll erstellen lasse. In diesem Protokoll steht, die Tabelle, die Änderung (I, D, U), der Zeitstempel und der PK-Inhalt). Dieses Füllen wird über Trigger realisiert, somit ist es egal, wie man die Daten ändert (per Programm oder direkt in der DB). Das Sync-Tool schaut sich dann die Logtabelle an und kann dann die nötigen Änderungen durchführen, indem eben die eigentlichen Daten aus den zugehörgen Tabellen geholt und übertragen werden.
Bei diesem Vorgehen gibt es also nur eine Sync-Tabelle und wenn später noch mehr Tabellen syncronisiert werden müssen, so ist nur ein weiterer Trigger nötig.


Edit: Bei erfolgreicher Änderung, kann die zugehörige Protokollzeile gelöscht werden. Somit entsteht kein bleibendes Datenvolumen, nur solange, bis die Syncronisation durchgeführt wurde. Kann mal eine Änderung nicht durchgeführt werden, werde alle weiteren, die mit der nicht durchgeführten Änderung in Verbindung stehen, ebenfalls nicht durchgeführt. Trotzdem sind die Änderungen weiterhin bekannt und können später (bei z.B. Korrektur der DB-Struktur) durchgeführt werden. Das ist ziemlich wichtig, weil mir das regelmäßig passiert, dass ich mal etwas an der DB verändere und es garantiert auf der Gegenseite vergesse.
  Mit Zitat antworten Zitat
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Zwei SQLite Datenbanken synchronisieren - Strategie

  Alt 27. Feb 2010, 15:36
Hallo,

sichert der autoinc PK mir zu, das dieser selber auch nicht mehr belegt wird, wenn einmal gelöscht? Habe das gerade bei SQLite getestet und scheint so zu sein. Das löschen könnte ich ja auch innerhalb meines Programms berücksichtigen.

Viele Grüße ...

  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Zwei SQLite Datenbanken synchronisieren - Strategie

  Alt 27. Feb 2010, 15:44
Das hatte ich ganz vergessen zu erwähnen. AutoInc-Felder sind bei meiner Lösung nicht möglich bzw. sind doch eigentlich bei einer Syncronisation gar nicht möglich. Weil man ja keinen Wert in das Feld schreiben kann, genau das muss man aber doch, wenn der Wert von der anderen Seite kommt. Oder wie soll das gehen?
Bei so einer Lösung würde ich mich nur auf die DB selbst verlassen. Irgendetwas in einem speziellen Programm "zu wissen" ist echt tödlich, wenn man mal schnell was direkt in der DB ändern möchte.

Naja, war ja auch nur als Anregung gedacht...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz