Hallo Leute,

ich hab mir jetzt mal aus Interesse das DB Design der SQLite Datenbank vorgenommen und will euch das nicht vorenthalten.

Natürlich beruht meine Analyse auch auf Annahmen und ich kann mich durchaus irren, aber für mich sieht das so aus:

Die Datenbank ist folgendermassen aufgebaut:
Es gibt pro Datentyp ( Boolean, Float, Integer, string )
jeweils eine Tabelle mit den folgenden Variablen: ( ich nenne das den Plain Speicher )

timestamp, varid, counter, lasttime, duration, status, value.
(6 Integer + 1 mal der Datentyp)

und (ausser für den Datentyp "string"):
( ich nenne das den Grafik-Speicher )

jeweils für die Grafik-Anzeigintervalle ( Hour, Day, Week, Month, Week, Year )
zusätzlich eine Tabelle mit den Variablen:

timetamp, varid, counter, lasttime, lastvalue, duration, status, min, mintime, avg, max, maxtime.
(8 INTEGER + 1 REAL + 3 * der Datentyp)


Wenn man das mal im Munde zergehen lässt, kommt man schnell darauf, dass hier die Daten

1. komplett im "Plain Speicher" abgelegt werden sollen.

2. zusätzlich, wie bei WIIPS, entsprechend der Grafikintervalle als berechnete min/max/avg Werte im "Grafik-Speicher" abgelegt werden (was bedeutet dann der timestamp?). D.h die Grafik wird bereits Online gerechnet!


Wozu die Tabellen für die Grafik-Intervalle sind ist zuerst schwer zu verstehen. Wenn man richtig indiziert, und das sieht ja schon gut aus, dann kann man das (min,max,avg) locker offline, also während der Abfrage der Datenbank berechnen lassen und nomalerweise würde das auch bestimmt so geschehen, aber ich kann mir auch vorstellen, warum das Design so ist wie es ist. Der Entwickler hat sicherlich Kummer was die Performance der Datenbank Rechner angeht. Bei mir läuft IPS auch nur auf einem AMD-Geode. Trotz alledem, kann man vielleicht noch einges an DB Platz sparen ( was auch Performance bringt)
Ich denke da an counter,lasttime,duration und lastvalue weil mir deren Bedeutung noch unklar ist.

Ich hoffe das meine Anlyse so stimmt und es evtl einige Fragen beantwortet.

Grüssse