Welche Datenbank?

Django, Flask, Bottle, WSGI, CGI…
Antworten
Tholo
User
Beiträge: 177
Registriert: Sonntag 7. Januar 2018, 20:36

Hallo und frohes neues Jahr!
Wie schon oft zum Jahreswechsel hatte ich einen Einfall für ein neues Projekt. (auch wenn die der letzten Jahre noch nicht mal abgeschlossen sind :oops: )

Ich würde gerne verschiedene Chats auslesen und eine Stimmungsanalyse betreiben.
Die Grundstruktur ist hier beschrieben
https://github.com/cjhutto/vaderSentime ... README.rst

Ich möchte die Auswertung dann darstellen. Zur Zeit denke ich da an Django und Grafana.

Jetzt eröffnet sich mir die Frage zur Datenbank.
Im Grunde speichere ich 3 verschiedene items
- timestamp
- pseudonym
- result

Welche Datenbank könnte ich nutzen?
SQL DB like PostgresDB ist klar.
Eine Tabelle mit 3 Spalten

Aber was ist mit Nosql? Habe ich einen Vorteil wenn die Daten via mongodb strukturiert sind?

Oder was ist mit Influxdb? Das hängt mit Grafana ja quasi direkt zusammen und sie ist ja sowieso in der Zeitreihe beschrieben.

Ich würde mich über eure Gedanken dazu sehr freuen.
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

Eine Argumentationslinie: Django hat gute PostgreSQL Unterstützung. Wenn man einen Hauch NoSQL haben möchte, hat PostgreSQL mittlerweile einige NoSQL-artige Features (z.B. Hstore und Json(b) Feldtypen), die von Django übrigens ebenfalls unterstützt werden. Das Result-JSON-Objekt von dieser VADER-Bibliothek kann man, wenn man denn möchte, als Gesamtkunstwerk in einer JSON-Spalte ablegen und abfragen. Ich habe schon Vergleichbares gemacht und meine Erfahrungen damit sind ganz gut, allerdings zugebenermaßen nicht mit Millionen von Datensätzen. Ich kann mir vorstellen, dass dein Datenmodell am Ende doch komplexer als die dreispaltige Tabelle wird, etwa, wenn du noch Metadaten zu Chats oder Pseudonymen erfassen möchtest. Mit dem Django-ORM kann man diese Dinge leicht in Code formulieren. Insofern kann es gut sein, dass Django und PostgreSQL hier bereits genügen.

Allerdings ist das nur ein Ansatz. Für eine einfache Webanwendung, die nur ein bisschen was visualisiert, reichen vielleicht auch schon bottle oder flask.

Mit mongodb, grafana und InfluxDB kenne ich mich nicht aus.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

NoSQL ist eine interessante Option wenn du ein Feature brauchst das ein RDBMS nicht bietet z.B. hohe Verfügbarkeit (d.h. du kannst es nicht tolerieren dass die Datenbank ein paar mal im Jahr für 30s wegen failover für schreibenden Zugriff nicht erreichbar ist).

NoSQL kann auch interessant sein wenn Performance eine Rolle spielt. Hierbei ist es allerdings wichtig dass du genau weißt wie deine Daten strukturiert sind und wie du auf diese Zugreifen möchtest. Falls du dir darüber im klaren bist, kannst du dann eine Datenbank wählen die genau darauf optimiert ist. Die ist dann darin besser dafür schlechter in anderen Dingen oder unterstützt bestimmte Dinge überhaupt nicht. Wenn dir also Schema und Zugriff nicht wirklich klar sind oder sich die mal ändern, könntest du dann an die Grenzen der Datenbank stoßen und hast möglicherweise ein riesiges Problem.

RDBMS wie Postgres sind eher allrounder, nicht unbedingt schnell und nicht in allem sonderlich gut aber so flexibel dass sich fast jedes Problem (auch die die du vielleicht erst in Zukunft haben wirst) damit lösen lässt.

Darüberhinaus sollte dir bewusst sein dass Datenbanken komplex in der Benutzung und Administration sind. Besser du wählst eine Datenbank die du benutzen und administrieren kannst auch wenn sie vielleicht nicht ganz optimal ist.

In deinem Fall hängt viel davon ab wieviele Daten du hast und wie du auf die Zugreifen willst. Du hast im Prinzip eine Timeseries und je nachdem wie groß die wird und wie die Zugriffe aussehen, kann es schon sinnvoll sein eine Datenbank zu nutzen die dafür spezialisiert ist.

Falls du Postgres nutzen willst würde ich empfehlen dich mit Partitioning (auch relevant: pg_partman) zu beschäftigen. Ein Blick auf TimescaleDB könnte auch interessant sein, dass ist eine Extension die Postgres um Funktionen erweitert die für Timeseries interessant sind.
Tholo
User
Beiträge: 177
Registriert: Sonntag 7. Januar 2018, 20:36

Danke euch! Dann werde ich Postgres nutzen und die extension, falls überhaupt nötig, im Auge behalten. Das erscheint mir als sehr guter Kompromiss für meinen Start.
Antworten