Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   PDF-Dokumente in eine Datenbank oder nicht (https://www.delphipraxis.net/183571-pdf-dokumente-eine-datenbank-oder-nicht.html)

Lemmy 21. Jan 2015 13:04

AW: PDF-Dokumente in eine Datenbank oder nicht
 
Zitat:

Zitat von RWarnecke (Beitrag 1287271)
Zitat:

Zitat von mm1256 (Beitrag 1287256)
Letzendlich ist es doch so, dass jede Variante ihre Vor- und Nachteile hat. ...., dann switcht man einfach um auf externe Dateien.

Mmh, darüber habe ich noch nicht so genau nachgedacht, das ja ein Switch zwischen Datenbank und Verzeichnis für die Ablage von PDF-Dokumenten recht einfach sein kann....

man sollte halt wirklich jeden Beitrag lesen, auch wenn es manchmal viele sind...

http://www.delphipraxis.net/1287207-post18.html

Zitat:

Zitat von RWarnecke (Beitrag 1287271)
Der Gedanke hat irgendwie Scharm, da muss ich mal weiter drüber nachdenken.

nicht nachdenken.. machen! :-)

RWarnecke 21. Jan 2015 13:08

AW: PDF-Dokumente in eine Datenbank oder nicht
 
Zitat:

Zitat von DeddyH (Beitrag 1287272)
Zitat:

Zitat von RWarnecke (Beitrag 1287271)
Da habe ich Zugriff auf alle SQLServer Varianten, dass stellt ein Problem dar.

So krass würde ich das aber nicht ausdrücken :lol: (SCNR)

Das ist genauer gesagt das Action Pack von Microsoft. Ja, da habe ich ein wenig übertrieben, aber der SQLServer ist auf jedenfall dabei.

RWarnecke 21. Jan 2015 13:12

AW: PDF-Dokumente in eine Datenbank oder nicht
 
Zitat:

Zitat von Lemmy (Beitrag 1287273)
Zitat:

Zitat von RWarnecke (Beitrag 1287271)
Zitat:

Zitat von mm1256 (Beitrag 1287256)
Letzendlich ist es doch so, dass jede Variante ihre Vor- und Nachteile hat. ...., dann switcht man einfach um auf externe Dateien.

Mmh, darüber habe ich noch nicht so genau nachgedacht, das ja ein Switch zwischen Datenbank und Verzeichnis für die Ablage von PDF-Dokumenten recht einfach sein kann....

man sollte halt wirklich jeden Beitrag lesen, auch wenn es manchmal viele sind...

http://www.delphipraxis.net/1287207-post18.html

Upps, den hatte ich irgendwie nur überflogen :oops: Aber ich gebe Dir recht, das Sir Rufo das gleiche nur in anderen Worten ausgedrückt hatte.

Zitat:

Zitat von Lemmy (Beitrag 1287273)
Zitat:

Zitat von RWarnecke (Beitrag 1287271)
Der Gedanke hat irgendwie Scharm, da muss ich mal weiter drüber nachdenken.

nicht nachdenken.. machen! :-)

Das ist auf jedenfall eine Variation, die weiter verfolgen werde.

sh17 21. Jan 2015 13:19

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 Dokanx.
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 integriert.

himitsu 21. Jan 2015 13:26

AW: PDF-Dokumente in eine Datenbank oder nicht
 
Zitat:

Zitat von mensch72 (Beitrag 1287214)
Zufällig habe ich vor 3Jahren eine ähnliche Lösung für einen Kleinbetrieb entwickelt.

Hier wurde vor paar Jahren auch zufällig alles umgebaut.

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.

Sir Rufo 21. Jan 2015 13:47

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:
TDocumentViewModel = class
public
  property IsLoading : Boolean;
  property HasData : Boolean;
  property Data : TStream;
