Dblog zu große Datenmenge

Begonnen von Henry, 29 August 2013, 09:23:33

Vorheriges Thema - Nächstes Thema

marvin78

ZitatStandardmäßig ist die DBLog-Datenbank ja nur eine ziemlich primitive Tabellendefinition ohne jegliche Indizierung oder (Primär)schlüssel.

Das stimmt ja nun so nicht. Wenn man die DBLog so anlegt, wir allgemein an vielen stellen empfohlen (man könnte auch selbst darauf kommen), hat man einen Index über die Spalten DEVICE, READING und TIMESTAMP. Und das bringt gerade für die Plots einen sehr deutlichen Performance Schub.

Wenn man gewisse Daten länger vorhalten will, als anderen, kann man durchaus auch 2 oder mehr DBLogs definieren. Bei mir werden die Temperaturwerte bspw. in eine DB geschrieben, die anderen Werte in eine andere und dort lösche ich regelmäßig alles, was älter ist als 30 Tage.

roedert

#16
Zitat von: marvin78 am 19 Oktober 2014, 08:33:22
Das stimmt ja nun so nicht. Wenn man die DBLog so anlegt, wir allgemein an vielen stellen empfohlen (man könnte auch selbst darauf kommen), hat man einen Index über die Spalten DEVICE, READING und TIMESTAMP.....

Im FHEM-Paket ist contrib/fhemdb_create.sql zur Erstellung der Datenbank enthalten - und dort ists eben nur die simple Struktur definiert.
Auch im Wiki sind nur die Felder aufgelistet und keine sinnvolle Indizierung vorgeschlagen.

Vielleicht sollte man diese beiden Quellen dann mal anpassen.

Könntest du evtl. mal eine der "vielen Stellen" verlinken, die Forensische nach DbLog, Index, Performance etc. brachte keine hilfreichen Treffer.
Natürlich kann man auf vieles selbst kommen - aber genau das ist doch der Zweck eines Forums/Community .... sein Wissen zu teilen, damit nicht jeder wieder von vorn anfangen muss.

marvin78

CREATE DATABASE `fhem` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
CREATE USER 'fhemuser'@'%' IDENTIFIED BY 'fhempassword';
CREATE TABLE `fhem`.`history` (TIMESTAMP TIMESTAMP, DEVICE varchar(32), TYPE varchar(32), EVENT varchar(512), READING varchar(32), VALUE varchar(32), UNIT varchar(32));
CREATE TABLE `fhem`.`current` (TIMESTAMP TIMESTAMP, DEVICE varchar(32), TYPE varchar(32), EVENT varchar(512), READING varchar(32), VALUE varchar(32), UNIT varchar(32));
GRANT SELECT, INSERT, DELETE, UPDATE ON `fhem`.* TO 'fhemuser'@'%';
CREATE INDEX Search_Idx ON `fhem`.`history` (DEVICE, READING, TIMESTAMP);


Aus meinem mySQL im contrib. Da wird ein Index gesetzt.

Puschel74

Hallo,

das sollte man dann evtl. auch hier
http://www.fhemwiki.de/wiki/Neues_Charting_Frontend
einfügen.
Jedesmal wenn ich eine Datenbank benutzen möchte nehme ich diesen Wikiartikel als "Vorlage".

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

roedert

ok, sorry ...in meiner db_create_mysql stand diese Zeile noch nicht drin  :(

Wahrscheinlich wurde diese Datei nie durch den Update-Befehl aktualisiert. 

marvin78

Das contrib Verzeichnis wird tatsächlich nicht durch den Update Prozess aktualisiert.