![]() |
AW: PDF-Dokumente in eine Datenbank oder nicht
Zitat:
![]() Zitat:
|
AW: PDF-Dokumente in eine Datenbank oder nicht
Zitat:
|
AW: PDF-Dokumente in eine Datenbank oder nicht
Zitat:
Zitat:
|
AW: PDF-Dokumente in eine Datenbank oder nicht
So, da wir jetzt hier fertig sind..:duck: nochmal eine Anregung, die vielleicht etwas untergegangen ist.
Was haltet ihr auf Client-Seite von virtuellen Dateisystemen um die Dokumente bereitzustellen? Wie etwa ![]() Das würde auch das "Problem" von Berhard mit seinen HTML/css Dateien klären. Ich glaube Docuware hat da auch etwas in der Art ![]() |
AW: PDF-Dokumente in eine Datenbank oder nicht
Zitat:
Früher alle Dateien in der Datenbank .... in einer einzigen Tabelle, die pg_largeobjects des Postgress, welche immer größer wurde. Zusätzlich bestand aber noch die Anforderung, daß Dokumente (notfalls) auch ohne Programm zugreifbar sind und eventuell einzelne Dateitypen (nach Dateiinhalt und nicht nach FileFormat) auf einem revisionssicheren Laufwerk gespeichert werden können sollen, welches irgendwie was Steuerrechtliches war. Nunja, hier läuft auch ein eigener AppServer, der via TCP/IP (DataSnap) die Dateien an die Clienten ausliefert. Die Verwaltungsdaten stehen natürlich dennoch in der Datenbank und nur die Datei liegt in den Verzeichnissen. (in einer optionalen Meta-Datei zu jedem Dokument dann noch so Sachen wie programmseitige Stempel, Marker oder Texte, welche auf das Dokument gelegt wurden) Vorteil ist auch, daß Backupprogramme hier sehr leicht mit differenziellen/inkrementellen Backups arbeiten können, da sie nicht nur eine große Datenbankdatei vorfinden. Schwierig bei einer DB-externen Speicherlösung ist nur, daß DB-interne Änderungen (z.B. in Triggern) nicht so einfach an das Dateisystem weitergegeben werden können. |
AW: PDF-Dokumente in eine Datenbank oder nicht
Zum Thema Dokumenten-Daten und Stream: Die kann man auch trennen. Die Meta-Daten sind idR sehr schnell verfügbar und der Stream dauert manchmal etwas länger. Also trennt man das und stellt ein Sammelobjekt zusammen.
Dieses Sammelobjekt weiß dann genau Bescheid, ob die Daten verfügbar oder angefragt sind.
Delphi-Quellcode:
Beim ersten Zugriff auf die Eigenschaft
TDocumentViewModel = class
public property IsLoading : Boolean; property HasData : Boolean; property Data : TStream; end;
Delphi-Quellcode:
sorgt das ViewModel dafür, dass die Daten (im Thread) geladen werden und setzt die Eigenschaft
Data
Delphi-Quellcode:
auf
IsLoading
Delphi-Quellcode:
. Auf der Anzeige kann man das durch diesen AniIndicator darstellen (der drehende Kreis).
true
Hat der Thread die Daten geholt, dann wird der Eigenschaft
Delphi-Quellcode:
der Stream gegeben und
Data
Delphi-Quellcode:
wird wieder auf
IsLoading
Delphi-Quellcode:
gesetzt.
False
Hat der Thread keine Daten heranschaffen können, setzt man einfach
Delphi-Quellcode:
auf
HasData
Delphi-Quellcode:
.
False
|
AW: PDF-Dokumente in eine Datenbank oder nicht
Zitat:
|
AW: PDF-Dokumente in eine Datenbank oder nicht
Stimmt :mrgreen:
|
AW: PDF-Dokumente in eine Datenbank oder nicht
Holger Klemt hat ja schon Recht. Im Prinzip gehört schon alles in die DB. Nur, ich habe hier folgenden Fall : 100 MB Datenbank mit Bewegungsdaten, die sich täglich ändern und deswegen imho täglich gesichert werden müssen. Dann sind da noch Daten von 10 GB, die sich eigentlich nur einmal im Monat ändern (Reklamebilder usw.). Soll ich die jetzt jeden Tag mitsichern ?
|
AW: PDF-Dokumente in eine Datenbank oder nicht
Hier bietet sich ganz klar die Verwendung zweier Datenbanken an: Eine für die täglich anfallenden Daten, eine für die "megagroßen Blobfelder" oder was auch immer deine 10 Gig belegt.
Aus Interesse: Wie lange dauert bei dir so ein Backup einer 10 Gigabyte Firebird-Datenbank? Ich hab eben mal bei mir nachgemessen. Das Backup meiner derzeit größten FB-DB mit ca. 2,7 GB dauerte 95 Sekunden auf demselben Laufwerk. |
AW: PDF-Dokumente in eine Datenbank oder nicht
Oder nur ein inkrementelles Backup täglich machen und vielleicht nur wöchentlich ein Vollbackup.
|
AW: PDF-Dokumente in eine Datenbank oder nicht
Zitat:
Zitat:
Des weiteren hatte ich noch eine Frage. Ich habe Delphi 7 un benutzte die IBX Komponeneten. Wie bekomme ich eine PDF Datei denn in die Datenbank rein und später erneut raus un sie anzuzeigen ? :oops: Tanja |
AW: PDF-Dokumente in eine Datenbank oder nicht
Zitat:
(Denn darauf läuft es hinaus, wenn alle Dateien in der Datenbank sind) Wie unterscheidet sich das vom Vollbackub? - Gar nicht :mrgreen: |
AW: PDF-Dokumente in eine Datenbank oder nicht
Zitat:
![]() Natürlich nicht auf Dateiebene. |
AW: PDF-Dokumente in eine Datenbank oder nicht
Zitat:
Zur Beschleunigung der Suche bietet es sich aber an, den Inhalt noch einmal gesondert zu Verwalten (Volltextindex o.ä.) |
AW: PDF-Dokumente in eine Datenbank oder nicht
Zitat:
![]() ![]()
Delphi-Quellcode:
Function TDatMod.FileToBlob(Feld: TField; Datei: String): Boolean;
Var S : TStream; FileS : TFileStream; begin Result := False; If Not FileExists(Datei) Then Exit; // aussteigen, wenn Datei nicht existiert If Not Feld.IsNull Then Feld.Clear; // Feld löschen, wenn es bereits befüllt ist Try S := Feld.DataSet.CreateBlobStream(Feld, bmReadWrite); // Blob-Stream erzeugen FileS := TFileStream.Create(Datei, fmOpenRead); // File-Stream erzeugen Try S.CopyFrom(FileS, FileS.Size); // Inhalt des File-Streams in Blob-Stream kopieren Result := True; Finally FileS.Free; // File-Stream freigeben S.Free; // Blob-Stream freigeben End; Except on e:exception Do Begin If Assigned(FileS) Then FileS.Free; If Assigned(S) Then S.Free; GLD.Fehlertext := e.Message; End; End; end; |
AW: PDF-Dokumente in eine Datenbank oder nicht
Das Exception-Handling sollte man aber noch einmal überdenken, FileS kann im blödesten Fall ein Dangling Pointer sein, da kann man später doppelt auf Assigned prüfen, nützt nix.
|
AW: PDF-Dokumente in eine Datenbank oder nicht
Zitat:
Code:
brpdat ist ein serverseitiger alias in der alias.conf, der auf die archiv db verweist. das könnte auch ein connectionstring auf einen ganz anderen server sein. Mit dre Prozedur BRPMOVEDATA kannst du einen zeitpunkt festlegen, ab dem alle älteren PDFs in die archiv DB wandern. Wir rufen die per aufgabenplanung am monatsanfang auf und übertragen die dateien, die älter als 30 tage sind. vorher wird per batch und gfix die db auf readwrite und danach wieder auf readonly gesetzt.
--info: diese tabelle gibt es in beiden datenbanken
CREATE TABLE DATEI ( ID BIGINT NOT NULL PRIMARY KEY, TXT VARCHAR(80), TS TIMESTAMP, DATEI BLOB SUB_TYPE 0 SEGMENT SIZE 1024, TEXT BLOB SUB_TYPE 1 SEGMENT SIZE 1024, IMG BLOB SUB_TYPE 0 SEGMENT SIZE 1024 ); --die proozeduren sind nur in der produktivdb create or alter procedure BRPMOVEDATA (MAXDATE date) as declare variable ID bigint; declare variable DATEI blob sub_type 0 segment size 1024; begin for select datei.id, datei.datei from datei where datei.ts<:maxdate and datei.datei is not null into :id,:datei do begin execute statement ('update or insert into DATEI (ID, DATEI) values (:ID, :DATEI) matching (ID)') (ID:=ID,DATEI:=DATEI) on external 'brpdat'; update datei set datei.datei=null where id=:id; end end; create or alter procedure BRPGETDATEI ( IDX bigint) returns ( ID bigint, TXT varchar(80), DATEI blob sub_type 0 segment size 80, TS timestamp) as begin select datei.txt, datei.ts, datei.datei from datei where datei.id=:idx into :txt, :ts, :datei; if (datei is null) then execute statement ('select datei from datei where id=:id') (ID:=IDX) on external 'brpdat' into datei; id=idx; suspend; end |
AW: PDF-Dokumente in eine Datenbank oder nicht
Zitat:
Eine reine BLOB Datenbank geht wesentlich schneller zu sichern. Hab gerade mal einen Kundenserver für den Test gequält und dessen 50GB Archiv DB (nur mit den ausgelagerten Blobs) wurde in 6 Minuten mit gbak gesichert, während der Srever und die db ganz normal vom Kunden benutzt wird. Hardware sind jeweils die von uns gelieferten IFS Server, die nicht zaubern, aber auch nicht mit aller Gewalt (Virtualisierung, externe Storage, Raid, ...) jegliche Datenbankleistung auf USB Stick Niveau runterdrücken. Wer eine IBExpert vollversion (menü services-benchmark)hat, kann das ja mal mit seinem eigenen vergleichen: die Kiste hat einen Driveindex von 160% und einen cpu Index von 135% und kostet 2000€ Zum anderen Beitrag: inkrementelles Backup mit nbackup rate ich persönlich von ab, es sei denn, man hat extrem große Datenbank (250Gb oder noch mehr). wenn im Rahmen deine updates und deletes nämlich viele pages geändert wreden, dann sind die alle in der teilsicherung. wenn deine db 50% der pages verändert, wird deine Teilsicherung etwa 50% der originalgröße sein. Am zwiten Tag hättest du dann schon die gleiche größe wie beim normalen backup mit gbak. Spätestens am Ende der Woche wird es dann unsinn |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz