Code: Alles auswählen
2019-08-31: Sonne, Bier, Spaziergang, Freizeit
2019-09-01: Besuch, Essen, Rotwein, Kaffee
2019-09-02: Kursbesuch, Lärm, Schlafmangel, Käsekuchen
Ein Verzeichnis mit einer Datei pro Tag (Dateiname = Datumsangabe) und einem Tag pro Zeile wäre natürlich eine sehr einfache Variante. In meinem Prototyp-Projekt geht es aber eher um den Web-UI-Aspekt, und weniger um die Persistenz. Ich möchte mich also möglichst wenig mit der Persistierung beschäftigen, und hätte am liebsten einen Service, den ich mit Docker Compose unter einem bestimmten Port reinhängen und dann damit lospersistieren könnte. (Es schadet auch nicht, wenn ich dabei eine neue Technologie kennenlerne.)
Eine relationale Datenbank wäre recht gut geeignet, da man die Tags in einer Tabelle und die Zuordnung von Tagesdatum zu Tag in einer Beziehungstabelle abbilden könnte. Die Zugriffe sollten dann mit SQL einfach und schnell vonstatten gehen. Leider benötige ich hier eine statische Tabellenstruktur, die beim ersten Aufstarten erzeugt und bei Updates angepasst werden müsste. Das verursacht bereits weitere Komplexität, auf die ich lieber verzichten würde. Ausserdem wäre hier der Lerneffekt eher klein, zumal ich schon seit vielen Jahren mit SQL und relationalen Datenbanken arbeite.
Mongo DB oder eine sonstige Dokumentdatenbank wäre da eine Variante, die ich schon einmal für ein anderes Projekt verwendet habe. Pro Tag könnte ich ein Dokument anlegen, und darin einfach ein Array von Tags ablegen. Der Lookup nach Tagen wäre dann sehr einfach, aber für das Auslesen aller Tags müsste ich wiederum alle Dokumente einlesen.
Schliesslich wäre da noch die Variante Key-Value-Store, wie z.B. Redis. Hier habe ich noch gar keine Erfahrungen, und wüsste auch nicht, wie ich das am besten modellieren sollte. Das Tagesdatum als Key und die Tags in einem Array als Value? Oder pro Datum-Tag-Kombination (Key) ein Boolean (Value), ob diese Kombination existiert?
Oder sollte ich die Sache gar umdrehen, und pro Tag eine Liste von Daten speichern? Das würde den Lookup vereinfachen, aber die Datenerfassung, die täglich passiert, etwas schwieriger machen.
Code: Alles auswählen
Spaziergang: 2019-08-03, 2019-08-20, 2019-09-01
Bier: 2019-08-12, 2019-08-15
Schlafmangel: 2019-08-07, 2019-08-17, 2019-08-24, 2019-09-01
Lösungsvarianten wären genügend da, und umsetzen kann man es für die bescheidene Datenmenge (für den Prototyp) wohl mit jeder Technologie problemlos. Am interessantesten wären natürlich verschiedene Implementierungen, die man dann miteinander vergleichen könnte, aber dazu fehlt mir dann doch die Zeit.
Was habt ihr für Erfahrungen und Ratschläge betreffend Datenmodellierung und Speichertechnologie? Meine Hauptkriterien sind Einfachheit in der Handhabung (möglichst wenig selber Programmieren, kein Setup) und Eleganz (was die Datenmodellierung gemäss Problemstellung betrifft). Der Lerneffekt (Key-Value-Store > Dokument-DB > SQL-Datenbank) ist auch ein Kriterium.