Autor Beitrag
Josef-B
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 293

2003 Server, Win7, Win8
Delphi 2010 Pro, Firebird 2.5
BeitragVerfasst: Di 02.02.10 16:34 
Hallo,

wir bekommen plötzlich eine Filiale :-)

Ich hab die Aufgabe, eine Filiale an unsere Firebird-Datenbank anzubinden.

Hat jemand Erfahrung, wie man das am besten macht?

Ist Replikation das richtige Stichwort?

Filiale und Zentrale sollen möglichst ne gespiegelte Datenbank haben.
kkausp
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 77
Erhaltene Danke: 1

W2K, WIN XP, WIN XPe; WIN7
(D1;D2;D5;) D6 Ent.; D2009 Ent.
BeitragVerfasst: Di 02.02.10 17:36 
Hallo,

vielleicht reicht eine Anbindung per VPN-Tunnel?

Vorteil: nur eine DB, Nachteil: Performance,Stabilität,Aussfallsicherheit
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Di 02.02.10 21:07 
Auch bei einer gespiegelten Datenbank musst du in irgend einer Form eine Synchronisation der beiden DBs hinbekommen. Also brauchst du eine Verbindung über die die Daten jeweils in die anderen DB geschrieben werden können.
Bei einer Spiegelung sind ja beide DBs eigentlich identisch. Denn eine Spiegelung dient häufig nur der Erhöhung der Ausfallsicherheit.
Beachtest du die Synchronisation der fernen DB nicht kann es unter Umständen zu Konsistenzproblemen kommen. Also das du Datensätze in deine lokale DB scheibst die du in die anderen nicht reinbekommen hättest da ein uniquer Key schon vorhanden ist. Oder lass es einfach ein AutoInc Wert sein der dann doppelt vergeben ist. Das heißt dann auch das ein nachträgliches synchonisieren nicht wirklich möglich ist.

Mir fallen fürs erste zwei Lösungen ein:

  • Zugriff auf die DB im Stammhaus via Internet, VPN, etc. Es liese sich dafür auch ein Server einrichten der über das Internet erreichbar ist und sich um nichts anderes kümmert außer die DB bereitzustellen.
  • Für jedes Haus eine eigene DB. Die Daten werden nicht gemischt, aber ein bis mehrmals täglich synchronisiert. Die Anwendung greift auf die fremde DB jeweils nur lesend zu und erstellt Referenzen in der eigenen falls dies nötig ist.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
Josef-B Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 293

2003 Server, Win7, Win8
Delphi 2010 Pro, Firebird 2.5
BeitragVerfasst: Di 02.02.10 22:03 
Danke für eure Beiträge,

ich suche nach einer Möglichkeit, die recht schnell umsetzen kann.

Die Probleme, die ihr schildert, sind natürlich einleuchtend. Wenn ich einfach per VPN auf die Datenbank zugreife ->
wird das nicht zu langsam? Denn ich habe bisher keine Stored Procedures verwendet. Da werden doch dann viele Daten hin und hergeschickt, nämlich die kompletten SQl-Abfragen, oder?

Mein Gedanke war, wenn ich die Datenbank spiegele, dass dann eben nur die geänderten Daten übermittelt werden und somit weniger Daten auf die Reise geschickt werden.
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Di 02.02.10 22:22 
Eine "relativ" einfach zu implementierende Möglichkeit wäre: Alle AutoInc-Werte und deren Trigger so zu modifizieren, dass auf der einen Seite nur gerade und auf der anderen nur ungerade Zahlen verwendet werden, so gibt es keine ID-Konflikte. Die Synchronisation basiert dann einmal auf dem Abgleich der IDs für neue Werte auf der jeweils anderen Seite und die Modified-Daten eines jeden Datensatzes. Nur Modifikationen des gleichen Datensatzes auf beiden Seiten führt dann zu Problemen, weil entweder der letzte gewinnt oder Du einen Merge-Prozess einbauen musst, der wieder mehr Arbeit kostet. Die Synchronisation würde jedenfalls auch einen längeren Ausfall der Verbindung recht gut überstehen.

Das wäre mir jetzt spontan eingefallen, was schnell gehen würde. Nur: Schnellschüsse rächen sich meistens ziemlich schnell.
Josef-B Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 293

