Datenbank Cachen (Kurz- / Langzeit)

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von BiedermannS.

    Datenbank Cachen (Kurz- / Langzeit)

    Hallo liebe Community,

    wir stellen bei uns in der Firma von einem alten CAD-System auf ein neues um. (Beide waren selbst erweiterbar {alt = Scriptsprache, neu = VBA/VB.NET})
    Im alten System waren diverse selbstgeschrieben Programme im Einsatz die einen Zugriff auf eine Datenbank benötigen. Was leider auch bedeutet, das man manche Programme nicht ausführen kann, sobald die Datenbank nicht erreichbar ist.

    Im neuen System wollen wir die Programme teilweise von der Datenbank unabhängig machen.
    D.h.: Wenn die Datenbank verfügbar ist soll die Datenbank verwendet werden. Sonst soll ein lokaler Speicher verwendet werden. (CSV, BINÄR, XML oder Datenbank-Cache?)
    Der lokale Zwischenspeicher soll sich in regelmäßigen Abständen selbst aktualisieren, damit man bei einem Ausfall nicht zu weit zurück hängt.

    Mit den Daten aus der Datenbank und den Daten aus dem CAD-System, werden auch wieder neue (berechnete) Daten in die Datenbank geschrieben. Diese müssen bei einem Ausfall auch zwischengespeichert werden und nachdem der Ausfall behoben wurde, in die Datenbank übertragen werden.

    Nachdem ein Ausfall war, sollten die Daten evtl. noch überprüft werden damit nicht mit alten Daten gearbeitet wird.

    Die Datenbank ist eine ORACLE Datenbank!


    Nun zu den eigentlichen Fragen:

    Welche Art von Datenspeicher ist am besten/einfachsten zu implementieren?
    • Kann der Cache diese Funktionalitäten liefern oder wäre es besser die Daten in Dateien (CSV,XML,Binär) zu speichern?
    Wäre es sinnvoll ein eigenes Programm zu schreiben welches selbstständig die Daten von der Datenbank holt bzw. diese schreibt?
    Gibt es vielleicht noch eine andere/bessere Möglichkeit, welche ich hier noch nicht aufgeführt habe?
    Gibt es gute Tutorials? Am besten auf Deutsch, da einige meiner Kollegen nicht so gut englisch können.


    Gleich mal Danke im Voraus für eure Antworten.

    Mfg
    Steve
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D
    ich würde versuchen, den Cache als Alternativ-DB anzulegen, SqLite, SqlCe oder sowas.
    Wenn ihr mit Ado.Net arbeitet, braucht man dann nur die Connections auszutauschen, und ansonsten nix am DB-Zugriff ändern.

    Also jdfs. die DB-Zugreiferei in DBExtensions habe ich so programmiert, dass genau das problemlos möglich sein sollte (ist allerdings noch nie in einem Produktiv-System getestet worden).

    Achso - hatten wir ja neulich, dass nicht klar ist, ob und wie VBA mit Datasets klarkommt.

    ErfinderDesRades schrieb:

    hatten wir ja neulich, dass nicht klar ist, ob und wie VBA mit Datasets klarkommt.
    Datasets wird glaub ich schwierig.
    AdoDB.RecordSets ist der üblicherweise verwendete Weg.

    Zum eigentlichen Thema:
    Ich würde die Oracle-Datenbank replizieren auf ein MySQL-DB.
    z.B. mit Tungsten.
    Das lässt sich laut diesem Video auch in Oracle einbinden.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Die Oracle Datenbank hat mehrere tausend Einträge und Tabellen welche für uns gänzlich irrelevant sind. Darum wäre replizieren zuviel des Guten.
    Wir benötigen einen dynamischen Zwischenspeicher der leicht erweiterbar ist (falls neue Dinge hinzukommen).

    Wenn es sein muss, schreibe ich nen COM-Wrapper der die Zugriffe auf die lokale DB steuert.

    Interessanter wäre, ob der Cache der bei Visual Studio als Vorlagedatei dabei ist, diese Synchronisierungsaufgaben bereits mitbringt. Dass würde einiges an Arbeit ersparen.

    Bin aber für jeden Vorschlag offen. :)
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D
    ich hab mal einen Screenshot angefügt.

    Angeblich übernimmt dieser Cache das Speichern der Daten und schickt diese dann an die Datenbank.

    Nur weiß ich nicht ob diese Daten dauerhaft verfügbar sind bzw. ob dies auch mit Oracle funktioniert. :S
    Bilder
    • Cache.JPG

      83,6 kB, 955×660, 150 mal angesehen
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D
    Wäre es denn schwer einen bzw. 2 Parser zu schreiben, der alle Daten im entsprechendem Format überträgt?

    z.B.:
    Man programmiert einen Dienst, welcher die benötigten Daten regelmäßig aus der Datenbank holt und diese in einem globalen Format auf der Festplatte speichert. (Parser 1 -> Speicherplatz für eingehende Daten)
    Man holt diese Daten in .Net und gibt Sie COM verfügbar aus, damit diese in VBA benutzt werden können. (Parser 2 -> Lädt die Daten für VBA)
    Die neuen Werte werden berechnet und wieder in dem globalen Format gespeichert. (Parser 2 -> Speicherplatz für ausgehende Daten)
    Der Dienst holt regelmäßig die gespeicherten Daten ab und schreibt diese in die Datenbank (Parser 1 -> Schreibt die Daten in die DB)

    Danach müsste man dem Dienst (z.B.: über WCF) sagen können, das er die Daten sofort holen bzw. speichern soll. Damit man auch per Hand immer die aktuellsten Daten hat.

    Das wäre der Ablauf den ich im Kopf habe...
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D