Delphi-PRAXiS
Seite 7 von 12   « Erste     567 89     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbank für schnelle Bilder, Vorschläge bitte. (https://www.delphipraxis.net/196084-datenbank-fuer-schnelle-bilder-vorschlaege-bitte.html)

KodeZwerg 25. Apr 2018 17:39

AW: Datenbank für schnelle Bilder, Vorschläge bitte.
 
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.

mkinzler 25. Apr 2018 17:43

AW: Datenbank für schnelle Bilder, Vorschläge bitte.
 
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

KodeZwerg 25. Apr 2018 17:51

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

Zitat von mkinzler (Beitrag 1400502)
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!!

jobo 25. Apr 2018 18:40

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

Zitat von KodeZwerg (Beitrag 1400497)
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.

KodeZwerg 25. Apr 2018 19:45

AW: Datenbank für schnelle Bilder, Vorschläge bitte.
 
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!
Delphi-Quellcode:
Query := TUIBQuery.Create(nil);
ist nun in Dll Init enthalten und
Delphi-Quellcode:
Query.Free;
in Dll Close, könnte da etwas passieren wenn DB auf ist solange Dll geladen?

p80286 25. Apr 2018 21:03

AW: Datenbank für schnelle Bilder, Vorschläge bitte.
 
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

KodeZwerg 26. Apr 2018 06:16

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

Zitat von p80286 (Beitrag 1400508)
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
Delphi-Quellcode:
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?

mkinzler 26. Apr 2018 06:54

AW: Datenbank für schnelle Bilder, Vorschläge bitte.
 
Dann würde ich eine Tabellenstruktur in der Art vorschlagen

Code:
ID   BigInt PK
NAME VarChar(64)
CRC  Char(xx)
IMG1  Blob Subtype 0
IMG2  Blob Subtype 0
Mit weiteren Index über NAME und CRC

Abfragen kann man dann mit

SQL-Code:
select
  IMG1, IMG2
from
  Projekte
where
  NAME = :name and CRC = :CRC;

KodeZwerg 26. Apr 2018 07:33

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

Zitat von mkinzler (Beitrag 1400515)
Dann würde ich eine Tabellenstruktur in der Art vorschlagen

Delphi-Quellcode:
 Query.SQL.Text := 'select BILD1, BILD2 from project where NAME = :name and CRC = :CRC;';
 Query.Params.ParamByName('NAME').DataType := ftString;
 Query.Params.ParamByName('NAME').Value := MeineNameVariable;
 Query.Params.ParamByName('CRC').DataType := ftWord;
 Query.Params.ParamByName('CRC').Value := MeineCRCWordVariable;
 Query.Open;
 // hier bild1 oder bild2 laden usw.
So in etwa hatte ich mir das gedacht könnte es funktionieren.

mkinzler 26. Apr 2018 07:45

AW: Datenbank für schnelle Bilder, Vorschläge bitte.
 
Wobei ich hier die Deklaration des prepared statements von der Ausführung trennen würde.

Einmalig die Deklaration

Delphi-Quellcode:
 Query.SQL.Text := 'select BILD1, BILD2 from project where NAME = :name and CRC = :CRC;';
 Query.Params.ParamByName('NAME').DataType := ftString;
 Query.Params.ParamByName('CRC').DataType := ftWord;
 Query.Prepare; //Ist aber nicht unbedingt notwendig, wird bei der ersten Abfrage implizit durchgeführt
Bei der späteren Verwendung (mehrmalig) immer nur noch die Parameter entsprechend setzen:

Delphi-Quellcode:
 Query.Params.ParamByName('NAME').Value := MeineNameVariable;
 Query.Params.ParamByName('CRC').Value := MeineCRCWordVariable;
 Query.Open;


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 Uhr.
Seite 7 von 12   « Erste     567 89     Letzte »    

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