end;
Beim ersten Zugriff auf die Eigenschaft
Delphi-Quellcode:
Data
sorgt das ViewModel dafür, dass die Daten (im Thread) geladen werden und setzt die Eigenschaft
Delphi-Quellcode:
IsLoading
auf
Delphi-Quellcode:
true
. Auf der Anzeige kann man das durch diesen AniIndicator darstellen (der drehende Kreis).
Hat der Thread die Daten geholt, dann wird der Eigenschaft
Delphi-Quellcode:
Data
der Stream gegeben und
Delphi-Quellcode:
IsLoading
wird wieder auf
Delphi-Quellcode:
False
gesetzt.
Hat der Thread keine Daten heranschaffen können, setzt man einfach
Delphi-Quellcode:
HasData
auf
Delphi-Quellcode:
False
.

vagtler 21. Jan 2015 14:49

AW: PDF-Dokumente in eine Datenbank oder nicht
 
Zitat:

Zitat von RWarnecke (Beitrag 1287274)
[...] Das ist genauer gesagt das Action Pack von Microsoft. Ja, da habe ich ein wenig übertrieben, aber der SQLServer ist auf jedenfall dabei.

Ich glaube, das war anders gemeint... :mrgreen:

DeddyH 21. Jan 2015 14:50

AW: PDF-Dokumente in eine Datenbank oder nicht
 
Stimmt :mrgreen:

Hansa 21. Jan 2015 23:21

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 ?

Perlsau 22. Jan 2015 07:36

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.

Nersgatt 22. Jan 2015 07:45

AW: PDF-Dokumente in eine Datenbank oder nicht
 
Oder nur ein inkrementelles Backup täglich machen und vielleicht nur wöchentlich ein Vollbackup.

Dumpfbacke 22. Jan 2015 08:46

AW: PDF-Dokumente in eine Datenbank oder nicht
 
Zitat:

Zitat von IBExpert (Beitrag 1287216)

Wir nutzen gescannte pdfs schon seit mehr als 10 Jahren, um die in eine Firebird DB zu packen und haben ein kleines viewer programm da drauf, mit dem man im extrahierten Text in einer zweiten Blobtabelle mit fk auf den PDF in der PDFBlob Tabelle eine Volltextsuche machen kann.

Wie kann man den den Text einer PDF Datei extrahieren ? Nutzt Ihr dazu eine Texterkennung die aus einem Programm angesteuert wird oder wie bekomme ich so etwas den hin ?

Zitat:

Zitat von IBExpert (Beitrag 1287216)
Für das Auslesen der DB nutze ich eine SP, die einfach die Blobs aus der Produktions DB zu einem PK ausliest und wenn die dort nichts gefunden hat, dann sucht die eben per execute statement on external auf der Archiv DB.

Könnte ich hierzu einmal bitte ein Beispiel bekommen wie ich so etwas zaubern kann ? So etwas habe ich schon mal benötigt aber niemals hinbekommen. Ich hoffe ich habe es richtig verstanden habe. Ich habe hier zwei Datenbanken mit jewals einer Tabelle. Nun mache ich eine Suche und wenn der Datensatz nicht in der 1. DB ist wird in der 2. DB nachgesucht. Dises geht mit einem SQL ?

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

Sir Rufo 22. Jan 2015 08:49

AW: PDF-Dokumente in eine Datenbank oder nicht
 
Zitat:

Zitat von Nersgatt (Beitrag 1287377)
Oder nur ein inkrementelles Backup täglich machen und vielleicht nur wöchentlich ein Vollbackup.

Wie sieht denn ein inkrementelles Backup von einer Datei aus?
(Denn darauf läuft es hinaus, wenn alle Dateien in der Datenbank sind)

Wie unterscheidet sich das vom Vollbackub? - Gar nicht :mrgreen:

Nersgatt 22. Jan 2015 08:50

AW: PDF-Dokumente in eine Datenbank oder nicht
 
Zitat:

Zitat von Sir Rufo (Beitrag 1287384)
Zitat:

Zitat von Nersgatt (Beitrag 1287377)
Oder nur ein inkrementelles Backup täglich machen und vielleicht nur wöchentlich ein Vollbackup.

