Zitat von Marcus Obst marcus.obst@etit.tu-chemnitz.de:
Hallo Liste!
Ich glaube mich zu erinnern, dass es hier einige gibt, die sich mit Datenbanken und im speziellen sogar mit PostgreSQL ziemlich gut auskennen.
Wir verwenden hier in Chemnitz seit einiger Zeit eine Postgres-Datenbank um unsere Messdaten zu speichern. Eigentlich halte ich die Anforderungen für sehr moderat, dennoch bin ich mit der ,,Gesamtsituation'' bisher etwas unzufrieden.
Ich versuch mal kurz zu skizzieren was wir machen (wollen) und wo es im Moment klemmt.
Die Datenbank besteht im Prinzip aus einer Tabelle die pro Datensatz eine ID, einen Zeitstempel, einen Blob sowie noch drei String Felder enthält. Da wir die PostGIS-Erweiterung benutzten ist auch noch eine Feld mit Koordinaten vorgesehen.
In dem Blob-Feld fügen wir Binärdaten der Größe 100 Byte - 300kb ein, das ist aber ständig variable.
Insgesamt ist perspektivisch mit eine Datenvolumen von ca. 1 Terrabyte zu rechnen, also eigentlich nix aufregendes. Wenn ich einen Satz Messdaten importiere sind das ca. 20GB-Daten, die auf 500.000 Datensätze verteilt sind.
Die Datenbank läuft auf einem Windows-Server in der 32-Bit Version.
*GNA*. Wäre ein Wechsel zu einem OS denkbar?
Client-seitig verwenden wir c# mit dotConnect von devart.
Jetzt zu den Problemen:
- Der Import der Daten gestaltet sich aus meiner Sicht ziemlich
langsam. Der Importer schafft im Moment lediglich eine Datenrate von 8 MB/s wenn er in die Datenbank schreibt. Beschaffen könnte er die Daten theoretisch mit 50M/s.
Wie sieht die postgresql.conf aus? Habt Ihr die so belassen, oder aber verändert?
- Ganz blauäugig dachte ich mir, dass man um das INSERT der 500.000
Datensätze, die ja alle logisch zu einem Messdatensatz gehören, mit einer Transaktion klammern kann. Wenn ich das mache, bekomme ich nach ca. 5GB importierten Daten eine Exception, die mir mitteilt, dass auf Serverseite irgendwelcher Speicher alle wäre?
Wie lautet die Meldung *genau*? An und für sich ist Deine Idee richtig. Aber wenn Du das in der PG-Default-Congfig machst, würde mich dies als Resultat nicht wirklich wundern.
Wenn ich weniger Daten importiere gibt es keine Exception. Dafür bekomme ich beim finalen Commit der Transaktion ein Timeout.
- Das löschen von Messdaten (wider 500.000 Zeilen) mit einer Query ala
DELTE FROM measurements WHERE session_id = 34
dauert ewig und kommt meist Client-seitig mit einem Timeout zurück.
Was sagt ein "EXPLAIN ANALYSE SELECT * FROM measurements WHER ID = 34;" ?
Hat jemand vielleicht einen Ansatzpunkt?
Jede Menge...
Andreas