Benutzer-Werkzeuge

Webseiten-Werkzeuge


development:schema

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
development:schema [2010/07/23 01:34]
steffenvogel angelegt
development:schema [2015/02/18 16:30] (aktuell)
andig [Typen] Auswertung präzisiert
Zeile 1: Zeile 1:
-====== Daten & Referenzierung ======+====== Datenstruktur ======
  
-Hier habe ich mal eine Übersicht aller Daten (Enities) und deren Referenzierung im Volkszähler Projekt erstellt. +Auf dieser Seite beschreibe ich die Datenstruktur unserer Middleware und der damit verbundenen Datenbank.
-===== Daten =====+
  
-==== Kanäle ==== +===== Objekte ("entities") =====
-Kanäle sind laut unserer [[development:definitions]] jede Art von Zähler oder Sensor (Strom, Wasser, Gas, Luftdruck, Feuchtigkeit etc).+
  
-Folgende Daten sind mit einem Kanal verbunden: 
-  * ein Name 
-  * eine Beschreibung 
-  * eine globale UCID - **U**nique **c**hannel **ID** (ist weltweit eindeutig, und wird für die Controller -> Server API benötigt) 
-  * eine interne ID 
-  * die Messgröße des Kanals 
-  * die Auflösung/Genauigkeit des Kanals (hauptsächlich für Pulszähler interessant) 
-  * die Kosten des Kanals (hauptsächlich für Pulszähler interessant) 
  
-==== Messwerte ==== +==== Typen ====
-Die Messwerte bestehen aus folgenden Daten: +
-  * Referenz auf Kanal (Foreign Key über interne Kanal-ID) +
-  * Zeitstempel (ordnet jeden Messwert einem genauen Zeitpunkt zu, sollte mindestens in Millisekunden Auflösung gespeichert werden) +
-  * Wert (enthält den absoluten Messwert eines Sensors oder die Anzahl der Pulse eines Pulszählers nach dem letzten Messwert, je nach Typ des durch Kanal[ID] referenzierten Kanals)+
  
