Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Was ist schneller? MySqlDirect oder ueber die .dll? (https://www.delphipraxis.net/163762-ist-schneller-mysqldirect-oder-ueber-die-dll.html)

DelTurbo 14. Okt 2011 14:45

AW: Was ist schneller? MySqlDirect oder ueber die .dll?
 
Neee, der Server steht nicht im Internet. Ausser du nennst meine abstellkammer Internet :-D

Mit dem mysqldump ist mir auch klar. So hohle ich nachts immer backups. Aber das hat ja mit meinem MySqlDirect problem nix zu tun. Ich habe eben mal unter Windows einen MySql-Server drauf gemacht. Und auf dem gleichen system die 800.000 einträge reingeschrieben. Das war noch langsamer.

Kurz noch zu dem blob-feld. Daran sollten wir uns nun nicht aufhängen. Das ist bei sqlite3 schneller. Ich klicke z.b. auf einen Path. Da ich in dem moment die ID habe, brauch ich nur die "FilePointer" zu lesen und kann sie direkt anzeigen. Das ist bei WLAN schneller, als wenn ich nur einen Pointer zurück auf den path habe. Weil dann muss sqlite3 die ganze DB lesen. Die datenbank ist 300MB gross. Bis die durch das WLAN ist, ist der Akku leer :)

So, ich frage nun nochmal ganz gezielt.

1. Wäre es schneller wenn ich die libmysql??.dll nutze (z.b. über ZEOS)?
2. Wäre es dann möglich zig datensätze zu übertragen und die ids zu kommen? Mit IDs meine z.b. bei MySqlDirect den befehl LastInsertID bzw. sqlit3 GetLastInsertRowID.
oder
3. Gibt es einen "trick" bei MySqlDirect um sowas zu erreichen?

Gruss und danke im voraus

DeddyH 14. Okt 2011 14:52

AW: Was ist schneller? MySqlDirect oder ueber die .dll?
 
Ich mag mich irren, aber AFAIK besteht MySQL Direct doch lediglich aus den Delphi-Übersetzungen der Header-Dateien der libmysql.dll, diese wird also bereits benutzt. Inwieweit damit jetzt Prepared-Statements möglich sind, entzieht sich aber meiner Kenntnis.

DelTurbo 14. Okt 2011 15:01

AW: Was ist schneller? MySqlDirect oder ueber die .dll?
 
Nei, das kann nicht sein. Ich habe keine libmysql.dll auf meinem system.

DelTurbo 14. Okt 2011 15:42

AW: Was ist schneller? MySqlDirect oder ueber die .dll?
 
Ich habe mal ZEOS mit der libmysql.dll probiert. Ist leider auch gääähn.... So habe ich es gemacht.

Delphi-Quellcode:
ZConnection1.ExecuteDirect('INSERT INTO FileTable (FileName,FileSize,FileDate,EntryDate,PathTablePtr) VALUES ("ddd",'+IntToStr(i)+',2,3,4);');


Bei ~290.000 habe ich abgebrochen. Ich denke mal ich mache das falsch. Kennt jemand eine "einfache" Demo?

p80286 14. Okt 2011 16:08

AW: Was ist schneller? MySqlDirect oder ueber die .dll?
 
Ich kenne Mysql nicht, aber so 300.000 Datensätze in 30 Minuten (?) finde ich garnicht so schlecht.
Je nach Verfassung des Netzes darf es auch weniger sein. Deinem Beispiel entnehme ich, daß Du keine Parameter nutzt, das wäre u.U auch noch ein Gewinn, da der SQL-String dann nicht jedesmal neu zusammen gesetzt werden muß.
Läßt Du einen Zähler mitlaufen (
Delphi-Quellcode:
label1.caption:=inttostr(i); label1.repaint;
dann solltest Du das vllt einmal einstellen, denn das frißt auch Zeit.

Wie sieht es eigentlich mit dem commit aus? So alle 10-100 Datensätze sollte das auch erfolgen, kommt aber stark auf das verwendete DBMS an.

Gruß
K-H

DelTurbo 14. Okt 2011 16:18

AW: Was ist schneller? MySqlDirect oder ueber die .dll?
 
Das findest du schnell? Da ist ja sqlite3 schneller. Aber wesentlich. Laut iptraf kommt der nur auf 2MBit. Find ich bissl dünn für ein 1000er netzwerk.

Diese Commit wie ich es bei sqlite3 mache braucht man wohl nicht. Die Datensätze waren da. Das war eine "normale" for schleife, ohne alles. Also an der Perfomance hier im Client kann es nicht liegen. Zumal die CPU noch fast im idle lief.

Ich nehme stark an, das es an den vielen kleinen TCP packeten liegt.

Deswegen frage ich ja, ob es ein kommando gibt, nach dem motto "hier kommen x datensätze". Die könnte er dann in einem rutsch liefern.

DeddyH 14. Okt 2011 16:28

AW: Was ist schneller? MySqlDirect oder ueber die .dll?
 
Gibt es bei ZEOS AutoCommit? Falls ja, kannst Du das ja mal testhalber abschalten, explizit eine Transaktion starten und alle z.B. 100 DS ein Commit schicken.

DelTurbo 14. Okt 2011 16:40

AW: Was ist schneller? MySqlDirect oder ueber die .dll?
 
Hellseher? :-D

AutoCommit war an. Ich habe es nun mal abgeschaltet und mache alle 10.000 (zum testen) ein Commit. Der Speed ist wirklich auf 3MBit hoch. Ist nicht berauchend, aber so langsam wird es was :thumb:

Was mich nur wundert ist, das der Stream ständig da ist. Müsste das nicht so sein, das er nach 10.000 einen dicken batzen schickt?

p80286 14. Okt 2011 16:49

AW: Was ist schneller? MySqlDirect oder ueber die .dll?
 
Das commit ist dafür da, daß die Datenbank die Datensätze wirklich speichert und kein rollback mehr möglich ist.
Wenn Du für jeden DS einen Commit schickst, dann ist die Belastung des Servers rel niedrig, da er sich nicht merken muß was rückgängig zu machen ist.
Je mehr Datensätze Du einem Commit zuordnest, desto höher st die Belastung des Servers, aber die Netzlast geht etwas zurück.

Gruß
K-H

DelTurbo 14. Okt 2011 16:53

AW: Was ist schneller? MySqlDirect oder ueber die .dll?
 
Ah, ok. Dann habe ich das Falsch verstanden. Ich dachte er "sammelt" und das Commit schickt los.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:29 Uhr.
Seite 2 von 5     12 34     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz