Einzelnen Beitrag anzeigen

jensw_2000
(Gast)

n/a Beiträge
 
#4

Re: [Suche] Geeignete Datenbank

  Alt 31. Aug 2005, 21:44
Dann ist der MSSQL dein Freund ...
Entweder in der kostenlosen Version (MSDE) oder aber die Standard- bzw. Enterprise Edition.

Wenn die Mitarbeiter primar mit ihren "Offline-Kopien" arbeiten, und der Server selbst nur zum Download der Daten gedacht ist, und wenn die DB (incl Transaktionsprotokoll nie grüßer als 2 GB wird, dann reicht die MSDE.

Wichtg ist das die MSDE auf 5 Workerthreads beschränkt ist.
Dadurch landen die Anforderungen, die über zeitgleich 5 Abfragen hinausgehen, in einer Warteschlange.
Somit geht die Performance stark in die Knie, wenn die Anzahl der parallelen Anforderungen relativ hoch ist.


Was geht ?

Ich habe für meinen Arbeitgeber ein kleines Störungsmanagement-System entwickelt in dem Kundenanfragen aufgenommen, Technikern zugewiesen und letztendlich abgearbeitet werden. Das ganze basiert auf der MSDE.

Abhängig von den Benutzernamen erstelle ich beim Beenden des Programms eine Offline-Kopie der DB
(AdoTable bzw. AdoQuery > SaveToFile ()). So verteile ich "Snapshots der Datenbank" auf die Notebooks von uns Technikern.
Wenn der Programm gestartet wird, überprüfe ich, ob eine Verbindung zum Datenbankserver hergestellt werden kann oder nicht. Wenn ja, connecte ich micht mir der DB, ansonsten lade ich die Daten aus der Offline-Kopie.

So weiss unterwegs jeder, welche Termine anstehen, hat Zugriff auf vorhergehende Einträge zu seinen Kunden, hat Infos über bestehende Wartungsverträge, ist informiert was die Kollegen auf dem Zettel haben etc.

Wenn jetzt ein Auftrag erledigt wurde, kann man ihn entweder in der Firma auf "erledigt" , oder man macht das in seiner Offline-Kopie.

Beim erneuten Connect mit dem DB-Server vergleiche ich dann die Datensätze des Mitarbeiters mit der DB und aktualisiere die SQL-Datenbank gegebenenfalls.

Das funktioniert gut. Die Offline-Kopien sind verhältnismäßig klein, das Speichern geht angenehm schnell und alle sind imformiert.


Was geht nicht ?

Die gespeicherten AdoDatasets sind "dumme Dateien". Die können keinen SQL-Server ersetzen.
Es gibt keine Beziehungen, keine Integritätsprüfungen, keine SQL-Abfragen, keine Sicherheit. Die ganzen netten Features die dir ein DB-Server bietet kannst du vergessen. Die Datenintegrität muss man durch eigene Programmierarbeit sicherstellen.

Anstatt einen Kunden via SQL (SELECT bla FROM Kunde WHERE ...) zu suchen, kannst du im Offline-Mode nur den kompletten Kundenbestand aus der Offline-Kundendatei laden und zur manuellen Auswahl anbieten.

Berechnete- oder virtuelle Felder sind in den Offline-Files (egal ob im XML oder im ADTG Format) generell ReadOnly.
Diese können Offline nicht editiert werden. Das selbe gilt für Offline-Koipen von Views und SP's.

Am Besten verwendet man so viele Offline-Daten wie möglich im ReadOnly-Mode und nur die Felder, die wirklich geändert werden sollen ( bei uns halt Status, Notitzen, Restarbeiten ) im Schreib-Lese-Modus.

Es ist eine je nach Komplexität der DB (bzw. der mobil benötigten Daten) eine Menge Entwickliungsaufwand nötig, und alles sauber zum Laufen zu bekommen.


Alternativen ?

Die MSDE unterstützt Merge Replikationen.

Warum also nicht einfach auf Identities verzichten, stattdessen GUIDS als Unique-Key verwenden und auf jeden mobilen Client eine Replikation der DB legen... ?

Die Idee ist generell gut.
Man hat absolute Freiheit und muss auf keinerlei Features verzichten.
Du kannst die DB dann sogar von extern replizieren (über eine VPN Verbindung, notfalls übers Internet).

Riskant daran ist nur, das der User dafür Sorge tragen muss, das seine DB nicht über 2 GB groß wird.
Zur Größe zählen auch die Transaktionsprotokolle.
Wenn z.B. jeden Sonntag eine Datensicherung geplant ist (bei der die Transaktionsprotokolle je nach Recovery Modell geleert werden), der User sein Notebook sonntags aber nie einschaltet, wird die Lösung nicht lange funktionieren.

Noch schlimmer wird es, wenn die DB irgendwann mehr als 2GB benötigte Nutzdaten enthält. Dann must du auf Schlag 10-100 SQL-Server Lizenzen kaufen... Dein Händler wird sich freuen ....


Falls deine DB nur ein paar Tabellen hat und die von den mobilen User optimaler Weise nur lesend verwendet werden sollen, dann löse es mit der Offline-Datasets.

Datenbanken mit vielen Tabellenbeziehungen, vielen "mobilen" Änderungen usw. würde ich lieber über eine Replikation lösen.

Auf eine gut programmierte SQL-Datenbank kann man in der Regel auch über eine Internetverbindung arbeiten.
Falls deine mobilen Clients von Homeoffices arbeiten, dann connecte diese doch einfach (über eine VPN-Lösung) mit deinem SQL-Server in der Firma. Dann brauchst du keine mobile Kopie der DB und hast immer aktuelle Daten ...



Ich hoffe es bringt dich etwas nach vorn,

Schöne Grüße,
Jens
  Mit Zitat antworten Zitat