AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datenbank für schnelle Bilder, Vorschläge bitte.
Thema durchsuchen
Ansicht
Themen-Optionen

Datenbank für schnelle Bilder, Vorschläge bitte.

Ein Thema von KodeZwerg · begonnen am 22. Apr 2018 · letzter Beitrag vom 28. Apr 2018
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Datenbank für schnelle Bilder, Vorschläge bitte.

  Alt 25. Apr 2018, 17:25
Die Suche ist Aufgebaut nach diesem Beispiel-Code von UIB:
Delphi-Quellcode:
unit main;

interface

uses
{$IFDEF LINUX}
  libc, QForms, QStdCtrls, QControls, QGraphics, QDialogs, QExtCtrls,
{$ELSE}
  Windows, Graphics, Controls, Forms, Messages, Dialogs, StdCtrls,
{$ENDIF}
  SysUtils, Classes, uib, SyncObjs;

type
  TForm1 = class(TForm)
    DataBase: TUIBDataBase;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

  TMyThread = class(TThread)
  protected
    procedure Execute; override;
    destructor destroy; override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  for i := 0 to 49 do
    TMyThread.Create(False);
end;

var
  x: integer = 0;

{ TMyThread }

destructor TMyThread.destroy;
begin
  inherited;
end;

procedure TMyThread.Execute;
var
  Query: TUIBQuery;
  Transaction: TUIBTransaction;
begin
  FreeOnTerminate := true;
  // Form1.DataBase.Lock; //simulate single thread
  try
    Query := TUIBQuery.Create(nil);
    Transaction := TUIBTransaction.Create(nil);
    try
      Transaction.DataBase := Form1.DataBase;
      Query.Transaction := Transaction;
      Query.FetchBlobs := True;
      Query.SQL.Text := 'select * from project';
      Query.Open;
      while not Query.EOF do
      begin
        Query.Next;
        Sleep(10); // simulate activity
      end;
    finally
      Query.Close(etmCommit);
      Query.Free;
      Transaction.Free;
    end;
  finally
    // Form1.DataBase.UnLock; //simulate single thread
  end;
end;

end.
Die Bilder hole ich mir wie in diesem UIB-Code Sample:
Delphi-Quellcode:
unit main;

interface

uses
{$IFDEF LINUX}
  libc, QForms, QStdCtrls, QControls, QGraphics, QDialogs, QExtCtrls,
{$ELSE}
  Windows, Graphics, Controls, Forms, Messages, Dialogs, StdCtrls, ExtCtrls,
{$ENDIF}
  SysUtils, Classes, uib;

type
  TMainForm = class(TForm)
    Image: TImage;
    LoadImage: TButton;
    SaveImage: TButton;
    DataBase: TUIBDataBase;
    Transaction: TUIBTransaction;
    Query: TUIBQuery;
    OpenDialog: TOpenDialog;
    procedure LoadImageClick(Sender: TObject);
    procedure SaveImageClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

uses Math;

{$R *.dfm}

procedure TMainForm.LoadImageClick(Sender: TObject);
var
  Stream: TMemoryStream;
begin
  Query.SQL.Text := 'Select Stream from TBLOB';
  Query.Params.Clear;
  Query.Open;
  Stream := TMemoryStream.Create;
  try
    Query.ReadBlob('STREAM', Stream);
    Image.Picture.Bitmap.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
  Query.Close(etmCommit);
end;

procedure TMainForm.SaveImageClick(Sender: TObject);
var Stream: TFileStream;
begin
  If OpenDialog.Execute then
  begin
    Stream := TFileStream.Create(OpenDialog.FileName, fmOpenRead);
    try
      Query.SQL.Text := 'UPDATE TBLOB SET STREAM = :blob';
      Query.ParamsSetBlob('blob', Stream);
      Query.ExecSQL;
    finally
      Stream.Free;
    end;
    Query.Close(etmCommit);
  end;
end;

end.
Gruß vom KodeZwerg

