Datenbank für ein Projekt auswählen

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
aaron
User
Beiträge: 92
Registriert: Donnerstag 1. Dezember 2016, 23:10

Ich möchte eine Datenbank für ein Projekt auswählen. Ich selbst hatte es bisher nur mit SQL Datenbanken wie mysql und Postgesql zu tun. Jetzt ist die Anzahl die Datenmenge so groß, daß ich bezweifele, daß mysql ausreichend ist. Das Speichern in der Datenbanktabelle wird ja noch gehen. Fraglich ist nur, ob es bei 5,5 Terabyte noch möglich ist Abfragen vernünftig zu generieren. Der wöchentliche Datenzuwachs beträgt 4,4 Gigabyte. Das macht im Jahr 228,8 Gigabyte.

Ich habe eine große Anzahl von csv.gz Dateien, diese sollen in eine Datenbank importiert werden. Eine komprimierte csv.gz Datei ist 8,6 Megabyte groß. Entpacke ich diese, dann ist die Datei ca. 110 Megabyte groß. Ich gehe davon aus, daß der Platzbedarf ungefähr so groß ist wie die der csv Dateien. In der Datenbank wird es nur eine Tabelle mit 3 Spalten geben.

Ich habe einen IBM Server, der auch ein Raid hat. Dieser kann diese Datenmenge aufnehmen. Vielleicht ist es aber auch eine gute Idee die Daten bei Amazon in die Cloud zu schieben?

Wer von Euch hat so etwas in der Größe schon einmal aufgebaut?
Boa
User
Beiträge: 190
Registriert: Sonntag 25. Januar 2009, 12:34

Hallo aaron,

Wenn du den Hintergrund bzw. die genaue Problemstellung erläuterst findet sich möglicherweise ein vernünftiger Lösungsansatz. Außerdem ist es für mich als Forenteilnehmer auch spannend zu erfahren womit sich andere Programmierer auseinandersetzen (müssen).
aaron hat geschrieben:Ich möchte eine Datenbank für ein Projekt auswählen. Ich selbst hatte es bisher nur mit SQL Datenbanken wie mysql und Postgesql zu tun. Jetzt ist die Anzahl die Datenmenge so groß, daß ich bezweifele, daß mysql ausreichend ist. Das Speichern in der Datenbanktabelle wird ja noch gehen. Fraglich ist nur, ob es bei 5,5 Terabyte noch möglich ist Abfragen vernünftig zu generieren. Der wöchentliche Datenzuwachs beträgt 4,4 Gigabyte. Das macht im Jahr 228,8 Gigabyte.
Abfragen können auch für große Datenmengen vernünftig generiert werden. Im Terabyte Bereich kann man anfangen sich nach NoSQL Datenbanken als Alternative zu befassen, allerdings kommt es auf den Anwendungsfall an. Je nach Anfrage kann eine relationale Datenbank völlig ausreichen. Im Normal Fall übernimmt die Datenbank das Generieren vernünftiger Abfragen. In seltenen Fällen (wenn es tatsächlich sichtbar langsam ist) muss man selbst Hand anlegen.
aaron hat geschrieben: Ich habe eine große Anzahl von csv.gz Dateien, diese sollen in eine Datenbank importiert werden. Eine komprimierte csv.gz Datei ist 8,6 Megabyte groß. Entpacke ich diese, dann ist die Datei ca. 110 Megabyte groß. Ich gehe davon aus, daß der Platzbedarf ungefähr so groß ist wie die der csv Dateien. In der Datenbank wird es nur eine Tabelle mit 3 Spalten geben.
Abhängig von der Datenbank lassen sich die Daten (transparent) komprimiert ablegen, bzw. in komprimierten Tabellen. Damit wäre die Datenbank bereits um den Faktor 10 kleiner, wenn ich es richtig verstehe. Das _kann_ sich nachteilig auf die Geschwindigkeit auswirken. Je nach Anfrage kann es aber sogar schneller werden.
aaron hat geschrieben: Ich habe einen IBM Server, der auch ein Raid hat. Dieser kann diese Datenmenge aufnehmen. Vielleicht ist es aber auch eine gute Idee die Daten bei Amazon in die Cloud zu schieben?
Wenn du dich nicht um Sicherheit sorgen musst und deine Bandbreite hoch genug ist, ist die Cloud eine Alternative. Soweit ich weiß kannst du an Amazon eine Festplatte mit deinen Daten schicken. Das geht bei deinen Datenmengen deutlich schneller als über das Netz. Je nachdem profitierst du dadurch von den angebotenen Services. Bedenke aber, dass es schwierig (lies: langsam und teuer) werden könnte die Daten umzuziehen, wenn dir Amazon nicht mehr gefällt. Außerdem solltest du die Kosten für Datentransfer und Verarbeitung im Auge behalten. Diese lassen sich schwer abschätzen, insbesondere da du noch keine konkrete Lösung für dein Problem hast und ggf. noch Mal völlig umplanen musst.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Also erstmal würde ich dir empfehlen Ruhe zu bewahren. Je nachdem für Queries du laufen lässt und was für Indize du hast, fallen 100-200GB mehr noch nichtmal auf. Du hast also jede Menge Zeit dich ausführlich mit dem Problem zu beschäftigen.

