Folgendes Problem:
Wir benutzen das QT3.3.3 Framework um auf einen MS SQL Server zuzugreifen. Auf den Server greifen wir über das Internet zu und sind an sich begeistert von der relativ einfachen High-LvL-API von QT und da wir auch unsere UI mit QT realisieren, fiel die Wahl für uns relativ einfach.
Jedoch stehen wir vor dem Problem, dass die Anfrageauswertung über QT-Cursor oder auch QT-Queries relativ unperformant ist. Für eine simple SQL Anfrage, welche 1800 Records zurückliefert, benötigt er etwas mehr als eine Minute, was absolut unbefriedigend ist.
Bei der gleichen Anfrage auf eine lokale Kopie der DB benötigt das Programm lediglich wenige Millisekunden. Dementsprechend kann man davon ausgehen, dass die Differenz der Auswertungszeit durch den Overhead der Datenpakete über das Internet zustande kommt.
Wir verstehen die Arbeitsweise von QT-Cursor und QT-Queries wie folgt:
1. Man initialisiert die Query mit dem Querystatement
2. Man iteriert über die Query bzw. Cursor Elemente mit Query.next() und geht somit Zeile für Zeile durch das Ergebnis um es weiterzuverarbeiten
3. wiederhole Schritt 2 bis alle Elemente der Query abgearbeitet sind
Nun stellt sich die Frage, ob er für jedes Query.next() jeweils wieder eine Anfrage an die Datenbank stellt und ob man das verhindern kann, da dies relativ viel Zeit in Anspruch nimmt und für unsere Zwecke nicht geeignet ist.
Gibt es also eine Möglichkeit, das komplette Anfrageergebnis lokal auf dem Rechner zu speichern und dann auf diesem lokalen Cursor bzw. Query zu iterieren um die Daten auszulesen, oder gibt es direkt Optionen beim SQL-Treiber (ODBC), mit dessen Hilfe er mehr als ein Ergebnis auf einmal überträgt (cached) um halt den Datenoverhead zu minimieren ?
Wenn jemand von Euch ähnliche Performanceprobleme mit dem QT SQL Framework erlebt hat und vielleicht eine Lösung gefunden hat, würden wir uns über eine Antwort freuen.
Schlechte QT3 SQL Datenbankperformance
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
Hallo,
also mit MySQL und SQLite3 hatte ich diese Probleme nie, aber mit MS SQL öfters.
Benutzt ihr denn momentan das ODBC Plugin? Wieso nehme ihr nicht das Plugin für MS SQL? Damit würde das bestimmt schon ein bisschen besser klappen. Aber im großen und ganzen war ich mit der MS SQL Datenbank immer schon unzufrieden.
also mit MySQL und SQLite3 hatte ich diese Probleme nie, aber mit MS SQL öfters.
Benutzt ihr denn momentan das ODBC Plugin? Wieso nehme ihr nicht das Plugin für MS SQL? Damit würde das bestimmt schon ein bisschen besser klappen. Aber im großen und ganzen war ich mit der MS SQL Datenbank immer schon unzufrieden.
Hey,
danke erstma für die Antwort.
Wir nutzen hier Qt Educational. Ergo gibt es nur ODBC und SQLite als Treiber zur Auswahl - allerdings haben wir bei der Installation auch unter den ausgegrauten keinen für MS SQL gesehen (der dann ja bei der Commercial Edition dabei sein müsste?!).
Oder gibt es den noch an anderer Stelle?
Kannst du vielleicht andere Bibliotheken für den Zugriff auf MS SQL Datenbanken für C++ empfehlen? Die Ergebnisse unserer Google-Bemühungen waren da eher mau...
danke erstma für die Antwort.
Wir nutzen hier Qt Educational. Ergo gibt es nur ODBC und SQLite als Treiber zur Auswahl - allerdings haben wir bei der Installation auch unter den ausgegrauten keinen für MS SQL gesehen (der dann ja bei der Commercial Edition dabei sein müsste?!).
Oder gibt es den noch an anderer Stelle?
Kannst du vielleicht andere Bibliotheken für den Zugriff auf MS SQL Datenbanken für C++ empfehlen? Die Ergebnisse unserer Google-Bemühungen waren da eher mau...
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten: