Die Antwort von Matt Sheppard ist großartig (mod up), aber ich würde diese Faktoren berücksichtigen, wenn ich über eine Spindel nachdenke:
- Struktur: Wird sie offensichtlich in Teile zerlegt, oder müssen Sie Kompromisse eingehen?
- Verwendung: Wie werden die Daten analysiert/abgerufen/abgefragt?
- Lebensdauer: Wie lange sind die Daten nützlich?
- Größe: Wie viele Daten sind vorhanden?
Ein besonderer Vorteil von CSV-Dateien gegenüber RDBMS ist, dass sie sich leicht komprimieren und auf praktisch jeden anderen Rechner übertragen lassen. Wir führen große Datenübertragungen durch, und alles ist so einfach, dass wir nur eine große CSV-Datei verwenden, die mit Tools wie rsync leicht zu skripten ist. Um die Anzahl der Wiederholungen bei großen CSV-Dateien zu reduzieren, können Sie etwas wie folgt verwenden YAML . Ich bin mir nicht sicher, ob ich etwas wie JSON oder XML speichern würde, es sei denn, Sie hätten erhebliche Anforderungen an die Beziehungen.
Was die nicht erwähnten Alternativen betrifft, sollten Sie Folgendes nicht außer Acht lassen Hadoop die eine Open-Source-Implementierung von MapReduce ist. Dies sollte gut funktionieren, wenn Sie eine TONNE von lose strukturierten Daten haben, die analysiert werden müssen, und Sie wollen in einem Szenario sein, wo Sie einfach 10 weitere Maschinen hinzufügen können, um die Datenverarbeitung zu verarbeiten.
Ich habe zum Beispiel versucht, die Leistung zu analysieren, die im Wesentlichen aus den Zeitangaben verschiedener Funktionen bestand, die auf etwa 20 Rechnern protokolliert wurden. Nachdem ich versucht hatte, alles in ein RDBMS zu packen, wurde mir klar, dass ich die Daten nicht mehr abfragen muss, sobald ich sie aggregiert habe. Außerdem sind sie für mich nur in ihrem aggregierten Format nützlich. Also behalte ich die Protokolldateien komprimiert bei mir und lasse die aggregierten Daten in einer DB.
Hinweis Ich bin es eher gewohnt, in "großen" Größen zu denken.