MySQL über instabiles Netz



  • Hallo

    Ein paar Infos vorweg:
    Ich nutze MySQL unter C++ mit der libmysql.dll und den entsprechenden include-Files die beim Server dabei sind. Das Programm läuft im lokalen Netz wunderbar. Nun soll allerdings die Verbindung zum Server über das Handy-Netz und VPN hergestellt werden. Dabei habe ich festgestellt, das die Datenbank-Abfragen, auf Grund des instabilen Netzes, oft dazu führen, das mein Programm stehen bleibt, oder eine Zugriffsverletzung in der libmysql.dll passiert.

    Da die Verbindung zur Datenbank das einzige ist, was nicht lokal passiert und das Programm ansonsten perfekt funktioniert, liegt für mich der Fehler in der Anbindung an die Datenbank.
    Meine Vermutung ist, das die dll nicht mit Paketverlust klar kommt. Weiterhin glaube ich, das das Programm stehen bleibt, weil ein mysql_fetch_row aufgerufen wurde, dies aber nie endet, weil keine Daten ankommen, bzw. diese alle verloren gehen.

    Problematisch sind nicht unbedingt die Zugriffsverletzungen, solange das Prog danach weiter funktioniert. Problematischer ist das hängen bleiben, da ich an dieser Stelle nicht einmal den Vorgang noch einmal versuchen könnte.

    Hat irgendjemand Tipps, Tricks, andere DLLs, was auch immer, um mir weiter zu helfen?

    mfg
    xXx



  • Was verwendest du um die Daten zu holen.
    mysql_use_result()
    oder
    mysql_store_result()
    wenn du store result benutzt dann werden immer alle daten an den client übertragen was bei manchen SQL lange dauern kann wenn es viele Daten sind.
    mysql_use_result() läst die daten am server.

    use hat den Nachteil das man den Server blockieren kann wenn man mit den Daten gleich arbeitet ohne sie erst zu laden.
    Denke aber das du ein Problem mit deinem Programm hast den ich habe mit store bereits über eine Handyverbindung gearbeitet.
    Es gibt keine andere Bib neben der C-Lib von MySQL um mit C/C++ abzufragen.



  • Ich nutze mysql_store_result.
    Wie gut/schlecht war denn die Handyverbindung bei dir? Meine war wirklich relativ schlecht. Surfen war gerade eben möglich. Es gab bei min. jeder 3. Abfrage entweder ne Zugriffsverletzung in der dll oder das Programm stand und ich habs dann einfach mal über eine Minute stehen gelassen, ohne das sich etwas getan hat.
    Ich hatte auch das Gefühl, das das Problem vor allem bei insert oder update auftrat, select aber relativ gut funktionierte...

    Kann mir das ganze selber nur recht schlecht erklären. Und da das Programm im lokalen Netz und auch über WLan ohne Probleme (keine Abstürze, auch wenn es 12h läuft) funktioniert, lag für mich die Vermutung nahe, das die mysql-dll mit massivem Paketverlust nicht gut zurecht kommt.

    Naja, kann man vielleicht nichts machen, muss ich mal schaun, ob mir sonst noch was einfällt...

    mfg
    xXx



  • Das es eine Zugriffsverletzung gitb kann auch daran liegen das du ein Result freigibst obwohl keine da war.
    Handy ist ja mal so mal so.
    Es kommt eben dann ein Timeout und ein MySQL-Error aus der Bibliothek.
    Ein Insert/Update,Delete sollte aber keine Probleme machen den da wandert nicht viel Übers Netz. Wie gesagt solltest du mal dein Programm ansehen.
    Eine Zugriffsverletzung hatte ich in den letzten 8 Jahren der libmysql.dll/libmysql.so nicht entdeckt.


Anmelden zum Antworten