Mein Unternehmen wird in den Besitz eines Datensatzes kommen, der aus etwa 200 bis 300 Millionen Datensätzen besteht. Das Quellmaterial ist im CSV-Format und hat eine Größe von etwa 150 GB im unkomprimierten Zustand. Wir müssten die Daten zunächst laden und dann täglich etwa 1 % der Datensätze aktualisieren. Wir würden auch gerne den Verlauf jedes Datensatzes speichern können.
Wir verwenden derzeit MySQL und es scheint, dass einige Leute MySQL und PostgreSQL für Datenbanken dieser Größe verwenden, aber ich sehe nicht viele konkrete Informationen über ihre Erfahrungen.
Wir könnten definitiv ohne die Normalisierung der Daten auskommen und ich kann mir vorstellen, die Informationen auf viele Server zu verteilen. Wie wäre es mit MongoDB oder einem anderen nicht traditionellen Datenspeicher?
Hat jemand eine Idee, ob ein solches Unterfangen machbar ist? Ich bin für jede Hilfe dankbar, die Sie mir geben können.
Antwort1
Meine Erfahrung mit Datensätzen dieser Größe beschränkt sich auf MSSQL, aber es kann Daten dieser Größe auf jeden Fall verarbeiten.
Meine erste Sorge ist die Größe der Daten. 300 Millionen Datensätze bei 150 GB sind etwa 500 KB pro Zeile – und das ist eine große Zeile. Eine sehr, sehr große Zeile. Wenn Sie auf die 3. Normalform normalisieren können, könnte dies erheblich helfen (vorausgesetzt, es gibt Daten, die normalisiert werden können). Wenn Sie nicht normalisieren (und nur eine einzige, riesige Tabelle haben), ist eine Engine, die ISAM unterstützt, schneller als ein RDBMS. MySQL im ISAM-Modus ist also die offensichtliche Wahl gegenüber MSSQL (leider habe ich keine Erfahrung mit Postgre oder Mongo).
Allerdings kann MSSQL problemlos mit einer Tabelle dieser Größe umgehen. Es kann die Daten so partitionieren, dass verschiedene Teile auf unterschiedlichen Festplatten gespeichert werden. Sie können also 1 % Ihrer aktualisierten Daten auf einer schnellen Festplatte speichern und den Rest auf einer langsameren Festplatte, wenn das Budget ein Problem darstellt. Wenn Ihr DBMS dies unterstützt, kann dies eine sinnvolle Lösung sein.
Nur als Referenz: Ich habe einmal eine Datenbank verwaltet, die etwa 200 Millionen Zeilen in einer einzigen Tabelle hatte (aber die Tabelle war nur 20 GB groß) und mit einer intelligenten Indizierung wurden die Abfragezeiten immer noch im Millisekundenbereich gemessen. Dies wurde auf die 3. Normalform normalisiert, sodass auch viele LOJs zum Abrufen zugehöriger Daten erforderlich waren.
Antwort2
Die meisten Datenbanken können die Speicherung solch großer Mengen problemlos bewältigen. Es hängt wirklich davon ab, was Sie mit den Daten machen möchten, nachdem Sie sie geladen haben. Handelt es sich um eine Transaktionsdatenbank, sodass sie häufig abgefragt und aktualisiert wird? Oder dient sie eher der Berichterstattung und liefert täglich neue Informationen aus dem Transaktionssystem?