"Nun - wie würden Sie das beschriebene Problem angehen?"
Mit einfachen Flatfiles.
Hier ist der Grund
Sie haben 2.000.000 Entitäten. Partition basierend auf der Entitätsnummer:
level1= entity/10000
level2= (entity/100)%100
level3= entity%100
Jede Datendatei ist level1/level2/level3/batch_of_data
Sie können dann alle Dateien in einem bestimmten Teil des Verzeichnisses lesen, um Proben zur Verarbeitung zurückzugeben.
Wenn jemand eine relationale Datenbank haben möchte, dann laden Sie Dateien für eine gegebene Entitäts-ID in eine Datenbank für ihre Verwendung.
Bearbeiten Auf Tageszahlen.
-
Die
date_id
/entity_id
Eindeutigkeitsregel ist nicht etwas, das behandelt werden muss. Es ist (a) trivialerweise den Dateinamen auferlegt und (b) für Abfragen irrelevant. -
Die
date_id
"Rollover" bedeutet nichts - es gibt keine Abfrage, also müssen Sie nichts umbenennen. Diedate_id
sollte einfach unbegrenzt aus dem Epochendatum wachsen. Wenn Sie alte Daten löschen möchten, löschen Sie die alten Dateien.
Da sich keine Abfrage auf date_id
stützt , es muss nie etwas damit gemacht werden. Es kann der Dateiname für alles sein, was darauf ankommt.
Zum Einschließen der date_id
Schreiben Sie es in der Ergebnismenge in die Datei mit den anderen vier Attributen, die sich in jeder Zeile der Datei befinden.
Bearbeiten beim Öffnen/Schließen
Zum Schreiben müssen Sie die Datei(en) geöffnet lassen. Sie führen regelmäßige Leerungen (oder schließen/öffnen) durch, um sicherzustellen, dass die Daten wirklich auf die Festplatte gehen.
Sie haben zwei Möglichkeiten für die Architektur Ihres Schreibers.
-
Haben Sie einen einzigen „Writer“-Prozess, der die Daten aus den verschiedenen Quellen konsolidiert. Dies ist bei relativ häufigen Abfragen hilfreich. Sie zahlen für das Zusammenführen der Daten zum Zeitpunkt des Schreibens.
-
Mehrere Dateien gleichzeitig zum Schreiben geöffnet haben. Führen Sie diese Dateien beim Abfragen zu einem einzigen Ergebnis zusammen. Dies ist hilfreich, da Abfragen relativ selten sind. Sie zahlen für die Zusammenführung der Daten zum Zeitpunkt der Abfrage.