Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi [Suche] Geeignete Datenbank (https://www.delphipraxis.net/52642-%5Bsuche%5D-geeignete-datenbank.html)

CReber 31. Aug 2005 20:20

Datenbank: Keine • Zugriff über: k. A.

[Suche] Geeignete Datenbank
 
Ich möchte ein vorhandenes Projekt komfortabler gestalten, indem ich es von Ini-Basis auf Datenbank-Basis umprogrammiere. Leider fehlen mir dazu noch geeignete Kenntnisse. Um nicht zu verzweifeln, möchte ich mich deshalb professionell beraten lassen ;)

Das Programm soll so ähnlich wie ein Anti-Virus-Programm aufgebaut sein. D. h. ich bearbeite die Datenbank und nach Abschluss wird diese in Dateiform vom Anwender automatisch runtergeladen und kann vom Programm ausgelesen werden.

Um die Wahl einer geeigneten Datenbank einzuschränken sollte sie demnach folgende Kriterien erfüllen.


1. Datenbank muss auf einem Server abgelegt sein

2. Datenbank soll über verschiedenste Benutzerkonten bearbeitet werden können. D. h. nicht nur ich, sondern ~ 10-100 andere sollen die Datenbank ebenfalls bearbeiten können. (über Win32 Anwendung)

3. Die Client-Anwendung soll einfach die Datenbank (Dateiform) runterladen und auslesen können...


Kostenlos brauch ich die Datenbank nicht zu sein, sondern nur einfach ;) Über Tipps wäre ich sehr dankbar...

Jelly 31. Aug 2005 20:25

Re: [Suche] Geeignete Datenbank
 
Zitat:

Zitat von Christian Reber
3. Die Client-Anwendung soll einfach die Datenbank (Dateiform) runterladen und auslesen können...

Wie kann ich da verstehen? Willst du nicht von deinen Clients auf die DB zugreifen sondern nur auf lokal abgelegte Kopien... Und wie flickst du diese vielen Kopien von all deinen Clients denn nachher wieder zusammen in die DB. Irgendwo muss du doch den eigentlichen Datenpool haben.

CReber 31. Aug 2005 20:29

Re: [Suche] Geeignete Datenbank
 
Ich glaube du hast mich falsch verstanden, bzw. ich habe mich etwas unbeholfen ausgedrückt.

Admin - verwaltet die Datenbank mit Informationen | davon soll es bis zu 100 geben

Server - is klar? :)

Client - soll die Datenbank runterladen bzw. diese soll in Intervallen aktualisiert werden und lokal dann ausgelesen werden


An einem Beispiel:

Symantec = Admin | Verwaltet die Anti-Virus-DB

Server = LiveUpdate | Hat die Anti-Virus-DB

Kunden von Symantec = Client | Lädt die Updates der DB runter, um immer auf dem neuesten Stand zu sein




So meinte ich das

jensw_2000 31. Aug 2005 21:44

Re: [Suche] Geeignete Datenbank
 
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

Lemmy 1. Sep 2005 11:49

Re: [Suche] Geeignete Datenbank
 
Alternative: Firebird. KOstet nix und wenn Offlinedaten verwaltet werden sollen arbeitet jeder Client mit dem Embedded Server. Alle Funktionen des Servers kann aber halt nur lokal verwendet werden. Kleiner Nachteil: Die Offlinedaten haben keinerlei Schutz! Wenn es also sensible Daten sind müssen die entweder in der DB verschlüsselt werden oder Du brauchst was anderes!

Lemmy

MrSpock 1. Sep 2005 11:56

Re: [Suche] Geeignete Datenbank
 
Als Ergänzung zu dem Vorschlag von Lemmy: Firebird läuft auf Linux und Windows Servern.

mschaefer 1. Sep 2005 12:45

Re: [Suche] Geeignete Datenbank
 
Moin, moin,

und um als Dritter in der Runde für Firebird zu werben:

Das System hat den Vorteil, dass hier die gleichen Datenstrukturen und Feldstrukturen lokal, wie auf dem Server gehalten werden können. Auch Du brauchst nur ein Verwaltungstool (z.B.: IB-Expert) und kannst die lokalen Datenbanken aus der Serverdatenbank heraus generieren. Ach ja und die Lizeznfreiheit von Firebird schlägt zu, wenn man viele Clients hat.

Ausserdem ist Sie über StoreProcedures bis UDF bestens erweiterbar und reicht von der Leistung bestens aus.

Grüße // Martin

Sharky 1. Sep 2005 13:39

Re: [Suche] Geeignete Datenbank
 
Hai,

für den Client könnte ich auch die Absolute Database empfehlen. Kosten für kommerzielle Nutzung zwar 100USD aber das ist okay finde ich. Für den Server dann irgendein richtiges DBMS ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz