Zeos zum bearbeiten einer JET und einer SQLite - Datenbank

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.

Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

Beitragvon af0815 » 25. Apr 2017, 05:42 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

Es werden nur immer soviel aus der DB gelesen wie notwendig ist, deshalb kann es bei RecCount und RecNo zu Ergebnissen kommen die man nicht erwartet. Bei DesktopDBs wo man mit ZTable und nicht mit Queries arbeitet sind die Ergebnisse richtig, bei ServerDBs sollte man sie nicht verwenden. Zu Access ist es schwer zu sagen, die ist weder ´DesktopDB noch ServerDB, und vor allen kist es ja auch stark Treiberabhängig. Hier hilft oft als Test, wenn man auf den letzten Datensatz springt, dann erst die Felder ausliest.

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815
 
Beiträge: 3266
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: Win7/Linux (L stable FPC stable) per fpcup | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon mschnell » 25. Apr 2017, 09:26 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

wp_xyz hat geschrieben:ZQuery1.RecordCount


Wunderbar ! Funktioniert !

Herzlichen Dank,.
-Michael
mschnell
 
Beiträge: 3159
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

Beitragvon mschnell » 25. Apr 2017, 09:32 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

af0815 hat geschrieben:Es werden nur immer soviel aus der DB gelesen wie notwendig ist,

Yep. das ist klar. Wenn man die tatsächliche Anzahl der "passenden" Sätze wissen will, muss man vermutlich "seelct count" machen. Ich zeige den Wert aber momentan nur an und tue programmatisch nichts damit. Also nur ein Schönheits-Problem. (Selbst wenn ich spaßeshalber damit noch einen Fortschritts-Balken einbaue.)

Frage ist nur, was "Notwendig" - oder sinnvoll - bedeutet. Es könnte z.B. von der Größe des freien RAM-Speichers abhängen.

In diesem Beispiel wurden 10000 Sätze anscheinend "am Stück" eingelesen.

(Übrigens: Um möglichst wenig RAM für den result-Set zu verbrauchen habe ich statt "select *" nur die tatsächlich benötigten Felder angegeben, und dabei die Erkenntnis gewonnen, dass man (natürlich) das Index-Feld mit holen muss, auch wenn man es nicht explizit braucht, weil sonst das Update auf den Satz hundert mal so lange dauert :) )

-Michael (Ich schicke Dir heute Abend mal das Programm per Mail)
mschnell
 
Beiträge: 3159
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

Beitragvon Michl » 25. Apr 2017, 13:23 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

Man kann auf unterschiedliche Weise abfragen, wieviel Datensätze in der Datenbanktabelle enthalten sind. Wenn ich mich richtig erinnere, ist dies ein Beispiel vom Vorteil von Zeos gegenüber SQLDB. Bei Zeos werden bei Query.RecordCount die tatsächlich in der Datenbank enthaltenen Datensätze zurückgegeben, bei SQLDB nur die schon geladenen (wobei man deren Menge über Query.PacketRecords steuern kann). Ist wohl auch der Grund, warum bei einem DBGrid der Scrollbalken bei Zeos beim ersten Start schon korrekt ist und bei SQLDB beim Scrollen angepasst wird.
Code: Alles auswählen
type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 
Michl
 
Beiträge: 2192
Registriert: 19. Jun 2012, 11:54
OS, Lazarus, FPC: Win7 Laz 1.7 Trunk FPC 3.1.1 Trunk | 
CPU-Target: 32Bit/64bit
Nach oben

Beitragvon mschnell » 25. Apr 2017, 15:49 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

Ich meine mich zu erinnern, irgendwo gelesen zu haben, dass Zeos immer das gesamte Result-Set läd. Keine Ahnung, was passiert, wenn der sehr groß ist.

-Michael
mschnell
 
Beiträge: 3159
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

Beitragvon af0815 » 27. Apr 2017, 06:58 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

mschnell hat geschrieben:Ich meine mich zu erinnern, irgendwo gelesen zu haben, dass Zeos immer das gesamte Result-Set läd. Keine Ahnung, was passiert, wenn der sehr groß ist.

-Michael

Was ich aus meinen Analysen am Server sehe (M$ Sql), wird immer nur vom Resultset übertragen, was gerade benötigt wird. Kann sein, das es für Desktopdatenbanken anders ist.

Andreas

PS: Danke für die Sourcen, wäre schön, wenn man die offenlegen könnte. Die Art wie du die Kompression bestimmt, ist echt steil. Die Idee alleine ist Wert, publiziert zu werden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815
 
Beiträge: 3266
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: Win7/Linux (L stable FPC stable) per fpcup | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon mschnell » 27. Apr 2017, 14:41 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

af0815 hat geschrieben:wäre schön, wenn man die offenlegen könnte.

Kein Problem, falls sich jemand dafür interessiert.
af0815 hat geschrieben:. Die Art wie du die Kompression bestimmt, ist echt steil. Die Idee alleine ist Wert, publiziert zu werden.

Wenn es denn ordentlich funktionieren würde....

Ist aber nur ein grober Schätzwert.

Idiotischer Weise scheint die "Quality" Property der JPEG Komponente zur Abfrage eines geladenen Bildes nicht zu funktionieren. Da kommt immer 75, wenn man die Quality nicht vorher von Hand gesetzt hat.

Ich habe noch vor, ein paar Kompressionsfaktoren mit mehreren Bildern zu probieren und die Parameter einer lineare Funktion sauber zu bestimmen das sollte dan für diesen Anwendungsfall reichen :) .

-Michael
mschnell
 
Beiträge: 3159
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

Beitragvon theo » 27. Apr 2017, 16:25 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