-==== Gruppierung ====+[[http://github.com/volkszaehler/volkszaehler.org/blob/master/share/definitions/entities.json]] 
 + 
 +=== Kanäle ("channels"==
 +Kanäle sind nach unserer [[development:definitions]] jede Art von Zähler oder Sensor (Strom, Wasser, Gas bzw. Temperatur, Luftdruck, Feuchtigkeit etc).  
 + 
 +Sie können [[#Messwerte]] speichern. 
 + 
 +=== Gruppierung ("aggregators"===
  
 Die Gruppierung der Zähler hat mehrere Aufgaben: Die Gruppierung der Zähler hat mehrere Aufgaben:
Zeile 33: Zeile 26:
   * sie kann gruppierte Kanäle gemeinsam auswerten   * sie kann gruppierte Kanäle gemeinsam auswerten
     * Visualisierung     * Visualisierung
-    * Summe 
-    * statistisch (Durchschnitt, Min, Max etc.) 
   * ein Kanal kann in mehreren Gruppen enthalten sein   * ein Kanal kann in mehreren Gruppen enthalten sein
   * eine Gruppe kann selbst in mehreren Gruppen enthalten sein (Rekursion)   * eine Gruppe kann selbst in mehreren Gruppen enthalten sein (Rekursion)
  
-===== Referenzierung =====+==== Eigenschaften ("properties"====
  
-==== global (weltweit) ==== +[[https://github.com/volkszaehler/volkszaehler.org/blob/master/lib/Volkszaehler/Definition/PropertyDefinition.json]]
-Im Daten Abschnitt fielen schon mehrmals die Begriffe UCID, UGID usw. Gemeint sind damit [http://de.wikipedia.org/wiki/Universally_Unique_Identifier UUID]s gemäß [http://tools.ietf.org/html/rfc4122 RFC4122].+
  
-Diese IDs können eine Gruppe, einen Kanal usw. weltweit eindeutig referenzieren. Aufgrund der vielen Möglichkeiten ist eine Absprache, Reservierung über die Nutzung von UUIDs nicht nötig, da die Kollisionsgefahr sehr gering ist (vgl. sha1-Hashes bei git).+==== Referenzierung ==== 
 + 
 +=== global (weltweit) === 
 +Ein wichtiger Bestandteil unserer API ist die weltweit eindeutige Referenzierung aller Entities durch eine [[http://de.wikipedia.org/wiki/Universally_Unique_Identifier|UUID]] gemäß [[http://tools.ietf.org/html/rfc4122|RFC4122]]. 
 + 
 +Die UUID's werden immer durch die Middleware zufällig generiert um die Kollisionsgefahr zu minimieren.
  
 Das ganze hat Vorteile: Das ganze hat Vorteile:
-  * einmal installiert behält ein Zähler immer seine UCID +  * einmal installiert behält ein Zähler immer seine UUID 
-  * das Mergen von Backends mit ihren Messwerten wäre möglich+  * das Mergen von Middlewares mit ihren Messwerten wäre möglich
   * bieten durch ihre Komplexität einen gewissen Zugriffsschutz   * bieten durch ihre Komplexität einen gewissen Zugriffsschutz
  
Zeile 54: Zeile 49:
   * schwer zu merken   * schwer zu merken
  
-==== lokal (auf dem Backend==== +=== lokal (auf der Middleware) === 
-Um Speicherplatz zu sparen nutzt das Backend intern nur 2byte lange IDs. Diese werden mit Foreign Keys in der Datenbank untereinander verknüpft. Das sorgt dafür das wir zusätzlich zur Absicherung im Backend keine inkonsistenten Daten bekommen können.+Um Speicherplatz zu sparen nutzt die Middleware intern nur 2byte lange IDs. Diese werden mit Foreign Keys in der Datenbank untereinander verknüpft. Das sorgt dafür das wir zusätzlich zur Absicherung in der Middleware keine inkonsistenten Daten bekommen können. 
 + 
 +=== mysql Database === 
 +The mysql database structure can be analyzed with the mysql command line client. 
 +The following results are as of 2014-05-22: 
 + 
 +<code sql> 
 +show tables; 
 +</code> 
 + 
 +Tables_in_volkszaehler 
 +  * aggregate 
 +  * data 
 +  * entities 
 +  * entities_in_aggregator 
 +  * properties 
 + 
 +<code sql> 
 +describe entities; 
 +</code> 
 + 
 +^ Field ^ Type         ^ Null ^ Key ^ Default ^ Extra          ^ 
 +| id    | int(11)      | NO   | PRI | NULL    | auto_increment | 
 +| uuid  | varchar(36)  | NO   | UNI | NULL    |                | 
 +| type  | varchar(255) | NO       | NULL    |                | 
 +| class | varchar(255) | NO       | NULL    |                | 
 + 
 +<code sql> 
 +describe properties; 
 +</code> 
 + 
 +^ Field ^ Type         ^ Null ^ Key ^ Default ^ Extra          ^ 
 +| id        | int(11)      | NO   | PRI | NULL    | auto_increment | 
 +| entity_id | int(11)      | YES  | MUL | NULL    |                | 
 +| pkey      | varchar(255) | NO       | NULL    |                | 
 +| value     | longtext     | NO       | NULL    |                | 
 + 
 +<code sql> 
 +describe data; 
 +</code> 
 +^ Field ^ Type         ^ Null ^ Key ^ Default ^ Extra          ^ 
 +| id         | int(11)    | NO   | PRI | NULL    | auto_increment | 
 +| channel_id | int(11)    | YES  | MUL | NULL    |                | 
 +| timestamp  | bigint(20) | NO       | NULL    |                | 
 +| value      | double     | NO       | NULL    |                | 
 + 
 +<code sql> 
 +describe aggregate; 
 +</code> 
 + 
 +^ Field ^ Type         ^ Null ^ Key ^ Default ^ Extra          ^ 
 +| id         | int(11)     | NO   | PRI | NULL    | auto_increment | 
 +| channel_id | int(11)     | YES  | MUL | NULL    |                | 
 +| type       | smallint(6) | NO       | NULL    |                | 
 +| timestamp  | bigint(20)  | NO       | NULL    |                | 
 +| value      | double      | NO       | NULL    |                | 
 +| count      | int(11)     | NO       | NULL    |                | 
 + 
 +<code sql> 
 +describe entities_in_aggregator; 
 +</code> 
 + 
 +^ Field ^ Type         ^ Null ^ Key ^ Default ^ Extra          ^ 
 +| parent_id | int(11) | NO   | PRI | NULL    |       | 
 +| child_id  | int(11) | NO   | PRI | NULL    |       | 
 + 
 +===== Messwerte ("data") ===== 
 +Die Messwerte bestehen aus folgenden Daten: 
 +  * Referenz auf Kanal (Foreign Key über interne Kanal-ID) 
 +  * Zeitstempel (ordnet jeden Messwert einem genauen Zeitpunkt zu, sollte mindestens in Millisekunden Auflösung gespeichert werden) 
 +  * Wert (enthält den absoluten Messwert eines Sensors oder die Anzahl der Pulse eines Pulszählers nach dem letzten Messwert, je nach Typ des durch Kanal[ID] referenzierten Kanals)
development/schema.1279841669.txt.gz · Zuletzt geändert: 2011/05/29 13:09 (Externe Bearbeitung)