diff --git a/Projektarbeit-3/Umsetzung.md b/Projektarbeit-3/Umsetzung.md index 0037b12..74b591e 100644 --- a/Projektarbeit-3/Umsetzung.md +++ b/Projektarbeit-3/Umsetzung.md @@ -1,10 +1,57 @@ # Backend -## Datenaufbereitung (Praxis) -* Wie wurden die Parser geschrieben ## Datenbank -* SQLite -* Tabellen +Zunächst war es wichtig, zu erkennen, welche Tabellen nötig waren. Hier sind zunächst die Tabellen zu nennen, die die reine Datenhaltung der OpenApi Data abbilden. +#### usage_stats +```sql +CREATE TABLE IF NOT EXISTS usage_stats( + rental_id INTEGER PRIMARY KEY, + duration INTEGER, + bike_id INTEGER, + end_date INTEGER, + end_station_id INTEGER, + end_station_name TEXT, + start_date INTEGER, + start_station_id INTEGER, + start_station_name TEXT +) +``` +Prinzipiell ergeben sich alle Datentypen implizit, außer einer, den Dates. Die Datumsangaben "end_date" und "start_date" werden ebenfalls als Integer abgespeichert. Dies ist aufgrund des ständig wechselnden Export-Formats in den Rohdaten. Der einfachste Weg war hier, alle Dates in Unix Timestamps zu konvertieren. Dies ermöglicht einfaches suchen, als auch einfache Speicherung. Weiter ist die Zeitzone nicht wichtig, da sich alle Bikepoints in London, also in einer Zeitzone, befinden. + +#### bike_points +```sql +CREATE TABLE IF NOT EXISTS bike_points( + id TEXT PRIMARY KEY, + common_name TEXT, + lat REAL, + lon REAL, + id_num INTEGER +) +``` +Diese Tabelle spiegelt lediglich die Online Bikepoints einmalig bei der Initialisierung der Datenbank. Sie wird benutzt um Namen und ID mit der usage_stats Tabelle zu vergleichen. + +#### accidents +```sql +CREATE TABLE IF NOT EXISTS accidents( + id INTEGER PRIMARY KEY, + lat REAL, + lon REAL, + location TEXT, + date TEXT, + severity TEXT, + UNIQUE (lat, lon, date) +) +``` +Die Unfälle werden ebenfalls direkt gespiegelt, es wird hier auch nicht das Datum angepasst. Die Schwierigkeit hier war allerdings, dass die London API jeden Unfall willkürlich doppelt zurückgegeben hat. Um dies zu beheben, musste eine Unique Constraint zwischen dem Ort und der Uhrzeit hergestellt werden. + +Zuletzt wurde noch eine Tabelle eingeführt, die die schon importierten Dateien aufzeichnet. +```sql +CREATE TABLE IF NOT EXISTS read_files(file_path TEXT, etag TEXT PRIMARY KEY) +``` +Diese war notwendig um bei einem Abbruch der Initialisierung eine Wiederaufnahme des Prozesses zu ermöglichen. Es wird hierzu der Dateiname und der Dateihash (Checksumme) gespeichert. + +## Datenaufbereitung (Praxis) +* Wie wurden die Parser geschrieben ## Performance * 60 Mio Datensätze