iceget
Goto Top

Datenbank Sync. Programmieren

Hallo liebe Administrator.de Community,

und zwar ich habe folgendes Problem:

Ich habe einen DVD-Verleihautomat der im Internet hängt. Dieser Verleihautomat hat als Datenbank eine Access Datenbank (97er).
Da ich gerne dafür eine Online Reservierung coden möchte, benötige ich folgendes:

1. eine Art WebSync mit der ich in Echtzeit am DVD-Verleihautomaten die Access Datenbank überwachen kann, sobald sich was ändert soll dann automatisch dieser Datensatz mit einer MySQL Datenbank im Internet gesyncht werden.
2. der steigt per PHP und dieser gesynchten MySQL DB auf die Onlinereservierung ein, und reserviert einen Film (DB Struktur ist ganz einfach: Kunden,Filme).

Jetzt müsste ich eben erreichen das wenn der Kunde sich einen verfügbaren Film reserviert, das dann sofort der WebSync Client am DVD-Verleihautomaten einen Eintrag im Automaten macht.

Ingesamt dauert eine komplette Sync. 10 Minuten (mit den einer 2Mbit Leitung).

D.h. wenn ein Kunde den reserviert, und aber vor Ort innerhalbt von diesen 10 Minuten sich ein anderer Kunde diesen Film abholt, gibts eine Kollision.

Deswegen würde ich so etwas gerne programmieren.


- Wie kann ich überprüfen was in Echtzeit gerade auf dieser Access Datenbank geändert worden ist? Geht das überhaupt?
- Wie kann ich das erreich wenn der Kunde im Internet auf "Film reservieren" klickt, der Automat innerhalb von Sekunden diese Flag auch in der AccessDatenbank setzt?

Ich hoffe ihr wisst was ich meine.

Eine andauernde Sync. würde immer im Zeitraum von 10 Minuten abgehandelt werden, deswegen müsste ich mir in dieser Hinsicht was einfallen lassen.

Es soll eine eigene Online Reservierung werden, zumindest war das so geplant.

Die Hersteller dieses Automaten gibt es leider nicht mehr, und somit auch keine Internetreservierung.


Ich hoffe ihr könnt mir helfen!

Ich habe auch bereits versucht direkt mit der AccessDatenbank zu verbinden, jedoch läuft das nicht so wie gewünscht (das der Kunde direkt per ASP Webserver Interface sich auf die Access verbindet), ... das dauert viel zu lange.
Gibt's vielleicht eine andere Möglichkeit direkt von der Online Reservierung mit der Automaten DB zu kommunizieren? Und leider nein, ich kann keine andere DB am Automaten verwenden... das ist leider ein veraltetes System
wo ich leider keinerlei Zugänge für neuartige Software habe, ... ich persönlich hätte das am liebsten mit MySQL gemacht, dann wäre das mit dem direkten Zugriff vom Internet auch nicht das Problem, ...!


PS mit welcher Software sollte ich das coden? C#, VB?

Vielen Dank!

glg Markus

Content-Key: 152516

Url: https://administrator.de/contentid/152516

Printed on: April 25, 2024 at 12:04 o'clock

Member: kaiand1
kaiand1 Oct 06, 2010 at 23:09:13 (UTC)
Goto Top
Moin
Die Frage ist wie ist die Datenbank aufgebaut?
Kannst du da einen Film Sperren so das den keiner Bekommt?
Wie erkennst du das der User X nun da ist damit der Film entsperrt wird?
Wie ist die Technik vom Gerät?
Da du Access sagt nehme ich mal Windows an..
Member: maretz
maretz Oct 07, 2010 at 05:48:25 (UTC)
Goto Top
Moin,

ich würde da gucken wie die DB-Struktur aussieht. Gibt es z.B. ein Änderungsdatum in der Quell-Tabelle (oder in beiden)? Wenn ja - wunderbar. Kleines Programm geschrieben welches nur eben beide DBs ausliest, vergleicht wo unterschiede in den Datumswerten sind und gut. Je nach Datenmenge kannst du das sogar recht flott hinbekommen:

a) Du kopierst von der Access-Tabelle alle Werte deren Änderungsdatum z.B. 1 Std. zurück liegt (oder 2 oder nen Tag...). Als Ziel nimmst du ne Heap-Tabelle auf deinem MySQL-Server (d.h. Tabelle nur im RAM packen!). Zusätzlich packst du noch ein Feld in diese Tabelle "Changed".

b) Du prüfst nach welche Daten aus dieser Tabelle aktueller sind als die in deiner normalen Arbeitstabelle. Dies geht mit dem Vergleich des Datumsfeldes ja sehr schnell. Jetzt aktuallisierst du schnell die Daten. Da es nen Automat ist gehe ich mal davon aus das sich da nicht mehr als 20-50 Datensätze in ner Std. ändern (da die Leute vor dem Automaten ja auch Zeit brauchen).

c) Als nächstes prüfst du nach welches deiner Felder in deiner MySQL-DB aktueller ist als das in deiner Heap-Tabelle (weil dann ist es automatisch auch aktueller als alle anderen Daten!). Nun nimmst du den Wert und kopierst den in die Heap-Tabelle. JETZT setzt du ne 1 auf das Changed-Flag (sonst ist das immer 0).