Sorry, aber ich finde es irgendwie nicht gut, wenn ihr die Hälfte privat besprecht.
Entweder privat oder öffentlich, aber dieser Mix hier ist nicht so toll.
theo
 
Beiträge: 7895
Registriert: 11. Sep 2006, 18:01

Beitragvon mschnell » 27. Apr 2017, 21:08 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

Nix besprochen, nur die Datei per Mail geschickt (weil die vermutlich sonst niemanden interessiert).

-Michael
mschnell
 
Beiträge: 3159
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

Beitragvon af0815 » 28. Apr 2017, 05:48 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

Das angesprochene, was ich so interessant finde:

Bei jpeg, weis man ja vorher nicht wir groß das Bild bei einer Kompressionsstufe wird. Vor allen, wenn man den Speicherplatz optimieren will und das der treibende Faktor ist. Hier in einer Schleife einfach das Bild komprimieren und dabei hinter messen ob die gewünschte Größe schon erreicht ist. Und das ganze ohne fremde Komponenten.

Ich weis das klingt simpel, aber oft sind so simple Sachen so genial, das man meistens viel zu kompliziert denkt und solche einfachen Lösungen ganz einfach übersieht.

Aber vielleicht hat Theo ein einfachere Lösung für die Optimierung von jpeg auf Speicherplatz für Thumbnails.

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815
 
Beiträge: 3266
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: Win7/Linux (L stable FPC stable) per fpcup | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon mschnell » 28. Apr 2017, 09:33 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

Die implementierte Methodik funktioniert so:

- Die maximale Speicherplatz für die Bild-Information (BLOB in der Datenbank) ist vorgegeben
- Es werden mit einem entsprechenden "selecrt" nur die Datensätze gefunden, die eine größer Bild-Information besitzen.
- Der Byte-Stream mit der JPEG Informtion wird aus dem, Result-Set entnommen und in einem Canvas decodiert
- Der vermutlich sinnvolle JPEG-Kompressionsgrad wird nach einer linearen Funktion aus der Pixel-Anzahl geschätzt
- Aus dem Canvas wird mit dem geschätzten Kompressionsgrad ein neuer Stream, mit einer JPEG Informtion erzeugt
- Ist der Stream zu groß, wird der Kompressionsgrad solange halbiert (vermutlich wäre Faktor 2/3 besser) bis er passt.
- Das Ergebnis wird in den Datemnsatz zurückgeschrieben.

Die Parameter der besagten linearen Funktion sind momentan grob geschätzt. ich werde da noch ein Statistik (Ausgleichsrechnung) machen um sie sinnvoller zu bestimmen.

-Michaekl
mschnell
 
Beiträge: 3159
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

Beitragvon theo » 28. Apr 2017, 10:00 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

af0815 hat geschrieben:Aber vielleicht hat Theo ein einfachere Lösung für die Optimierung von jpeg auf Speicherplatz für Thumbnails.


Nicht direkt. Das liegt aber auch daran, dass ihr privat besprochen habt, was hier alles warum vorgegeben ist.

Wenn ich frei wäre, würde ich es überhaupt nicht so machen. Ich würde noch nicht mal die Binärdaten (Bilder) überhaupt in eine Datenbank legen.
Was haben Binärdaten in einer DB zu suchen? Kann ich danach filtern, sortieren, suchen? Nein.
Bei mir liegen die immer im Filesystem und nur die Filenamen kommen in die DB. Damit erübrigt sich auch die fixe BLOB Größe.
Aber gut, das ist wohl eine "philosophische" Frage. Das kommt vllt. daher, dass ich so etwas meistens für's Web programmiere und es dort besonders wenig sinnvoll ist.

Bezüglich JPEG kann ich nur auf den Patch hinweisen, den ich damals für meinen Thumbviewer in den FPC Code einfließen ließ.
Damit kann man die Berechnung wenigstens beschleunigen, damit es nicht ganz so rechenintensiv wird:
http://svn.freepascal.org/cgi-bin/viewv ... 3&r2=15855
theo
 
Beiträge: 7895
Registriert: 11. Sep 2006, 18:01

Beitragvon mschnell » 28. Apr 2017, 11:45 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

Wie bereits erwähnt, habe ich das Format der Datenbank nicht in der Hand. Die wird von einem existierenden Programm bearbeitet. Nur die Inhalte können veerändert werden.

Ist der Patch nicht in die Standard-Version von der library eingeflossen ?

-Michael
mschnell
 
Beiträge: 3159
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

Beitragvon theo » 28. Apr 2017, 11:49 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

mschnell hat geschrieben:Ist der Patch nicht in die Standard-Version von der library eingeflossen ?

Doch,das ist ja auch das Diff der "Standard-Version".
theo
 
Beiträge: 7895
Registriert: 11. Sep 2006, 18:01

Beitragvon mschnell » 2. Mai 2017, 11:19 Re: Zeos zum bearbeiten einer JET und einer SQLite - Datenba

mschnell hat geschrieben:Ist aber nur ein grober Schätzwert.

Ich habe noch vor, ein paar Kompressionsfaktoren mit mehreren Bildern zu probieren und die Parameter einer lineare Funktion sauber zu bestimmen das sollte dan für diesen Anwendungsfall reichen :)


Update: Zum Schätzen benutze ich jetzt die Formel

KompressionsGrad = ((IstGroesse - 850) * 160 ) / Pixel_Anzahl (in Prozent, funktioniert gut für Kompressionsgrad um die 10 %)

-Michael
mschnell
 
Beiträge: 3159
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

• Themenende •
Vorherige

Zurück zu Datenbanken



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron
porpoises-institution
accuracy-worried