Announcement

Collapse
No announcement yet.

Objekt in BLOB Feld speichern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Objekt in BLOB Feld speichern

    Hallo,

    ich möchte ein Objekt binär in einer IB-Tabelle speichern. Zur Zeit schreibe ich das Objekt in eine TMemoryStream Instanz, um es von dort in ein TBlobField zu schreiben.

    <PRE>
    FStream := TMemoryStream.Create;
    FStream.write(LinkDataTable^,FDataSize);
    FStream.Position := 0;

    with IBSQL do
    begin
    Params[0].LoadFromStream(FStream);
    Prepare;
    ExecQuery;
    Transaction.Commit;
    end;
    </PRE>

    Das Objekt verbraucht ca. 8 MB Speicher, sodaß der Vorgang eine kleine Weile in Anspuch nimmt. Wenn ich das Objekt per FileStream in eine Datei schreibe geht dies ca. 5 mal schneller. Dies scheint logisch, da nur ein mal gestreamt wird. Kann man in ein Blob Feld auch direkt schreiben? Also nicht über LoadFromStream oder ähnliches.

    Gib es einen anderen Ansatz, um 8MB Binärdaten in einer Tabelle zu speichern?

    Danke von Guido.

  • #2
    Hallo Guido,

    klare Antwort nein.
    Der langsamste Teil ist mit Sicherheit das Schreiben in die Datenbank (zum Performancetest kannst Du die Windowsfunktion QueryPerformanceCounter nutzen).

    Aus diesem Grund ist es i.d.R. sinnvoll die Daten voher zu komprimieren und erst dann in die DB zu schreiben.

    Das sollte 3 Vorteile bringen, 1. das lesen/schreiben geht schneller, 2. die DB wird nicht so aufgebläht, 3. der Netztraffic wird reduziert

    Tschüß

    Torste

    Comment


    • #3
      Hallo Torsten,

      du hast Recht, der langsamste Teil ist "Params[0].LoadFromStream". Ich bin in der OH jetzt über TIBBlobStream gestolpert. Das Beispiel hierzu war aber nicht nachvollziehbar, da Create keinen Parameter erwartet. (die OH sieht das anders)

      Wie verwendet man TIBBlobStream?

      Guid

      Comment

      Working...
      X