Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

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)

Medium 15. Okt 2011 02:18

AW: Was ist schneller? MySqlDirect oder ueber die .dll?
 
Genau so eine Änderung hat mir letztens (allerdings mit MySQL) auch etliche Minuten eingespart. Zur Sicherheit würde ich nur alle paar zig bis hundert Value-Vektoren ein neues Insert anfangen, da manche DBMS nicht so gut auf volle 2GB Strings zu sprechen sind :)

DelTurbo 15. Okt 2011 09:17

AW: Was ist schneller? MySqlDirect oder ueber die .dll?
 
@Valle, danke für die auskunft. Ich habe gestern abend noch bissl "rumgespielt". Was ich garnicht wusste, man kann das autoinc feld ja auch beschreiben.

Ich habe gestern abend mal eine Tabelle gedropt und einfach einen eintrag mit ID 500 gemacht. Wenn ich danach wieder "normal" in die Tabelle schreibe, ist der nächste index 501. Das würde heissen das ich die db von sqlite3 1:1 rüberziehen kann.

@Medium, ich weiss noch garnicht wie lang der String sein darf. Bei sqlite3 ist z.b. eine grenze bei 1.000 values.

SELECT FileName FROM TABLE WHERE ID=1 OR ID=2 OR ID=3.....

Na meckert sqlite3 ab 1.000 rum das es zu gross ist. Er meckert definitiv die 1.000 IDs an. Nicht die Stringlänge.

Gruss und nochmals vielen dank

Sir Rufo 15. Okt 2011 09:54

AW: Was ist schneller? MySqlDirect oder ueber die .dll?
 
Die schnellste Möglichkeit Daten in den MySQL zubekommen ist mit MySQL LOAD DATA INFILE

Allerdings frage ich mich auch noch, was das mit dem BLOB-Feld da auf sich hat?
Das kann ja nur dann zum Tragen kommen, wenn die SQLite-Datei im Netzwerk liegt ... ist das so?

Soll denn jetzt der MySQL die SQLite ersetzen?

Denn dann macht es keinen Sinn dieses BLOB weiter zu nutzen, denn die Zusammenstellung der Daten erfolgt bei MySQL ja auf dem Server und es wird nur noch das Ergebnis durch das Netz geschickt.
Andersherum ist es auch kein Problem, dass der MySQL per VIEW dir dieses BLOB-Feld (nicht als BLOB) dann direkt baut und mitschickt.

Liegt die SQLite lokal vor, dann macht das BLOB-Feld auch keinen Sinn ...

Zitat:

Zitat von DelTurbo (Beitrag 1130607)
@Medium, ich weiss noch garnicht wie lang der String sein darf. Bei sqlite3 ist z.b. eine grenze bei 1.000 values.

Code:
SELECT FileName FROM TABLE WHERE ID=1 OR ID=2 OR ID=3.....
Na meckert sqlite3 ab 1.000 rum das es zu gross ist. Er meckert definitiv die 1.000 IDs an. Nicht die Stringlänge.

Dafür gibt es 2 Wege
Code:
SELECT FileName FROM TABLE WHERE ID IN (1,2,3,...)
oder man legt sich eine temporäre Tabelle mit den IDs an und
Code:
SELECT FileName FROM TABLE WHERE ID IN ( SELECT tmpID FROM tmpTABLE )
oder
Code:
SELECT FileName FROM TABLE JOIN tmpTABLE ON ID=tmpID
Ach ja und nicht vergessen einen INDEX (hier wohl geht wohl auch ein UNIQUE) auf die tmpTABLE zu legen ;)

DelTurbo 15. Okt 2011 10:09

AW: Was ist schneller? MySqlDirect oder ueber die .dll?
 
Danke für die Tipps.

Du hast es bestimmt überlesen (steht irgendwo vorne). Die sqlite3 liegt im Netzwerk. Das macht an einem Client mit Kabel nix aus. Aber über WLAN wird es schnell langweilig....

Ob MySql nun die sqlite3 ersetzt weiss ich noch nicht. Dafür werde ich dann mal Speedtests machen, um zu sehen was besser ist. Weil beides hat seine vor und nachteile...

Zitat:

Zitat von DelTurbo (Beitrag 1130492)
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 :)


Sir Rufo 15. Okt 2011 10:31

AW: Was ist schneller? MySqlDirect oder ueber die .dll?
 
Dann solltest du aber auch für die Tests mit dem MySQL dieses BLOB Feld nicht benutzen sondern den RDBMS Weg gehen ;)

Lege doch einfach in der Tabelle mit den FileNamen den Verweis auf den Pfad mit rein,Mann kannst du beide Wege ausprobieren.

DelTurbo 15. Okt 2011 10:34

AW: Was ist schneller? MySqlDirect oder ueber die .dll?
 
Zitat:

Zitat von Sir Rufo (Beitrag 1130614)
Lege doch einfach in der Tabelle mit den FileNamen den Verweis auf den Pfad mit rein,Mann kannst du beide Wege ausprobieren.

Ist schon drinn :)

Sir Rufo 15. Okt 2011 10:48

AW: Was ist schneller? MySqlDirect oder ueber die .dll?
 
Zitat:

Zitat von DelTurbo (Beitrag 1130615)
Zitat:

Zitat von Sir Rufo (Beitrag 1130614)
Lege doch einfach in der Tabelle mit den FileNamen den Verweis auf den Pfad mit rein,Mann kannst du beide Wege ausprobieren.

Ist schon drinn :)

;) ich sehe wir verstehen uns ;)

DelTurbo 15. Okt 2011 17:41

AW: Was ist schneller? MySqlDirect oder ueber die .dll?
 
Kleine rückmeldung:
738.007 Datensätze bestehen aus

6x : int
1x : vchar (Da steht der Filename drinne)

in ~40 Sekunden. Gemacht mir MySqlDirect. Und es ich noch keine wietergehende optimierung drinn. Nur das wie oben besprochen wurde, also VALUES (1,"filename",2,3,4,5,6),(1,"filename",2,3,4,5,6) , usw.. Da packe ich immer 2.500 stück rein.

Nochmal danke.....

DelTurbo 17. Okt 2011 15:37

AW: Was ist schneller? MySqlDirect oder ueber die .dll?
 
Wie versprochen die "Speed Rückmeldung"

Also, es ist wesentlich schneller wenn ich auf einen Path klicke und dann das FPtrs feld lese und mir die Fileinfos hohle, statt ihm zu sagen "Gib mir alle files die auf den Path zeigen". Das habe ich aber schon vermutet. Es ist halt ein unterschied ob er bei jedem "klick" ~730.000 datensätze absuchen muss, oder nicht.

Ich habe es unter gleichen vorrausetzungen gestestet. Der Debianserver war bei beiden versuchen neu gebootet.

Sir Rufo 17. Okt 2011 16:36

AW: Was ist schneller? MySqlDirect oder ueber die .dll?
 
Aber du hast schon einen Index auf der Spalte Path?
Und die Spalte Path ist auch ein Int-Feld?

Code:
TABLE PATH
PATHID INT PRIMARY
PATHNAME VARCHAR
Code:
TABLE FILES
FILEID INT PRIMARY
PATHID INT INDEX <<--
FILENAME VARCHAR


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:56 Uhr.
Seite 4 von 5   « Erste     234 5      

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