2003 Server, Win7, Win8
Delphi 2010 Pro, Firebird 2.5
BeitragVerfasst: Di 02.02.10 23:03 
hmm, UGrohne: aber das funzt auch nur bei einer Filiale, wenn da mehrere angebunden werden, gibts wieder ein Problem. Wie machen das die Profis mit solchen Filialketten?
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Di 02.02.10 23:06 
user profile iconUGrohne hat folgendes geschrieben Zum zitierten Posting springen:
Eine "relativ" einfach zu implementierende Möglichkeit wäre: Alle AutoInc-Werte und deren Trigger so zu modifizieren, dass auf der einen Seite nur gerade und auf der anderen nur ungerade Zahlen verwendet werden, so gibt es keine ID-Konflikte.
...
Das wäre mir jetzt spontan eingefallen, was schnell gehen würde. Nur: Schnellschüsse rächen sich meistens ziemlich schnell.

Das ist auch eine Idee. Ehrlich gesagt für den Anfang sogar eine recht gute. Aber nicht mehr wenn dann die nächste Filiale kommt.

Also lieber ein bisschen mehr Zeit und Geld investieren und eine bessere Lösung nehmen. Also das Firmennetzwerk via Internetanschluss und VPN oder was ähnlichem auf die Filiale ausweiten und auf die gleiche DB zugreifen. Ein SQL Script läuft ja eh immer auf dem Server. Die Ergebnismenge oder Tabelleninhalte sollte man aber so abfragen das immer nur die gerade sichtbaren Daten geladen werden müssen. Selbst wenn via VPN nur 50KB/s übrig bleiben sollten ist das für normale DB abfragen immer noch schnell genug. Außer du schleppst rießige Blob Felder durch die Gegend.

ADS (Advantage Database Server) (den verwenden wir) verfügt zum Beispiel über drei Verbindungsarten (Lokal, also via direkten Zugriff auf die Dateien; Remote, via direkte TCP/IP Connection übers Firmennetzwerk; Internet, wie Remote nur das der Server übers dem Internet erreichbar sein muss. Dabei ist dann Verschlüsselung und Kompression der Daten gleich mit dabei, so das man sich einen Tunnel sparen kann.)

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Mi 03.02.10 08:27 
Der Klassiker für Filialanbindung ist doch einfach einen Terminalserver hinzustellen, auf dem die Filiale dann arbeitet, oder? Dann musst Du keine Verrenkungen mit der Datenbank machen, weil es für die so ist, als wäre es ein ganz normaler Client.
Und Du kannst Updates einfacher einspielen. Auf jeden Fall wäre das für mich die Lösung der Wahl.

Ich habe schon oft solche Lösungen gesehen. Auch Filialen im Ausland, die so an den Firmensitz angebunden werden. Das läuft recht problemlos.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Lemmy
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 792
Erhaltene Danke: 49

Windows 7 / 10; CentOS 7; LinuxMint
Delphi 7-XE10.1, VS 2015
BeitragVerfasst: Mi 03.02.10 09:09 
Hi,

schau mal:
www.firebirdfaq.org/faq249/

Nebenbei: die Geschichte mit der ID setzt mind. eine der Lösungen um (das hier wars glaube ich www.meta.com.au/).

Und noch was: Wie ist das mit der Filiale: Ist es absehbar, dass in nächster Zeit eine weitere Filiale aus dem Boden gestampft wird? Wenn ja, dann musst Du dich gleich nach was entsprechendem umschauen. Wenn nicht: Warum komplizierter und teurer machen als die Anforderungen sind? Klar kannst Du dir auch dafür eine Alternative überlegen, stell aber dann auch die Kosten zusammen und entscheide dann was Du umsetzt - außer natürlich Du hast Zeit und Geld im Überfluss zur Verfügung ;-)

ach und noch was: Die Lösung mit der ID funktioniert auch mit mehreren Filialen :-) Wie verrate ich jetzt aber nicht, da solltet ihr aber eigentlich schnell selbst drauf kommen...

GRüße
Lemmy

P.S.: Eben fällt mir ein: Firebird hat ein echtes Problem beim Zugriff über ein langsames Netz (wie das Internet): Es schickt einfach zu viele "unnötige" Informationen hin und her (da gehts um Internas des Firebird-Protokols www.firebirdfaq.org/faq53/). Allerdings hat sich da einer was überlegt: Er setzt vor den eigentlichen Firbird-Server einen Dienst, der die SQL-Anfragen des Clients entgegen nimmt, diese an den Server weiter reicht und die Ergebnismenge dann als "einfachen" Stream wieder an den Client zurückschickt. Geht angeblich sau schnell. Ich such mal nach der entsprechenden Internetseite


Zuletzt bearbeitet von Lemmy am Mi 03.02.10 09:26, insgesamt 1-mal bearbeitet
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Mi 03.02.10 09:25 
Derartigen Programem wären
ZeDeBee oder stunnel

_________________
Markus Kinzler.