"Ora, come affronteresti il problema descritto?"
Con semplici file flat.
Ecco perché
Hai 2.000.000 di entità. Partizione in base al numero di entità:
level1= entity/10000
level2= (entity/100)%100
level3= entity%100
Ogni file di dati è level1/level2/level3/batch_of_data
È quindi possibile leggere tutti i file in una determinata parte della directory per restituire campioni per l'elaborazione.
Se qualcuno desidera un database relazionale, carica i file per un determinato entity_id in un database per il suo utilizzo.
Modifica I numeri del giorno.
-
Il
date_id
/entity_id
regola di unicità non qualcosa che deve essere gestito. È (a) banalmente imposto sui nomi dei file e (b) irrilevante per l'interrogazione. -
Il
date_id
"rollover" non significa nulla:non c'è alcuna query, quindi non è necessario rinominare nulla. Ildate_id
dovrebbe semplicemente crescere senza limiti dalla data dell'epoca. Se desideri eliminare i vecchi dati, elimina i vecchi file.
Poiché nessuna query si basa su date_id
, non c'è mai bisogno di farne nulla. Può essere il nome del file per tutto ciò che conta.
Per includere il date_id
nel set di risultati, scrivilo nel file con gli altri quattro attributi che si trovano in ogni riga del file.
Modifica su apri/chiudi
Per scrivere, devi lasciare i file aperti. Fai svuotamenti periodici (o chiudi/riapri) per assicurarti che le cose vadano davvero sul disco.
Hai due scelte per l'architettura del tuo scrittore.
-
Avere un unico processo di "scrittore" che consolidi i dati dalle varie fonti. Ciò è utile se le query sono relativamente frequenti. Paghi per unire i dati al momento della scrittura.
-
Avere più file aperti contemporaneamente per la scrittura. Durante la query, unisci questi file in un unico risultato. Questo è utile se le query sono relativamente rare. Paghi per l'unione dei dati al momento della query.