Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbank zur Ablage von (mitunter großen) Blob flieds? (https://www.delphipraxis.net/133127-datenbank-zur-ablage-von-mitunter-grossen-blob-flieds.html)

moelski 26. Apr 2009 07:01

Datenbank: N/A • Version: N/A • Zugriff über: N/A

Datenbank zur Ablage von (mitunter großen) Blob flieds?
 
Moin !

Da es ja offenbar mit der AbsoluteDB nicht funktioniert (http://www.delphipraxis.net/internal...t.php?t=156012) würde ichgernemal nachfragen ob da jemand was anderes empfehlen kann.

Wir haben eine MDI Anwendung wo jedes MDI Fenster ein TChart oder RichEdit ist. Den Inhalt der jeweiligen MDI Fenster würden wir gerne als Stream in einem Blob Feld in der Datenbank ablegen. Daneben müssen zu jedem Blob noch eine Menge anderer Infos abgelegt werden wie z.B. Erstellzeit, -datum, Beschreibung, ....
Aber das sind alles recht überschaubare Datenmengen. Das Problem sind die Streams die mitunter doch recht groß werden können (Bei einem RichEdit mit Bildern locker mal in Richtung 100MB).

Folgendes müsste die Datenbank "erledigen":
* Wenn ein MDI Fenster geschlossen wird, die Daten (Stream) in das zugehörige Blob Feld schreiben.
* Die Daten sind bei uns in einem TreeView strukturiert. Wenn der User ein Element im Tree anklickt wird das MDI Fenster (wenn nicht vorhanden) neu generiert und dann die Daten aus dem Blob zurück geladen.

Im Grunde ist das schon alles. ABER ... Da unsere Anwendung nun mal auf MDI basiert kann ein User zig Fenster auf einen Schlag schließen oder auch öffnen. Bedeutet das Laden der Daten aus der DB und in die DB sollte mittels Thread erfolgen. Bis hierhin konnte das die DB ja. Allerdings hat die AbsoluteDB bei großen Datenmengen die Tabelle gelockt. Und wenn man dann auf andere Datensätze zugreifen wollte ging nix mehr (Anwendung hängt).

Ach ja und die Datenbank sollte folgendes Unterstützen:
* Datenbank ist single File orientiert
* Tool um die Datenbank Datei auch ohne die eigentliche Anwendung öffnen / bearbeiten zu können
* keine extra Installationen für die Datenbank. Das verkraften unsere User nicht :) Also entweder so wie Abolute DB in die Anwendung integriert oder über externe DLLs die man direkt mit der Anwendung installieren kann.
* Lizenz sollte auch für kommerzielle Nutzung geeignet sein.

Kann da jemand was zu empfehlen?

mjustin 26. Apr 2009 07:15

Re: Datenbank zur Ablage von (mitunter großen) Blob flieds?
 
Für Single-User-Betrieb: Embedded Firebird. Eine Embedded InterBase Version (InterBase 2009 ToGo, unter 3 Megabyte) scheint es auch zu geben. Dabei läuft kein separater Datenbank-Server-Prozess, die Datenbank-Engine wird in dem Prozessraum der Anwendung ausgeführt. Ich habe sie aber noch nicht getestet.

Pfoto 26. Apr 2009 07:44

Re: Datenbank zur Ablage von (mitunter großen) Blob flieds?
 
Hallo Dominik,

Auch wenn NexusDB jede Tabelle als separate Datei angelegt, nenne
ich das System mal hier, da es von der Geschwindigkeit und dem
SQL-Sprachumfang her sehr weit vorne liegt.
Der Zugriff kann auch ohne Probleme aus mehreren Threads heraus erfolgen.
Ich hatte mich für NexusDB entschieden, nachdem ich zuvor übrigens
AbsoluteDB und AccuRacer getestet hatte - die schnitten bei den
gleichen (großen) Datenmengen oft deutlich langsamer ab.

P.S. Ich weiß ja nicht, wie lange das Schreiben des Blobs dauert,
aber könnte man in der Zeit nicht ein Progressbar-Fenster zeigen, das
es für diese Zeit unmöglich macht, weitere Fenster zu schließen?
Zumindest wäre das doch in der Übergangszeit bis zur Implementierung
einer neuen DB sinnvoll.

Gruß
Jürgen

moelski 26. Apr 2009 08:37

Re: Datenbank zur Ablage von (mitunter großen) Blob flieds?
 
Moin !

NexusDB hatte ich mir auch schon mal angesehen. Allerdings finde ich da die Preise recht gesalzen ...
Und auf den ersten Blick ist mir auch nicht ersichtlich was ich für unser Vorhaben dort kaufen müsste.

Zitat:

Ich weiß ja nicht, wie lange das Schreiben des Blobs dauert,
aber könnte man in der Zeit nicht ein Progressbar-Fenster zeigen
Ja das ginge sicherlich. Allerdings darf auch keinen Fall der Main Thread hängen. Denn dann würden eingehende Daten verloren gehen was ungünstig wäre.
Hmm ich muss das mal testen ob das mit dem "Sperren" so geht. Das könnte in der Tat eine Lösung sein. Denn im Normalfall dauert das Speichern nicht soo lange.

Greetz Dominik

ConstantGardener 26. Apr 2009 08:48

Re: Datenbank zur Ablage von (mitunter großen) Blob flieds?
 
Hallo Moelski,

bei NexusDb ist die EmbeddedVersion ohne Source free. Mit Source 100 Aut$. Ich denke das ist mehr als ok. Für die Server wird per Entwickler abgerechnen (750 Aut$). Der AWE Server ist teurer und wird per Maschine abgerechnet. Den brauchst Du aber denke ich nicht.
Das waren die Preise bis V2. Die V3 kommt ja demnächst. Evtl. ändert sich dort dann was.

cg

moelski 26. Apr 2009 09:00

Re: Datenbank zur Ablage von (mitunter großen) Blob flieds?
 
Moin !

Nu die Embedded wäre ja genau was wir brauchen.
Und die kann auch Multi Thread ohne Table Lock?
Was mich dann aber dennoch etwas stört sind die Dateien pro Tabelle:
Zitat:

jede Tabelle als separate Datei angelegt
Geht das nicht in einer Datei ?

ConstantGardener 26. Apr 2009 09:19

Re: Datenbank zur Ablage von (mitunter großen) Blob flieds?
 
Hallo moelski,

ob Multithread in der der Form unterstützt wird kann ich auch nicht sagen. Schau am besten mal im Forum von NexusDB vorbei. Die Speicherung geschieht immer in einzelnen Dateien. Das hat natürlich Vor- und Nachteile. Wird nutzen eine Zip-Kompo um alle Datendateien, INIs, JPGs usw. in einer Datei zusammenzupacken um dem Nutzer das Handling zu erleichtern (Mandantenfähigkeit light sozusagen). Das Datenverzeichnis wird einmal unter Anwendungsdaten erzeugt und die gesamten Daten dann dort entpackt. Funzt ganz gut.

cg

alzaimar 26. Apr 2009 09:20

Re: Datenbank zur Ablage von (mitunter großen) Blob flieds?
 
Du könntest die BLOBs auch direkt in deine EXE (oder eine separate Resource-DLL) streamen, indem Du die Daten als resource deklarierst. Dann bräuchtest Du gar keine Datenbank. Wozu auch? :gruebel:

moelski 26. Apr 2009 09:24

Re: Datenbank zur Ablage von (mitunter großen) Blob flieds?
 
Moin !

Zitat:

Du könntest die BLOBs auch direkt in deine EXE (oder eine separate Resource-DLL) streamen
:gruebel: :gruebel: Wie meinen ?

Das sind ja keine festen Daten sondern das sind die Daten die der User aufzeichnet. Und das in die EXE bzw. in eine Resourcen-DLL??

Da kann ich gerade nich folgen.

Pfoto 26. Apr 2009 09:27

Re: Datenbank zur Ablage von (mitunter großen) Blob flieds?
 
Zitat:

Zitat von moelski
Moin !
Und die kann auch Multi Thread ohne Table Lock?

Ja, das geht auf jeden Fall.
In den Beispielen gibt es extra ein Demo mit Threadbasierten Schreib- Lesezugriff.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:14 Uhr.
Seite 1 von 2  1 2      

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