InfluxDB ist eine Zeitreihendatenbank (time series database). Das Hauptanwendungsgebiet liegt in der Speicherung von Daten mit Zeitbezug, etwa Meßreihen oder Events, InfluxDB ist geeignet zur Echtzeitanalyse, besitzt eine SQL-ähnliche Abfragesprache, bietet eine HTTP(S)-API und stellt ein web-basiertes Management-Interface zur Verfügung. Für die Auflistung weiterer Features verweise ich an dieser Stelle auf die Website des Projektes. InfluxDB liegt aktuell in der Version 0.8.8 vor, die Version 0.9 befindet sich in Entwicklung, die Veröffentlichung steht in Kürze bevor, momentan ist v0.9.0-rc16 aktuell. Die Entwicklung schreitet stetig voran, als ich vor ungefähr zwei Wochen mit meinen Experimenten begonnen habe, lag der Entwicklungsstand noch bei v0.9.0-rc13.
Für die Version 0.8.8 listet die Website Unterstützung für ca. 20 Programmiersprachen auf, hinzu kommen Libraries und Tools wie etwa verschiedene CLIs und Module zur Einbindung in Dashboards oder Daemons wie StatsD oder CollectD. Natürlich existiert auch eine PHP InfluxDB Anbindung, dabei verweist die InfluxDB-Website auf InfluxPHP von César Rodas.
Für die Version 0.8.8 funktionierte diese auch wie beschrieben, jedoch wurde bei InfluxDB 0.9 die API sehr umfangreich geändert. Vielleicht ist noch interessant, dass InfluxDB in der Programmiersprache Go geschrieben ist, wobei das Build-System der Version 0.9 nicht mehr abhängig ist von C- oder C++-Tools. InfluxDB selbst besitzt ebenfalls keine externen Abhängigkeiten, somit ist es sehr einfach, die Datenbank beispielsweise auf einem Raspberry Pi zum Laufen zu bringen. Darin bestand meine ursprüngliche Ambition, und zwar Sensor-Daten nicht nur mit, sondern auch auf einem Raspberry Pi zu sammeln. Den Kompilier- und Installationsvorgang werde ich in einem späteren Artikel beschreiben.
Nun zum Abschnitt der Eigenwerbung, denn da InfluxPHP leider nicht ad hoc mit der von mir installierten InfluxDB Version 0.9 funktionierte, habe ich mich kurzerhand daran begeben, InfluxPHP dahingehend anzupassen, dass es die Version 0.9 unterstützt. Zunächst sollte dies nach dem Motto „so viel wie nötig, so wenig wie möglich“ erfolgen, jedoch musste ich feststellen, dass die Änderungen der API doch umfangreicher waren als erwartet. Dementsprechend sind die Anpassungen ebenfalls ein wenig umfangreicher geworden, wobei ich versucht habe, die grundlegende Struktur, etwa der Ergebnis-Arrays, beizubehalten.
Das Ergebnis befindet sich momentan bei Github im geforkten Repository im Branch ‚0.9.0_support‘, bei der Benennung habe ich mich von der Python-Library inspirieren lassen… Nun wäre es nicht unbedingt sinnvoll, für eine Client-Library verschiedene Forks und Branches einzusetzen, wenn es auch einfacher geht. Daher stehen der ursprüngliche Autor und ich in Kontakt, angestrebt ist ein Zurückführen in das Ursprungsprojekt und der Einsatz von Paket-Management mittels Composer, um die Kompatibilität der der Library-Versionen zur jeweiligen InfluxDB-Version zu verdeutlichen.
Aus diesem Grund kann InfluxPHP für Version 0.9 momentan noch nicht mittels Composer installiert werden, d.h. wer interessiert ist, InfluxPHP für InfluxDB 0.9 zu testen, muss die Installatioin direkt per Git-Kommando durchführen. Oder einmal per Composer das ursprüngliche Projekt (per composer require crodas/influx-php:\*), danach den üblichen Lauf von composer update, anschließend die neuen Inhalte in das Verzeichnis vendor/crodas/influx-php/lib/ kopieren und nochmal composer update laufen lassen, um den Autoloader neu zu generieren, da einige Dateien neu hinzu gekommen sind.
Auf der Todo-Liste steht neben einer Erweiterung von Dokumentation und Tests auch noch die Unterstützung der so genannten Retention Policies. Dabei handelt es sich um ein InfluxDB-Feature, mit dem die Aufbewahrungszeit von Daten definiert werden kann, der Standard ist dabei „unendlich“, so dass die gespeicherten Daten nie automatisch gelöscht werden.
Neben der README.md befindet sich einiger Beispiel-Code in den Tests, auf den ich an dieser Stelle verweisen möchte.
Somit steht nun für die nächste InfluxDB Version 0.9 von Anfang an eine PHP-Library zur Verfügung.