Veröffentlicht 22. Juni 200619 j Hallo Leute! Vielleicht kann mir jemand bei folgendem Problem helfen: Es handelt sich um eine Client/Server-Architektur, bei der die Datenbank (MySQL 4.0) von der Anwendung (in C# implementiert) getrennt auf verschiedenen Rechnern läuft. Der Datenbankserver soll zentral stehen und mehrere Clients sollen von außen über das Internet zugreifen. Durch die große Menge an SQL-Traffic, die übertragen werden muß, entstehen längere Verzögerungen. :schlaf: Meine Idee war den Traffic irgendwie zu komprimieren bevor er übertragen wird!? Kann mir dazu jemand einen Hinweis geben ob das überhaupt möglich ist und wenn ja wie Danke im voraus!
28. Juni 200619 j Wird wohl kaum moeglich sein... muesste naemlich als Plugin gehen... weiss nicht ob das geht. Aber oft hilft es wenn man die Applikation dahingehend anpasst dass man die Anzahl der Querys minimiert. Frueher hab ich einen Query gemacht und pro Datensatz darin in einer Loop neue Querys mit diesen Daten gemacht hab... sowas dauert natuerlich ewig lang. Wenn man es schafft alle Informationen in nur einer Query zu holen (Per Joins, Unterabfragen, zwischentabellen.. whatever halt) dann ist die Datenrate minimal.... Waere das denn ein Vorschlag ?
28. Juni 200619 j Komprimieren geht nicht. man muss die Businesslogik anpassen in c# und in den sql statements. SQL falsch entwickelt ist nicht performant. ich stand am anfang meiner Ausbildung vor dem gleichen problem und habe mit meiner Lösung, täglich eine ersparnis von 15 minuten je client erreicht. Bei mir war die internetleitung, ISDN, die software PowerBuilder und es waren ca. 15 clients
28. Juni 200619 j Optimieren ist natürlich das beste, beim Java JDBC Treiber gibt es aber die Möglichkeit die Option useCompression auf true zu setzen, dann wird der Trafik zlib komprimiert. Musst du mal schauen ob es das für die .NET Schnittstelle auch gibt. Gruß Jaraz
28. Juni 200619 j Danke für die bisherigen Antworten! @Joe Kinley: Klar bringt das optimieren der Anfragen sicher einiges, aber wie du schon erwähnt hast dauert das ziemlich lange. Vor allem da ich nicht in allen Bereichen der Anwendung Ahnung habe, weil diese von verschiedenen Entwicklern implementiert wird. Und wenn ich die Anfragen minimiere (durch Unterabfragen,usw.), dabei aber die gleichen Datensätze anfordere, ändert sich bestimmt auch nicht der Traffic an sich, oder? @baba007: Das habe ich befürchtet. War auch nur eine erste Idee mit dem Komprimieren und wäre sicher eine schnelle Lösung gewesen. @Jaraz: useCompression klingt interessant! Ich werde da mal nachforschen ob da was einzustellen geht! Sollte sonst noch jemand eine Idee haben, immer raus damit! Gruß Lausi!
29. Juni 200619 j Nunja... ich meine es halt so, dass man unnoetige Connects auf die Datenbank vermeiden sollte. Wenn du zum Beispiel einen Datensatz holst mit 100 Zeilen, und in einem Loop fuer jede Zeile noch eine neue Abfrage machst, sind das 101 Connects (und die dauern). Wenn du allerdings ein grosses Statement baust, mit Joins und Subselects und den ganzen Klumbatsch auch in einem durchgang holen kannst hast du auch nur 1 Connect. Das sind die Zeitfresser die man desoefteren mal in Applikationen sieht.
29. Juni 200619 j ...mit Joins und Subselects... Er benutzt MySql 4.0, da gibbet keine Subselects. @Lausi Versuch erst mal rauszufinden, an welchen Stellen genau die Anwendung lahmt. Vielleicht können wir dir dann mit nem konkreten Beispiel beim "frisieren" helfen.
13. Juli 200619 j Hi Leute! Also, da mein ganzes "rumgewurschtel" an der Anwendung noch nicht den richtigen Erfolg gebracht hat, schlag ich Versuchsweise mal eine andere Richtung ein. Terminaldienste! Damit muß ich den SQL-Traffic nicht über das WAN übertragen, sondern lediglich die Bildinformationen sowie Tastatur- und Maussteuerung. Mal schauen wie performant diese Sache ist
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.