Wie sieht denn ein inkrementelles Backup von einer Datei aus?
(Denn darauf läuft es hinaus, wenn alle Dateien in der Datenbank sind)

Wie unterscheidet sich das vom Vollbackub? - Gar nicht :mrgreen:

Du kannst mit nbackup von Firebirddatenbank inkrementelle Backups erstellen:
http://www.firebirdsql.org/manual/de...e-backups-incr

Natürlich nicht auf Dateiebene.

mkinzler 22. Jan 2015 08:54

AW: PDF-Dokumente in eine Datenbank oder nicht
 
Zitat:

Wie kann man den den Text einer PDF Datei extrahieren ? Nutzt Ihr dazu eine Texterkennung die aus einem Programm angesteuert wird oder wie bekomme ich so etwas den hin ?
Viele PDF-Dateien haben einen Volltextindex. Mit Acrobat o. ähnlichen Programmen kann man diesen auch nachträglich erzeugen lassen ( wenn notwendig auch per OCR z.B. wenn die Dokumente eingescannt wurden).
Zur Beschleunigung der Suche bietet es sich aber an, den Inhalt noch einmal gesondert zu Verwalten (Volltextindex o.ä.)

Perlsau 22. Jan 2015 09:41

AW: PDF-Dokumente in eine Datenbank oder nicht
 
Zitat:

Zitat von Dumpfbacke (Beitrag 1287383)
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:

Zum Einlesen der PDF-Datei in den Speicher verwendest du TFilestream. Diesen kopierst du dann in einen TBlobstream:
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;

DeddyH 22. Jan 2015 10:10

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.

IBExpert 22. Jan 2015 10:40

AW: PDF-Dokumente in eine Datenbank oder nicht
 
Zitat:

Zitat von Dumpfbacke (Beitrag 1287383)
Könnte ich hierzu einmal bitte ein Beispiel bekommen wie ich so etwas zaubern kann ? So etwas habe ich schon mal benötigt aber niemals hinbekommen. Ich hoffe ich habe es richtig verstanden habe. Ich habe hier zwei Datenbanken mit jewals einer Tabelle. Nun mache ich eine Suche und wenn der Datensatz nicht in der 1. DB ist wird in der 2. DB nachgesucht. Dises geht mit einem SQL ?

hier der reale sp quelltext aus unserer BRP Software, aber du solltest schon wissen, nach welchem Blob PK du suchst, weil du den parameter id an die sp brpgetdatei übergibt. In der Spalte TEXT haben wir aber immer den Volltext aus den PDFs extrahiert, so das man darüber mit containing gut und vergleichsweise schnell beliebige Suchen kombinieren kann. Es liesse sich aber auch das ggf noch in eine andere DB auslagern, die man dann auf einer ramdisk liegen hat oder andere lustige verfahren, wie zum Beispiel n superserverinstanzen, jeweils an die cores gebunden, die jeweils nur die volltextdaten zu einem teil der gesamt db haben und so weiter, haben wir alles schon mal so gemacht. In IMG ist übrigens ein preview des pdfs, so das ich in einer vorschau zumindest schon mal die vorschau als kachel anzeigen kann, ohne einen pdf client starten zu müssen, der ja meistens auch nur eine datei zur zeit kann.

Code:
--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
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.

IBExpert 22. Jan 2015 11:04

AW: PDF-Dokumente in eine Datenbank oder nicht
 
Zitat:

Zitat von Perlsau (Beitrag 1287375)
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.

ist schon ein relativ guter Wert für nomale datenbank, d.h. übliche Verteilung maximal 10-20 Prozent Blobkram, der rest NON Blob daten. Dafür rechne ich auf brauchbaren Servern beim Backup 2-3 GB pro Minute. Das gibt aber aufgrund der sehr seriellen Bearbeitung der Daten noch keine Hinweis auf den Serverspeed, dafür ist der Restore wesentlich interessanter.

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 10:54 Uhr.
Seite 2 von 2     12   

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