d) Jetzt spielst du das ganze zurück -> überall wo changed=1 ist weisst du das du den Datensatz in der Access-DB aktuallisieren musst.


Wenn du das ganze gut programmierst dann läuft das Script/Programm vermutlich weniger als 10 Sekunden - da du gar nicht soviele Änderungsdaten hast die sich da zwischenzeitlich geändert haben können... Man könnte das Prog nun jede Minute laufen lassen (dann brauchst auch nur die Daten der letzten 3 Minuten - falls das ding mal einen Datensatz nicht bekommen hat) oder sogar per Thread bauen (dann hast du nur einen Connect je DB und kannst den immer nutzen). Wenn das ding alle 5-10 Sekunden durchläuft dann hast du ja nahezu keine Chance auf doppel-Reservierungen da die Person am Automaten länger braucht um nen Film zu wählen...
Member: Mad-Eye
Mad-Eye Oct 07, 2010 at 06:13:45 (UTC)
Goto Top
Hi zusammen,

Die Welt der DBs ist zwar nicht ganz so meine Welt aber wäre es nicht sinnvoller beide DBs auf MySQl umzustellen und eine Replikation einzubauen?

Bzw. Die DB im Netz als einzige zu bereiben und und vom Automaten die zentrale abzufragen?

Gruß
Mad-Eye
Member: Biber
Biber Oct 07, 2010 at 06:25:16 (UTC)
Goto Top
Moin iceget,

ist jetzt nicht destruktiv oder provozierend gemeint:
Warum nimmst du das nicht JETZT zum Anlass, den Quark nochmal neu runterzucoden?

Du sagst
  • im Netz hängt eine Access 97-MDB.... wir haben in paar Tagen 2011, dann ist das Format fast schon im besten Praktikantinnenalter.
  • der Verzapfer der alten Appz ist in Rente oder weigert sich zu Recht, da noch was anzupassen
  • die Datenstruktur ist so simpel wie es die Anforderung vermuten lässt.

Hau wech den Mist... was willst du denn da noch mit C#/.NET dranflanschen?!?

Grüße
Biber
Member: maretz
maretz Oct 07, 2010 at 06:41:54 (UTC)
Goto Top
naja - das problem is doch ganz simpel: Oft KANN man nicht einfach die DB wechseln...

Ich verstehe das so das der Automat gekauft wurde. Nun - schreibst du mal kurz ne neue Software für nen Automaten wo nicht nur der DB-Designer schon in Rente ist -> sondern auch die Konstrukteure, Entwickler usw.? Insbesondere wenn der Hersteller nicht mehr existiert (vermutlich weil der Klagen wg. der DB bekommen hat ^^ ;)) dürfte das schwer werden...

Also gilt die alte Weisheit: Musst du mit Pest und Cholera (oder - neudeutsch: Merkel und Regierung) leben -> dann arrangiere dich damit so gut es geht...
Member: iceget
iceget Oct 07, 2010 at 07:43:32 (UTC)
Goto Top
Hi!

Vielen Dank für eure Antworten!

Wie gesagt das umcoden der Software oder auch DB kommt leider nicht in Frage, ....

Heap-Tabelle? Das hört sich schon mal recht gut an.
Wie gesagt ich kann C# und VisualBasic. Mit welcher Sprache sollte ich das coden?

Gibt's auch irgendwo "Tutorials" wo es um Heap-Tabellen geht?
Oder ist eine "Heap-Tabelle" nur eine einfache Tabelle wo sich eben der Wert "changed" mit drin befindet?

Ich habe schon einige MySQL & MSSQL Updater Scripts mit C# geschrieben, also eher mit C#?

Okay also mach ich folgendes:
Ich code einen Updateclient (der auf dem Automaten läuft) der alle 10 Sekunden gestartet wird,
der auf das letzte Änderungsdatum in der Access Datenbank und auf changed = 1 auf der MySQL (wo sich was ändern kann) geht und nachschaut ob sich und wenn sich was geändert hat,
automatisch diesen Datensatz mit der MySQL Datenbank synct.

Und auf der MySQL Seite mach ich einfach die 1:1 selbe Datenbankstruktur nur halt mit einem changed Feld.
Wernn jetzt der Kunde einen Film reserviert, ändert sich genau bei diesem Eintrag von der Datenbank der Eintrag changed von 0 auf 1,
und beim nächsten Update des Updateclients sieht der genau das sich nun der Datensatz X geändert hat, und synct diesen von der
MySQL Datenbank zur Access Datenbank.

Habe ich das so richtig interpretiert? Oder ich glaube ich mache da mit dem Datum bzw. mit der Uhrzeit noch was falsch?

Vielen lieben dank

glg Markus
Member: iceget
iceget Oct 19, 2010 at 19:50:57 (UTC)
Goto Top
Hallo!

Vielen Dank für Eure Antworten!

Ihr habt mir sehr geholfen!

Habe dies nun mit einem SyncService gelöst (selbst gecodet in C#).

Hat zwar einige Stunden gedauert, aber nun läuft es face-smile


Vielen Dank!

lg Markus