Announcement

Collapse
No announcement yet.

Access oder MSDE?

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

  • Access oder MSDE?

    Hallo,

    die folgende Frage dürfte sich für viele von Euch wohl eher lächerlich anhören, aber vielleicht habt Ihr ja kurz Zeit... (wüßte nicht, wo ich sonst gezielt Antworten auf diese Frage finden sollte)

    ich bin grade dabei eine Anwendung in VB.net zu implementieren, die vermutlich 5-6 Usern auf versch. Clients die Möglichkeit bietet, Buchungen auf einen zentralen Datenbestand vorzunehmen. Dieser ist als Accessdatenbank angelegt.

    Die Verbindung wird jeweils über odbcConnection.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};DBQ= ...
    aufgebaut. Die Datenbank besitzt ca. 30 Tabellen.

    Meine Frage ist nun, ob es ratsam wäre anstelle dieser mdb-Datei eine MSDE Datenbank zu benutzen und zwar aus folgenden Aspekten:

    1) Sicherheit. Momentan bin ich hierbei auf dem Stand Null! Alle Benutzer haben Lese und Schreibrechte auf das entsprechende Verzeichnis. Das heißt die Datei ist nicht grade die sicherste Lösung. Auch beim Login: hier nutze ich die daten aus einer benutzertabelle zum abgleich. die anwendung reguliert dabei die rechte des Bentzers. Rein Datenbanktechnisch haben sie aber alle die gleichen Rechte.
    Für MSDE hatte ich mir überlegt den Anwender über eine ähnliche benutzertabelle zu authentifizieren, die db verbindung aber weiterhin überall mit dem gleichen db-benutzer account vorzunehmen. Die Accountdaten muß ich ja dann irgendwo lokal beim Client ablegen. Das Problem hätte ich dann, wenn ein Benutzer (der vielleicht auf anwendungsebene niedrige Rechte hat) in Besitz dieser Informationen kommt und "per Hand" höchst riskante SQLAnweisungen rausschicken kann... uiuiui...
    Andererseits frage ich mich, wie hoch der aufwand wäre, beide benutzertabellen zu kombinieren? andere ideen habe ich aufgrund meines beschränkten erfahrungsschatzes nicht bzw. ich kann nicht einmal die richtige lösung abschätzen. was macht man in einem solchen fall gemeinhin? (ich meine jetzt nicht bei niedrigem Erfahrungsschatz, sondern bei der Benutzerverwaltung :-)

    2) Verbindungsaufbau. was mache ich, wenn ich keine festen ipadressen habe? (liegt in diesem fall zwar vor, aber prinzipiell)

    3) In anderen Beiträgen in diesem Forum habe ich von einem Leistungsbruch bei mehr als 5 Nutzern gelesen. Ich nehme an, dass es sich dabei um gleichzeitig angemeldete und agierende Nutzer handelt. Ist das richtig? Es wird vermutlich selten vorkommen, dass 5 Zugriffe gleichzeitig auftreten.
    Ich nutze für Select-Anweisungen den OdbcDataAdapter, bei Insert und Update baue ich vor der OdbcCommand.ExecuteNonQuery eine Verbindung auf und hinterher wieder ab.

    4) Datentypen. Ich hatte mal in entfernter Vergangenheit ein Intermezzo mit VB und dem SQLServer. Woran ich mich erinnern kann, ist, dass ich meine Fließkommazahlen des Typs Double aufgrund der deutschen Zahlenformatierung mit dem "," als Dezimaltrennzeichen nicht korrekt in die Datenbank abspeichern konnte und umgekehrt eingetragene Werte nicht korrekt auslesen konnte. Weiter hatte ich mich damals mit dem Problem nicht beschäftigt.
    Werde ich die gleiche Problemstellung auch bei MSDE haben? Und wenn ja, was ist die Lösung? Wie sieht es mit den anderen Datentypen aus (z.B. Boolean?)

    Ich danke Euch im Voraus für die Beantwortung meiner Fragen. Kenne mich mit Datenbanken eigentlich gar nicht aus...

    Viele Grüße
    Alborz

  • #2
    Hallo Alborz,

    entwickle selber seit Jahren Datenbankanwendungen und habe ebenfalls mit Access begonnen. Schon mein erstes Projekt ging daneben, weil Access zB nicht unbedingt für eine Anwendung geignet ist, die rund um die Uhr laufen muss und bei der viele Deletes und Inserts erfolgen. Access verwendete da nämlich nicht den durch das Löschen freigewordenen Platz sondern hängt Inserts IMMER hinten an, wodurch nach spätestens 3 Wochen immer die Platte voll, aber Komprimierung im laufenden Betrieb nicht möglich war.

    Daher erfolgte Umstellung auf die MSDE, die dann wegen stark steigendem Datenaufkommen und vieler Erweiterungen ein Jahr später gegen einen richtigen SQL-Server getauscht wurde, der jetzt, etwa 7 Jahre später, mit vielen Erweiterungen und noch mehr Daten problemlos seine Arbeit tut.

    Hatte zwischendurch einen Versuch mit Interbase, der aber auch schief ging, diesmal weil der Kunde von der Hardware und den Betriebssystemen her ein ziemlich mieses heterogenes Netz hatte und die dadurch anfallenden andauernden Störungen im Netz von der Interbase nicht richtig verdaut werden konnten. Alle 2 Tage Datenbank neu aufbauen wollte der Kunde nicht und alle PC's (etwa 50) inkl. Software tauschen natürlich auch nicht. Habe also wieder alles auf MSDE umprogrammiert und ab da lief (und läuft auch jetzt noch) alles ohne Probleme.

    Nun noch eine kleine beschreibung zu diesem Kunden und dem Projekt: es geht dabei um eine Auftragszeiterfassung, bei der etwa 80 Personen an ca. 20 terminals, die alle gleichzeitig connected sind, ihre Tätigkeiten buchen (etwa 9000 Buchungen pro Monat). Die entsprechenden Zeitsummen werden durch eine Buchung am Server immer sofort automatisch berechnet. Und dazu muss das System checken, um welchen Tag es sich handelt, welcher Tagesplan mit dem Mitarbeiter verknüpft ist, welche Regeln dazu existieren (maximale Dauer, Pausenabzug, Feiertag, Überstunden, Schichtarbeit,...) und und und... Und dann wird das Ergebnis auch noch sofort am Buchungsterminal als Antwort zur verfügung gestellt. Weiters werden von der Geschäftsleitung diverse Auswertungen bezüglich Aufträgen und Mitarbeiter gefahren über frei definierbare Zeitbereiche, die manchmal auch über mehrere Monate reichen. Und das alles läuft derzeit noch mit der MSDE !!

    Fallweise kommt es mal zu Leistungsüberschreitungen, die man dann ganz einfach über "dbcc concurrencyviolations" herausfinden kann. Aber bisher war das noch nie so schlimm, das der Kunde auf den SQL-Server wechseln wollte.

    Es hängt nämlich nicht von der Anzahl der connects ab, sondern was gerade alles läuft. Der sogenannte workload gouvernor lässt maximal 8 Prozesse parallel zu, der Rest wird in einer Queue zwischengelagert bis wieder Kapazitäten frei sind. Und wenn man sein System klug programmiert, kann man damit irrsinnig viel anstellen. Genauso wie man mit falschem Tabellenaufbau und schlechten SQL-Skripten das Ding auch in Grund und Boden fahren kann.
    Aber google dir doch mal im Internet ein paar Beschreibungen über "stored Procedures" und "Trigger" heraus, das ist eigentlich der große Unterschied zu Access und ein Hauptgrund, warum für mich Access nie mehr in Frage kommen wird (na ja, ich schreibe auch keine 'kleinen' Lösungen mehr).

    Ach ja, Zugriff mache ich nur über ADO, keine ODBC-Geschichten mehr (ist auch schneller, glaube ich) und was die Sache mit dem Dezimalpunkt angeht, so ist das normalerweise kein Problem, wenn man Dezimalwerte als solche übergibt und nicht als String, den die DB dann selber automatisch umkonvertieren sollte. Programmiere selber mit Delphi und da ist ein Datenbank-Double-Feld auch ein Double-Feld in der entsprechenden Delphi-Datenbankkomponente. Ansonsten wenn man das weiß, kann man ja leicht etwas dagegen tun und das wäre für mich daher der letzte Grund, deswegen Access der MSDE vorzuziehen.

    Also für mich persönlich war die Entscheidung für die MSDE die beste Entscheidung, die ich datenbankmäßig je getroffen habe und ich kann dir nur raten, sieh dir die MSDE gut an, sie ist schnell, stabil, hat eine irre Doku dabei, kostet da fakto nix und kann bei Bedarf in Null komma Josef gegen den SQL-Server getauscht werden. Der einzige Grund dagegen wäre, wenn ich mich in einer Unix-Umgebung bewegen würde/müsste (was aber bei mir nicht der Fall ist) oder ich nur eine DB zum Verwalten meiner CD's zu Hause bräuchte und von SQL und relationaler DB kein Ahnung hätte.

    bye,
    Helmut
    &#10

    Comment

    Working...
    X