Geändert von KodeZwerg (25. Apr 2018 um 17:27 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: Datenbank für schnelle Bilder, Vorschläge bitte.

  Alt 25. Apr 2018, 17:29
Die Suche ist Aufgebaut nach diesem Beispiel-Code von UIB:
Das sucht aber nicht, sondern kaut alle Datensätze inkl. BLOB durch, lokal.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Datenbank für schnelle Bilder, Vorschläge bitte.

  Alt 25. Apr 2018, 17:39
Ja ich bin da noch totaler Neuling und bin ehrlich gesagt froh das es so einfach war umzusetzen jetzt noch Lernprozess abschliessen was was tatsächlich macht und wie es funktioniert und was ich tatsächlich brauche herausfinden.
Hier stand primär nur an: Lege DB an, führe Zufallszugriffe durch um einen Ersteindruck zu gewinnen.
Da sind halt noch viele "Brain-Bugs" aufgrund von nicht-Wissen, aber wird schon werden hehe
In dem Thread wird "Name" abgerufen um "CRC" zu erhalten um diese dann zu berechnen und gegenzuprüfen, hat also bestimmt nichts mit DB an sich zu tun sondern CRC Verfahren.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.880 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Datenbank für schnelle Bilder, Vorschläge bitte.

  Alt 25. Apr 2018, 17:43
SQL-Code:
select
    <Feldliste>
from
    <Tabelle>
where
    <Bedingung>;
z.B.

SQL-Code:
select
    Spitzname, Name, Vorname
from
   Benutzer
where
    Spitzname="KodeZwerg";
Liefert dann die/den Datensatz zu, auf welchen die Bedingung zutrifft. Das DBMS entscheidet hierbei ob/welche Indizes es verwendet.
Zitat:
In dem Thread wird "Name" abgerufen um "CRC" zu erhalten um diese dann zu berechnen und gegenzuprüfen, hat also bestimmt nichts mit DB an sich zu tun sondern CRC Verfahren.
Nach Ermittlung des CRC musst Du dann in der Datenbank nur nach diesem Suchen
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Datenbank für schnelle Bilder, Vorschläge bitte.

  Alt 25. Apr 2018, 17:51
Liefert dann die/den Datensatz zu, auf welchen die Bedingung zutrifft. Das DBMS entscheidet hierbei ob/welche Indizes es verwendet.
Ja da bin ich gerade am Lesen + DBMS verstehen, hab noch das ganze MyBase gedöns im Kopf, Vielen Dank!!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.880 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Datenbank für schnelle Bilder, Vorschläge bitte.

  Alt 25. Apr 2018, 17:31
Dieser Code scheint wenig mit dem eigentlichen Programm gemein zu haben und eigenet sich m.M. nach wenig das spätere Verhalten nachzubilden.
Da immer die komplette Tabelle gelesen wird, braucht das natürlich umso länger je mehr Datensätze da sind. Im Normalfall sollte man ja nur die Daten anfordern, welche benötigt werden.
Die Performance einer Datenbankanwendung steht und fällt mit dem Entwurf der Abhängigkeiten und Anlage von Indices.
Markus Kinzler
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: Datenbank für schnelle Bilder, Vorschläge bitte.

  Alt 25. Apr 2018, 18:40
angepasst:
Die Suche ist Aufgebaut nach diesem Beispiel-Code von UIB:
Delphi-Quellcode:
unit main;

interface

uses
..snipp..
procedure TMyThread.Execute;
var
  Query: TUIBQuery;
  Transaction: TUIBTransaction;
begin
  FreeOnTerminate := true;
  // Form1.DataBase.Lock; //simulate single thread
  try
    Query := TUIBQuery.Create(nil);
    Transaction := TUIBTransaction.Create(nil);
    try
      Transaction.DataBase := Form1.DataBase;
      Query.Transaction := Transaction;
      Query.FetchBlobs := True;
      Query.SQL.Text := 'select imageblobfeldname <, andereFelder> from project where crc = :param_crc';
      Query.Params.ParamByName('param_crc').DataType := ftString;
      Query.Params.ParamByName('param_crc').Value := <valueVonIrgendwoher>;
      Query.Open;
      while not Query.EOF do //diese Prüfung kann bleiben, könnte leere Menge ergeben, dann Fehlerbehandlung (ergänzen), gewünschtes Ergebnis: 1 Datensatz
      begin
        //Query.Next;
        //Sleep(10); // simulate activity
        // code für Picture Befüllung aus BLOB Stream (steht schon in Deinem Beispiel oben, keine neue Query Vararible nötig)
      end;
    finally
      Query.Close(etmCommit);
      Query.Free;
      Transaction.Free;
    end;
  finally
    // Form1.DataBase.UnLock; //simulate single thread
  end;
end;

end.
Du musst in der Query das Ergebnis direkt von 500k Datensätzen auf einen einschränken.
Dann kann dir "egal" sein, wieviel DS in der Tabelle stehen.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Datenbank für schnelle Bilder, Vorschläge bitte.

  Alt 25. Apr 2018, 19:45
Danke für Deine Verbesserung zu dem Beispiel-Code!
Jetzt wo ich sehe wie Du auf DB zugreifst, also wie Du die select instanz aufbaust und über ('param_crc').DataType := ftString; darauf Zugreifst, in dem Moment wo ich's sah hat sich ein Nebel gelichtet um den Zusammenhang zwischen Doku und Code herzustellen. Das plus mkinzler's Post, sehr hilfreich um da besser durchzublicken, Danke!
Jetzt schäm ich mich wie ich dachte das es funktioniert und geh voller Freude weiter daran!
Query := TUIBQuery.Create(nil); ist nun in Dll Init enthalten und Query.Free; in Dll Close, könnte da etwas passieren wenn DB auf ist solange Dll geladen?
Gruß vom KodeZwerg

Geändert von KodeZwerg (25. Apr 2018 um 19:56 Uhr) Grund: Query.Close(etmCommit); war falsch im Dll Close
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Datenbank für schnelle Bilder, Vorschläge bitte.

  Alt 25. Apr 2018, 21:03
Warum suchst Du eigentlich nach CRC? Nur um ein paar Bytes zu sparen?
Natürlich wäre es interessant zu wissen ob die Abfrage über CRC schneller ist als über Name, aber ich vermute, das die Berechnung des CRC viel von dem Vorteil auffrisst.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Datenbank für schnelle Bilder, Vorschläge bitte.

  Alt 26. Apr 2018, 06:16
Warum suchst Du eigentlich nach CRC? Nur um ein paar Bytes zu sparen?
Natürlich wäre es interessant zu wissen ob die Abfrage über CRC schneller ist als über Name, aber ich vermute, das die Berechnung des CRC viel von dem Vorteil auffrisst.
Hier beschrieb ich was ich mit DB vorhabe.
Wahrscheinlich kann ich mit der Frage "Bytes sparen?" noch nichts anfangen weil ich sie gerade noch nicht verstehe.
Um es nochmal mit meinen unwissenden Worten zu sagen:
In DB soll ein Hauptfeld von dem sich alles ableitet "Name" heißen, da ein Unterfeld mit CRC der original Datei und ein zwei Blobs/Bilder.
CRC soll dafür da sein um zu kontrollieren ob ein erneutes Bild-Berechnen nötig ist oder ob das Bild aus DB geladen werden kann. Die original Dateien wovon sich ein Bild ableitet sind nicht Statisch, manchmal wird doch noch etwas darin verändert und darauf muss ich reagieren können, eine Datums oder Dateigrößen abfrage ist da zu ungenau.
Also so sollten die Datensätze visuell betrachtet aussehen: [NAME] (String) -> [CRC] (Word) und [BILD1] (Stream) und [BILD2] (Stream)
So das ich über [NAME] den Rest anspreche und falls [NAME] noch nicht existiert ich eh einen neuen Datensatz anlege.

edit
Ps: [NAME] der bei Dll reinkommt ist ein voll qualifizierter Drive:Path\Filename+FileExt String wo ich nur den ExtractFilename() behalte der letztendlich als [NAME] in DB genommen wird, verstehst Du was ich damit sagen will?
Gruß vom KodeZwerg

Geändert von KodeZwerg (26. Apr 2018 um 06:31 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 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