ich nutze Postgres zur Speicherung von vielen Datensätzen. Dabei nutze ich einen Internetserver als Zwischenstation. Wenn von diesem Internetserver die Datensätze ziehe, dann zieht mein Programm gerade mal 1 Datensatz(Zeile) pro Sekunde. Und ich habe es mit über 30.000 Datensätzen pro Woche zu tun und in Zukunft noch viel mehr.
Das ist doch schade, da kann doch was nicht stimmen. Das muss doch ruckzuck gehen bei einer 2000kbit Leitung. Muss ich was einstellen beim Server um mehr Bandbreite speziell in Postgres freizugeben???
Ich bezweifle, das dieses Problem an der Bandbreite liegt … ausser, diese wird irgendwo bis in den Bytebereich eingeschränkt.
Wie genau rufst du diese Daten ab?
Wieviele Daten befinden sich in der Tabelle?
Tritt diese Verzögerung auch auf, wenn du lokal auf dem Datenbankserver arbeitest?
Die Datenmenge variiert. Aber man hat es momentan pro Woche mit 30.000 Zeilen zu tun. Ich kann beobachten wie schnell das ist, weil die Daten gelesen und dann einzeln gelöscht werden. So sehe ich bei Count immer die Zahl runter gehen. Und das entsprich so ungefähr 1 Datensatz pro Sekunde und das ist ja wirklich arm.
Im Grund lade ich ja runter und das ist ja ein Root Server mit jede Menge Upload. Das müsste flott gehen. Muss man vielleicht in postgresql.conf spezielle Performance Einstellungen vornehmen?
Ich greife mit dem psql-ODBC Treiber auf die Datenbank zu. Eine DSN liegt bereit und wird genutzt.
Es wird immer ein Datensatz geholt, in dem die Info steht, in welcher Tabelle die eigentliche Info vorliegt, dann holt er sich diese, bei Erfolg löscht er dann den Datensatz in dem die Info ist woher er diese holen soll, usw. usw.
So läuft das dann die ganze Zeit ab, bis die Tabelle leer, die ja diese Infos enthält.
Im Grunde für einen Datensatz insgesamt 3 Queries. Simple Select und am Ende Delete Anweisungen.
das ist eine Verbindung die aufgebaut wird, um z.B. auf einmal alle Datensätze zu holen. Diese 3 Queries von dir stimmen. So läuft das im Grunde ab. Der psql-ODBC Treiber ist doch bei PostgreSQL dabei, wenn man den installiert, sieht man diesen Treiber bei den Datenquellen unter Systemsteuerung/Verwaltung.
Der möge ja dabei sein, aber ich habe kein Windows und kann demzufolge dazu keine Aussage treffen. Was mir in dem Zusammenhang noch einfällt: bei mir sind Datenbankverbindungen über asynchrone Leitungen (DSL) auch ein gutes Stück langsamer, weil der Rückkanal halt eine bescheiden schlechte Datenrate hat. Aber so schlecht sollte das nun wirklich nicht sein.
Kannst du mal messen, wie lange jeder einzelne Query bei dir braucht? Und ist es möglich, die Applikation so umzuschreiben, das vielleicht mehrere Datensätze auf einmal geholt werden? Weil du musst ja nun jedesmal eine Anfrage an die DB schicken, die wird ausgewertet und die Daten gehen zurück. Das kostet über das Internet doch einige Millisekunden mehr als über ein LAN und summiert sich auf.
Dann fallen mir noch prepared Queries ein, aber ob die da noch viel helfen …
writetolocal schreibt einen Datensatz in die DB. Und falls ein gleicher existiert, löscht er diesen vorher. Das ist die eigentliche Arbeit.
Aber ich vermute mittlerweile, mein Programm ist einfach ineffizient. Oder?
zufällig habe ich die Probleme mit der Datenbank im Internt mitbekommen und danke du solltest noch mal die Internetkonfiguration auf Client und Serverseite überprüfen.
(Was setzt du übrigens als Client ein ?)
Ich habe bei mir zuhause einen Rechner stehen auf dem eine PG läuft und diese ist über DynDns und ganz normale 1MBit DSL aus dem Internet erreichbar. Diese kommt so auf 200 - 300 Datensätze pro Sekunde, wenn ich über ODBC die Daten abrufen. (Hier spielt evtl. eine Rolle wie groß die Tabelle ist ?)
Ich denke hier (Internet) liegt das Problem und nicht bei der Datenbank sondern du solltest mal schauen, wie lange z.B, ein Ping braucht, bis er zurückkommt (was ist als Nameserver eingetragen?), div. Firewalls etc. könnten auch die Finger drin haben, außerdem solltest du auch mal die IP-Zugriffsliste deines PG überprüfen (näheres findest du auch hier im forum, oder in der Hilfe) auch da kann man anscheinend ne ganze Menge verkonfigurieren.