Was die Queries angeht hängt viel davon ab was das für Daten sind, wie die sich partitionieren lassen und was sich davon die Queries tatsächlich anschauen. Schauen sich die Queries z.B. in alle Regel nur die Daten der letzten X Stunden/Tage/Wochen lässt sich sowas recht leicht optimieren.
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

bzgl. MySQL: es ist ja nicht so, dass ich ein großer MySQL Fan wäre, aber auch MySQL ist für "große" Datenmengen tauglich, so wie auch PostgreSQL. Es gibt ja auch "große" Firmen, die MySQL nutzen, wie z.B. AFAIK Twitter und Pintrest.

Du solltest halt auch mal in Ruhe überlegen, wie viele Jahre die Datenmenge wächst. Aktuell wärst du nach 4 Jahren bei 1 TB Daten - das ist bei den aktuellen Festplattengrößen ja immer noch moderat. Wenn die Datenmenge stärker wächst, brauchst du ein DB-System, das horizontal skaliert. Kann AFAIK MySQL genauso wie PostgreSQL genau wie viele NoSQL System.

Ob die ein Blick auf eine NoSQL DB wie Cassandra oder MongoDB werfen solltest hängt davon ab, die wie Daten organisiert sind.

Bei Amazon müsstest du mal prüfen, was da an Kosten anfällt. Die richten sich ja nach verbrauchtem Speicherplatz und Anzahl der Queries.

Gruß, noisefloor
aaron
User
Beiträge: 92
Registriert: Donnerstag 1. Dezember 2016, 23:10

noisefloor hat geschrieben:Hallo,

bzgl. MySQL: es ist ja nicht so, dass ich ein großer MySQL Fan wäre, aber auch MySQL ist für "große" Datenmengen tauglich, so wie auch PostgreSQL. Es gibt ja auch "große" Firmen, die MySQL nutzen, wie z.B. AFAIK Twitter und Pintrest.

Du solltest halt auch mal in Ruhe überlegen, wie viele Jahre die Datenmenge wächst. Aktuell wärst du nach 4 Jahren bei 1 TB Daten - das ist bei den aktuellen Festplattengrößen ja immer noch moderat. Wenn die Datenmenge stärker wächst, brauchst du ein DB-System, das horizontal skaliert. Kann AFAIK MySQL genauso wie PostgreSQL genau wie viele NoSQL System.

Ob die ein Blick auf eine NoSQL DB wie Cassandra oder MongoDB werfen solltest hängt davon ab, die wie Daten organisiert sind.

Bei Amazon müsstest du mal prüfen, was da an Kosten anfällt. Die richten sich ja nach verbrauchtem Speicherplatz und Anzahl der Queries.

Gruß, noisefloor
Ich werde die ersten Versuche mit mySQL und PostgreSQL machen. Mit Cassandra oder MongoDB habe ich bisher noch nicht gearbeitet. Da ich genug Server als Spielzeuge zur Verfügung habe, werde ich mir die NoSQL Systeme auch noch ansehen. Jetzt werde ich versuchen die Daten mithilfe eines Python Scriptes in die Datenbanken zu bekommen.
Hier meine Github Repo https://github.com/joergklein/Datawarehouse.git
Kritik, Mithilfe, Anregungen sind sehr erwünscht und willkommen.
Boa
User
Beiträge: 190
Registriert: Sonntag 25. Januar 2009, 12:34

@aaron: Anscheinend geht es dir um die Analyse von Wechselkursen. Mir sind die Ausmaße deines Projektes nicht ganz klar; Welche Resourcen/Budget hast du zur Verfügung und was genau willst du erreichen? Oder handelt es sich doch eher um ein Hobby Projekt?
Um eine gute Empfehlung für die Datenablage geben zu können müsstest du genau erklären was du analysieren möchtest, bzw. ob die Abfragen überhaupt im Vorhinein feststehen, wie schnell das gehen soll (Durchsatz/Reaktionszeit) und wie viele Abfragen parallel gestellt werden.
Im Endeffekt gilt, je genauer du sagen kannst wie die Abfragen aussehen, desto besser kann man die Datenablage draufhin optimieren.
Vielleicht hilft es wenn du dir ein paar konkrete Abfragen ausdenkst.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

noisefloor hat geschrieben:bzgl. MySQL: es ist ja nicht so, dass ich ein großer MySQL Fan wäre, aber auch MySQL ist für "große" Datenmengen tauglich, so wie auch PostgreSQL. Es gibt ja auch "große" Firmen, die MySQL nutzen, wie z.B. AFAIK Twitter und Pinterest.
Firmen dieser Größe werden so ziemlich jede Datenbank irgendwo nutzen oder zumindest mal ausprobiert haben. Daraus lassen sich keinerlei Aussagen über die Fähigkeiten oder Qualität einer Datenbank machen. Allein schon deswegen weil die sicherlich nicht alles in einer einzelnen Datenbank speichern.

Darüberhinaus stellt sich dann auch immer die Frage was es überhaupt heisst eine Datenbank zu nutzen. Postgres nutzen kann alles bedeuten von du hast eine einzelne Postgres Instanz irgendwo laufen bis hin du hast einen Citus Cluster oder einen HA Cluster aus mehreren Spilos.
Antworten