Announcement

Collapse
No announcement yet.

SQL DB und offline arbeiten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL DB und offline arbeiten

    Guten Tag,
    ... bis jetzt hab ich nur mit AccessDBs gearbeitet und habe nun eine neue Anforderung. Eine DB von der ich auch einen Teil "mitnehmen" kann um offline arbeiten zu können. Bei der nächsten Anbindung zum Netzwerk können die Daten zur StamnmDB dann wieder synchronisiert werden...
    Das ganze in C#, WPF, SQL Express, SQL Compact?.

    Das Szenario ist neu für mich - also eigene Erfahrungen hab ich keine und kann somit die einzelnen Ansätze nicht werten.
    Varianten die mir eingefallen sind.

    1) SQL Express die Datasets "manuell" füllen, Beziehungen herstellen, etc. Den Teil der DB den ich mitnehemen will als XML lokal auf die HD schreiben.
    + einfach und durchschaubar - XML wird viel Speicherplatz brauchen (Annahme oder ?), viel Handarbeit zum Verwalten der Tabellen

    2) SQL Express und das EntityFramework (muß ich mich erst tiefer einarbeiten) DB Anbindung wird mehr zur BlackBox - Offline Teil dann wie realisiern - auch XML??

    3) SQL Express und Compact Server. Eigentlich laut msdn das Produkt dafür. - am Anwender PC muß der CompactServer mit installiert werden. Laut meiner Literatur und Googelei ist die update Logik auch kein Alheilmittel - Konvertierung mdf auf sdf soll auch ein "Aufwand" sein..

    - danke für Eure Hinweise in welche Richtung ich mich am besten weiter Informieren soll...

    Michael

    p.s. die DB ist "überschaubar" ca.70 Tabellen und ich glaub die 1G Grenze wird lange nicht erreicht...
    p.s.

  • #2
    Die große Frage für mich ist hier, was bedeutet "offline arbeiten"? Wenn du eine Applikation hast, die mit dem SQL-Server arbeitet und du dann eine Variante mit XML als Datenbank haben wisst, dann heisst das, alles was mit Datenzugriffen zu tun hat doppelt zu programmieren, denn die Unterschiede sind da riesig. Warum bleibst du nicht bei Access als Datenbank für das Offline-Arbeiten? Da sind zumindest ein Großteil der SQL-Statements gleich. Und das Synchronisationsproblem hast du sowieso mit jeder Datenbank, egal für welche du dich entscheiden wirst.

    bye,
    Helmut

    Comment


    • #3
      - danke

      ... mein Ansatz war , das ich mir alle Daten die ich benötige als DataSet zusammenstelle - und dann eben als XML lokal ablege. Abfragen etc. würden dann nur innerhalb des Datasets stattfinden. Wenn ich eine Anbindung zum Server habe hätte ich versucht auch möglichist viel in die Datasets zu bringen um eben mit den selben Methoden arbeiten zu können - mit den zusätzlichen Funktionen den Datenbestand des DataSets durch Abfragen an den Server "anzupassen"..

      Es kann ja sein das mein Ansatz komplett falsch und umständlich ist. Mir fehlt noch komplett das Gefühl für so ein Szenario. Deshalb bin ich für jeden Tipp dankbar.

      Michael

      Comment


      • #4
        Warum nicht mit zwei gleichen DB arbeiten, einer lokalen und einer Serverdatenbank.

        Ist die Serverdatenbank nicht erreichbar, wird alles über die lokale DB abgewickelt. Ist die Serverdatenbank erreichbar wird eine Synchronisierung vorgenommen.
        Christian

        Comment


        • #5
          Originally posted by Christian Marquardt View Post
          Warum nicht mit zwei gleichen DB arbeiten, einer lokalen und einer Serverdatenbank.

          Ist die Serverdatenbank nicht erreichbar, wird alles über die lokale DB abgewickelt. Ist die Serverdatenbank erreichbar wird eine Synchronisierung vorgenommen.
          Würde ich auch vorschlagen. Wieso Mannmonate in Lösungen investieren die schon absehbar ab bestimmter Offline-XML-Größe Performanceprobleme bekommt gleich auch hier mit einer richtigen SQL-Datenbank arbeiten. Mit MS SQL Express bekommt man auch hier bis zu 10 GB kostenlos auf Client/Lokaler seite.

          Comment


          • #6
            Soll die Anwendung von mehreren Personen gleichzeitig verwendet werden? Wenn ja, wurde ich mir die Offline Variante überlegen weil sonst jeder Abgleich mit viel Arbeit verbunden sein kann.

            Zu XML: man kann die XML-Datei auch komprimieren dann ist es mit der Grösse nicht mehr so ein Problem.

            Anstonsten eignet sich z.B. SQLite. Hätte den Vorteil, dass die SQL Befehle zumindest grossteils mit der Server-DB identisch sind.

            Gruss

            Comment


            • #7
              Originally posted by Wernfried View Post
              Soll die Anwendung von mehreren Personen gleichzeitig verwendet werden? Wenn ja, wurde ich mir die Offline Variante überlegen weil sonst jeder Abgleich mit viel Arbeit verbunden sein kann.
              Wenn Du entsprechenden Nummernbereiche für die einzelnen Clients vergibst ist das kein Problem

              Originally posted by Wernfried View Post
              Zu XML: man kann die XML-Datei auch komprimieren dann ist es mit der Grösse nicht mehr so ein Problem.
              Die größe ist kein Problem. Die parsezeiten um Infos aus XML raus zu bekommen.

              Originally posted by Wernfried View Post
              Anstonsten eignet sich z.B. SQLite.
              Bei meinen Tests (vor 2-3 Jahren) musst ich feststellen das SQlite teilweise katastrophal langsam ist. Gegen ein MySQL/MS SQL Server oder ander kann es bei weiten nicht mithalten.

              Comment


              • #8
                Zu XML: man kann die XML-Datei auch komprimieren dann ist es mit der Grösse nicht mehr so ein Problem.
                Kennen keinen Parser, der ein komprimiertes XML bearbeiten kann. Die Filegröße wird wohl nicht das Problem sein
                Christian

                Comment


                • #9
                  .. soviele Inputs - danke :-)
                  ... also der mehrfache Hinweis - warum nicht 2DB´s ist dann eine SQL CE Variante gemeint (die ich ja mit meinem c# Projekt mitinstallieren kann) - oder ein "echter" SQL Express Server. Weil ein Problem - ja es sind mehrere unabhängige User - ist, daß ich die PCs / Laptops nicht alle unter meiner Kontrolle hab - da kann ich schwer dem User sagen "Installier halt SQL Express".
                  Ansonsten meine Gedanken GUIDs und "Verwaltungstabellen" in denen definiert wird welche Operationen (insert, update, (kein delete - nur IsActive Flag), etc.) mit den einzelnen Tabellen unter den jeweiligen "Betriebsmodi" erlaubt sind. So denke ich mir kann ich verhindern das jemand im Zuge der Sync. schaden anrichtet.

                  Michael

                  Comment


                  • #10
                    Der Teufel liegt ja wie immer in den Details und die kennen wir nicht, aber warum nicht SQL-Server als Hauptdatenbank und Access als Offline-DB? Dafür finde ich Access nicht schlecht, das KnowHow ist ja schon da und wegen der Datenbanktreiber braucht man sich auch keine Sorgen machen. Ich würde mit dieser Variante starten. Ob das Programm selber dann mit C#, Delphi, Java oder sonstwas geschrieben wird ist wieder eine andere Sache.

                    bye,
                    Helmut

                    Comment


                    • #11
                      Originally posted by hwoess View Post
                      Der Teufel liegt ja wie immer in den Details und die kennen wir nicht, aber warum nicht SQL-Server als Hauptdatenbank und Access als Offline-DB?
                      michael99 hat dir doch nichts getan das du ihm Access aufhalsen willst

                      Originally posted by hwoess View Post
                      Dafür finde ich Access nicht schlecht, das KnowHow ist ja schon da und wegen der Datenbanktreiber braucht man sich auch keine Sorgen machen.
                      Muss man sich. Access ist mehr oder minder eine bald abgekündigte Technik. Auf Embedded-Systemen muss man die JET-Engine explizit bei der Grundeinrichtung aktivieren. Und per MDAC wird's auch nicht mehr verteilt. Irgendwann wirds komplett gekippt und nur noch die diversen (MS) SQL Server-Editionen werden unterstützt.

                      Comment


                      • #12
                        Originally posted by michael99 View Post
                        .. soviele Inputs - danke :-)
                        ... also der mehrfache Hinweis - warum nicht 2DB´s ist dann eine SQL CE Variante gemeint (die ich ja mit meinem c# Projekt mitinstallieren kann) - oder ein "echter" SQL Express Server. Weil ein Problem - ja es sind mehrere unabhängige User - ist, daß ich die PCs / Laptops nicht alle unter meiner Kontrolle hab - da kann ich schwer dem User sagen "Installier halt SQL Express".
                        Ansonsten meine Gedanken GUIDs und "Verwaltungstabellen" in denen definiert wird welche Operationen (insert, update, (kein delete - nur IsActive Flag), etc.) mit den einzelnen Tabellen unter den jeweiligen "Betriebsmodi" erlaubt sind. So denke ich mir kann ich verhindern das jemand im Zuge der Sync. schaden anrichtet.

                        Michael
                        Warum installierst du die DB nicht mit deinem Programm. Des Weiteren gibt es DBs HSQL da ist die DB ein einziges File, was erst beim Zugriff angelegt wird
                        Christian

                        Comment


                        • #13
                          Originally posted by Bernhard Geyer View Post
                          Wenn Du entsprechenden Nummernbereiche für die einzelnen Clients vergibst ist das kein Problem
                          Wenn das möglich ist kein Problem. Wenn die verschiedenen Nutzer die gleichen Daten verändern wollen ist es mit Arbeit verbunden.


                          Originally posted by Bernhard Geyer View Post
                          Bei meinen Tests (vor 2-3 Jahren) musst ich feststellen das SQlite teilweise katastrophal langsam ist. Gegen ein MySQL/MS SQL Server oder ander kann es bei weiten nicht mithalten.
                          Das bedeutet aber, dass auf den lokalen PC's ein MySQL/MS SQL Server installiert sein muss. Keine Ahnung ob das eine Option ist aber eine Möglichkeit wäre es natürlich.

                          Gruss

                          Comment


                          • #14
                            Originally posted by Wernfried View Post
                            Wenn das möglich ist kein Problem. Wenn die verschiedenen Nutzer die gleichen Daten verändern wollen ist es mit Arbeit verbunden.
                            MS bietet hierfür auch Hilfserklärungen an um das zu Lösen: http://msdn.microsoft.com/de-de/libr...sql.90%29.aspx

                            Originally posted by Wernfried View Post
                            Das bedeutet aber, dass auf den lokalen PC's ein MySQL/MS SQL Server installiert sein muss.
                            Bei MS SQL Server gibt auf jedenfall die Kostenlose Express-Edition. Bei MySQL muss du schauen ob hier Oracle nicht schon zu viel Geld will. Wenn du deine SW an firmen verkauft und nur mit MySQL arbeitest wird auf jedenfall mindestens die kleinste kostenpflichtige Version für jeden Client fällig.

                            Comment


                            • #15
                              Vielleicht wäre auch Firebird eine Möglichkeit. Da gibt es eine Embedded-Version, die man nicht installieren muss. Kostenlos ist das auch alles und es gibt das sowohl für Windows als auch Linux.

                              bye,
                              Helmut

                              Comment

                              Working...
                              X