Zeit und Zeitzonen richtig konfigurieren

From: "Johannes Brgmann" <johannes(at)jottbee(dot)org>
To: pgsql-de-allgemein(at)postgresql(dot)org
Subject: Zeit und Zeitzonen richtig konfigurieren
Date: 2006-04-03 10:07:21
Message-ID: 5z4q1b55wm.fsf@jottbee.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-de-allgemein

Hallo Liste,

ich habe folgendes System am Start und wüßte gerne, wie ich es am
besten konfiguriere, damit alle beteiligten Clients (drei Gruppen) die
jeweils korrespondierenden Zeitstempel erhalten und damit alle
beteiligten möglichst effizient arbeiten können:

(a) mehrere Clients populieren eine Tabelle der Datenbank mit Tupeln
der Form (timestamptz, id1, id2, id3, data ...). Dabei bilden
timestamptz, id1, id2, id3 den Primärschlüssel. (id1, id2, id3) ist
ein referenzierter Fremdschlüssel. Jeder dieser Clients hatte bislang
(bis zum "rumspielen" an der Konfiguration heute) die
Umgebungsvariable PGTZ=CET und erhält Daten aus der Standardeingabe,
die allesamt Winterzeit referenzieren. Jeder dieser Clients erhält
seine Zeit als Argument z.B. -t '03.04.2006 12:00:00'. Den Wert dieses
Arguments (string, libpqxx) verwendet der Client beim Einfügen in die
Datenbank. Die Tabelle enthält mittlerweile Daten mit mehr als
100GB. Im Endstadium schätze ich das Volumen auf 200GB.

(b) andere Clients starten zu einem beliebigen Zeitpunkt und setzen
ihre Uhr auf localtime abgerundet auf die volle Minute weniger ein
paar gewollten Verzögerungsminuten. Aufgabe dieser Clients ist es, die
jeweils ihrer Zeit entsprechenden neuesten Daten zu erfragen und
korrespondierende Rechenergebnisse zurückzuschreiben. In der
Sommerzeit (CEST) wollen sie die Daten mit ihrem Zeitstempel - 1h; in
der Winterzeit - 0h. Auch diese Clients haben PGTZ=CET bzw. jetzt
PGTZ=+01.

(c) die letzte Gruppe von Clients will nur die stets aktuellsten
Rechenergebnisse der vorherigen Gruppe (b). Auch diese Clients
verwenden die leicht modifizierte localtime(0) wie oben bei der
Datenbankanfrage. Sie besitzen die Umgebungsvariable PGTZ=-0000. Die
Tabelle, deren Daten sie abfragen, hat die Form (timestamptz,
(Fremdschlüssel), data ...). Dieser Fremdschlüssel ist nicht identisch
mit (a). Die Tabelle enthält zwar nur jeweils die letzten 24- oder
eventuell auch weniger Stunden, jedoch sind das auch in etwa
1240-Datensätze pro Minute.

Die Systemzeit war bis gestern Europe/Berlin, seit heute
UTC. Postgres, Version 8.0.4, besitzt in Bezug auf die Zeit die
Voreinstellung, das locale ist auf C. Alle Clients verwenden
PGDATESTYLE=German.

Phänomen:

Es sei 03.04.2006 09:00:00 UTC. Ein (a)-Client hat Daten mit
'03.04.2006 10:00:00 +01' und schreibt diese in die Datenbank. Eine
spätere Anfrage mittels PGTZ=UTC psql liefert keine Daten mit
'03.04.2006 09:00:00'. Die Daten erhalte ich nur mit '03.04.2006
08:00:00'. Mittlerweile habe ich die (a)-Clients umgestellt auf
PGTZ=UTC und erhalte nun die entsprechenden Daten mit '03.04.2006
10:00:00'.

Fragen:

1. Wie können die Daten aus (a) unter CET bzw. UTC +01 gespeichert
werden? Sollten diese Daten eventuell mit einem anderen Datum
eingetragen werden? Muss ich Daten seit der Umstellung auf CEST
mittels UPDATE aktualisieren?

2. Welche PGTZ-Einstellung benötigen die Clients aus (b), damit sie
die entsprechenden Daten erhalten? Benötigen diese Clients eventuell
oder unbedingt eine besondere Zeitstempelkonvertierung?

3. Welche PGTZ-Einstellung ist für die (c)-Clients am sinnvollsten?

4. Was bedeutet integer_datetimes = off aus den
show-all-Einstellungen?

5. Für (c) benötige ich nun eine performantere Anfrage, die zu jedem
Fremdschlüssel-Tupel seine aktuellsten Datensätze liefert. Eine
Aggregatfunktion newest(timestamptz) oder so habe ich nicht gefunden,
ich bin mir aber auch nicht sicher, ob das der richtige Weg
ist, denn da muss die Datenbank doch das jeweilige Maximum ermitteln
(alle Datensätze durchsuchen), oder? Welcher Weg ist am
effizientesten?

6. Wo könnte ich sonst noch Optimierungen vornehmen? Was sollte ich
anders machen?

Danke für Eure Geduld und Mühe.

Freundliche Grüße
Johannes Brügmann
--

Responses

Browse pgsql-de-allgemein by date

  From Date Subject
Next Message A. Kretschmer 2006-04-03 12:27:11 Re: Zeit und Zeitzonen richtig konfigurieren
Previous Message Susanne Ebrecht 2006-04-03 10:05:46 Helfer für den Linuxtag