AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Thread getriebene SQLite Zwischenschicht?!

Ein Thema von Mavarik · begonnen am 4. Nov 2014 · letzter Beitrag vom 6. Nov 2014
Antwort Antwort
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.157 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: Thread getriebene SQLite Zwischenschicht?!

  Alt 4. Nov 2014, 17:24
Das hat sich eigentlich von Anfang an ausgeschlossen, da SlaveA nicht die Datenbank auf SlaveB sperren kann.

Daher funktioniert das nicht..

Mavarik

PS.: Die Frage lautet... Firemonkey MemTable oder "nimm besser einen balSchnickschnackProviderComanndqueryproducer" <- keinen Plan...

Dachte sowas mit ApplyUpdates (noch nie versucht Schnickschnack...)

Geändert von Mavarik ( 4. Nov 2014 um 17:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Thread getriebene SQLite Zwischenschicht?!

  Alt 4. Nov 2014, 18:51
Das mit dem Thread verstehe ich nicht. Was ich verstehen würde wäre eine Service-Anwendung, die für den Abgleich sorgt. Allerdings sehe ich die nicht auf der Seite vom Hauptserver, der braucht die nicht.

Der Service kümmert sich fortlaufend um den Abgleich mit dem Hauptserver. Dazu sperrt er die Datenbank (so wie die Anwendung z.B. Status 1), trägt die Daten vom Hauptserver ein und gibt die Datenbank wieder frei (Status 0).

Während die Anwendung läuft erfolgt kein Abgleich. Wird die Anwendung beendet, dann wird die nicht freigegeben, sondern in den Status 2 (neue lokale Daten vorhanden) und ist damit für die Anwendung weiterhin gesperrt.

Jetzt verbindet sich der Service wieder mit der Datenbank, setzt den Status auf 1, überträgt die Daten zum Hauptserver und macht ansonsten den normalen Abgleich vom Hauptserver.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#3

AW: Thread getriebene SQLite Zwischenschicht?!

  Alt 4. Nov 2014, 19:26
Die Idee von Sir Rufo würde bedeuten, irgendwie irgendwo ein zweites Programm zu starten. Fände ich auch naheliegend, wobei dann eventuell noch kleinere Synchronisationsprobleme gelöst werden müssen (Datensatz wird aktualisiert, während er in Bearbeitung ist).

Die Idee mit dem Thread ist dann verständlich, wenn kein zweites Programm laufen soll. Dann ist dieser 'Service' eben ein Thread.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Thread getriebene SQLite Zwischenschicht?!

  Alt 4. Nov 2014, 20:06
Die Idee von Sir Rufo würde bedeuten, irgendwie irgendwo ein zweites Programm zu starten. Fände ich auch naheliegend, wobei dann eventuell noch kleinere Synchronisationsprobleme gelöst werden müssen (Datensatz wird aktualisiert, während er in Bearbeitung ist).

Die Idee mit dem Thread ist dann verständlich, wenn kein zweites Programm laufen soll. Dann ist dieser 'Service' eben ein Thread.
Das Sync-Problem ist doch schon gelöst (so wie es jetzt auch schon ist):

AKTUELL:
  • Anwendung startet
    • Warten auf freie Datenbank (0)
    • Datenbank sperren (1)
    • Daten vom Hauptserver
  • Anwendung endet
    • Daten zum Hauptserver
    • Datenbank freigeben (0)
VORSCHLAG:
  • Anwendung startet
    • Warten auf freie Datenbank (0)
    • Datenbank sperren (1)
  • Anwendung endet
    • Datenbank freigeben (2)
  • Service Abgleich
    • Warten auf freie Datenbank (2)
    • Datenbank sperren (1)
    • Daten zum Hauptserver
    • Daten vom Hauptserver
    • Datenbank freigeben (0)
  • Service Abgleich
    • Warten auf freie Datenbank (0)
    • Datenbank sperren (1)
    • Daten vom Hauptserver
    • Datenbank freigeben (0)
Alles was es da an Sync-Problemen aktuell gibt, werden mit diesem Ansatz nicht gelöst, ist aber auch nicht Gegenstand der Frage gewesen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Thread getriebene SQLite Zwischenschicht?!

  Alt 5. Nov 2014, 09:52
Was ich nicht verstehe "Datenbank sperren" ist doch ein unnötiger Flaschenhals Datensatz/sätze wäre mir einleuchtender.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#6

AW: Thread getriebene SQLite Zwischenschicht?!

  Alt 5. Nov 2014, 10:10
Genau, denn damit wird die lange Wartezeit bei vielen Änderungen nicht vermieden. Und wenn man den Datensatz sperrt, dann so kurz wie möglich und dann gibt es wieder 'race conditions', die gelöst werden müssen. Aber das ist ja alles keine Hexerei. Wenn z.B. ein Datensatz gerade zum Ändern gesperrt ist, kann er nicht aktualisiert werden. Dann würde eine Aktualisierung u.U. einen Reconcilekonflikt auflösen (Feld A wurde lokal und global verändert, wer gewinnt?)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.157 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Thread getriebene SQLite Zwischenschicht?!

  Alt 5. Nov 2014, 11:21
@Dejan Vu & @Sir Rufo

Ich macht Euch viel zu viele Gedanken. Das Funktioniert doch schon alles...

OnBeforeOpen
- Get New & Lock
OnAfterClose
- Post New & Unlock

Leider habe ich auf ein eindeutiges ID (Autoinc) bei Design gesetzt... War ein Fehler! Aber darum geht es ja gar nicht.

Nur als kleinen Hintergrund:
Das Ganze ist aus der ENZ-BTreeIsam aus DOS-Zeiten noch. (Ja ich bin alt...) Und da wurde halt eine SeekNr genommen.
Dann habe ich die Routinen für Windows 95 und Delphi 3 auf Windows umgestellt.
Mit Delphi 4 (glaube ich) habe ich eigene Datenbank Komponenten geschrieben die auf diese Datenbank aufsetzen.
Mit Delphi 7 habe ich das ganze (ohne eine Zeile am Hauptprogramm zu ändern) auf MySQL umgestellt)! Und aus der SeekNr wurde das ID.
Mit Delphi 2007 dann den Serverübergreifenden Sync (auch wieder ohne eine Zeile am Hauptprogramm zu ändern)!
Jetzt stehen halt mal wieder Verbesserungen an und ein Wechsel zu FireDac um die Fehler der alten MySQL Komponenten los zu werden.

Da ich FireDac entwas "unübersichtlich" finden... Meine Frage ob ich mit ner MemTable die im Hintergrund auf den Server das Update durchführt, auf dem richtigen Weg bin oder lieber etwas anderes nehmen soll.

An eine Service-Anwendung hatte ich auch schon gedacht... Läßt sich nur immer so schlecht debuggen.

Vielleicht auch lieber einfach per TCP/IP in eine App auf dem lokalen Server einloggen die Daten "nativ" also binär übertragen und auf dem lokalen Server erst in SQL umwandeln. ALLE Daten liegen sowieso in Records vor. Eine TCP/IP Übertragung der nativen Daten, wäre warscheinlich sowieso um den Faktor 10x bis 100x schneller... Und dann kann die "Serverapp" losorgeln.

Oder und daher der Title "Thread" die Umwandlung lokal innerhalb der Software und dann auf den Server. Die Software läuft sowieso fast 24/7.

Grüsse Mavarik
  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 19:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz