AGB  ·  Datenschutz  ·  Impressum  







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

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 3  1 23   
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 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
mkinzler
(Moderator)

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

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

  Alt 26. Apr 2018, 06:54
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;
Markus Kinzler
  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 26. Apr 2018, 07:33
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.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

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

  Alt 26. Apr 2018, 07:45
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;
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 26. Apr 2018, 07:53
Ich verstehe was Du meinst, Danke für den Guten Ratschlag!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

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

  Alt 26. Apr 2018, 08:39
Hier beschrieb ich was ich mit DB vorhabe.
Pardon nicht aufmerksam gelesen, ich hatte es so verstanden, daß du den CRC des Dateinamens bildest, nicht des Dateiinhaltes.

Dann muß ich noch mal nachfragen, Du schreibst sinngemäß:
Zunächst suche ich den Namen, wenn der nicht vorhanden ist wird er angelegt.
Dann wird der CRC verglichen, ist der unterschiedlich, wird der neue eingetragen.

Wenn ich das so richtig verstanden habe, mußt Du mit zwei Abfragen arbeiten. Ungefähr so:

(Pseudocode)
Code:
Function getCRC(name,CRC,IMG1,IMG2):boolean;

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

result:=(reccount>0) ;

end;

Function GetName(Name);

select
   name
from
   Projekte
where
   NAME = :name ;

result:=reccount>0;

end;


If not GetName(Name) then InsertName(Name);
If not getCRC(Name,CRC,IMG1,IMG2) then UpdateCRC(Name,CRC)
else Machwasmit_IMG1_und_IMG2;
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (26. Apr 2018 um 09:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
697 Beiträge
 
FreePascal / Lazarus
 
#7

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

  Alt 26. Apr 2018, 09:15
in meinem Verständnis ist das CRC Verfahren eine Checksumme, mit der man ähnlich wie mit einer Quersumme die Konsistenz der Daten prüfen kann, aber keineswegs dazu geeignet, eine Eindeutigkeit sicherzustellen. Nur so als Hinweis, das du da nicht mit dem falschen Verfahren Inhalte überbügelst ...

Wenn du dir eine simple Bitmap Grafik vorstellst und die pixel so veränderst, das dein CRC den gleichen Wert ergibt, werden 2 unterschiedliche Bilder mit der gleichen CRC dargestellt. Würde ich so nicht als Merkmal der Eindeutigkeit festlegen wollen.
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
Firebird 5 Update und Know-how Workshop – 28.8.-29.08.2025 64546 Mörfelden - Walldorf
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

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

  Alt 26. Apr 2018, 09:31
in meinem Verständnis ist das CRC Verfahren eine Checksumme, mit der man ähnlich wie mit einer Quersumme die Konsistenz der Daten prüfen kann, aber keineswegs dazu geeignet, eine Eindeutigkeit sicherzustellen. Nur so als Hinweis, das du da nicht mit dem falschen Verfahren Inhalte überbügelst ...

Wenn du dir eine simple Bitmap Grafik vorstellst und die pixel so veränderst, das dein CRC den gleichen Wert ergibt, werden 2 unterschiedliche Bilder mit der gleichen CRC dargestellt. Würde ich so nicht als Merkmal der Eindeutigkeit festlegen wollen.
Ein Hash wäre u.U besser geeignet.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

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

  Alt 26. Apr 2018, 09:53
Danke für Eure Nachträge, das mit der If then else Abfrage habe ich ähnlich bereits umgesetzt.
Nochmal zur CRC, die CRC wird berechnet von dateiname.ext und nicht aus den Bildern oder aus dateinamen.
Also eine Prüfsumme der binär-Datei, das original Input File.
Beispiel:
Start analysiere "Datei.xyz", die CRC16 Berechnung für Datei "Datei.xyz" ergibt $0AF2 <<<<-- das hat noch nichts mit DB zu tun
(Die CRC an sich muss nicht bulletproof sein aber geeignet um "Datei.xyz" zu verifizieren, da es schnell gehen soll entschied ich mich für CRC16 Methode, wobei CRC32/64 nicht arg länger braucht, also das kann ich mit einem Befehl abändern.)
Jetzt schau ich wie bei Eurem DB Code nach "Datei.xyz" und prüfe ob in DB die gleiche CRC (if crc = $0AF2) drinnen ist wie die CRC16 Berechnung ergeben hat. <<<<-- hier erfolgen die DB aufrufe nach [NAME] + [CRC]
Dann wird entschieden ob Bild1 oder Bild2 bei erfolgreicher CRC Prüfung geladen werden soll bzw das in DB hinterlegte Bild erneuert werden muss.
Das alles bekomme ich Dank Eurem Code Beispielen und die vielen Hinweise mitlerweile sehr gut hin!
Nun habe ich sogar Code von Euch vorliegen mit dem ich gleich auch neue DS anlegen kann bzw Updaten, das rockt!
Vielen Lieben Dank für all Eure Mühen!!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.740 Beiträge
 
Delphi 6 Enterprise
 
#10

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

  Alt 26. Apr 2018, 10:01
Nur zum Verständnis: Datei.XYZ ist keine Bilddatei, sondern irgendeine Daten-Datei, deren Daten ggf. genutzt würden, die Bilder zu erzeugen?
Ralph
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:54 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