Mysql
 sql >> Database >  >> RDS >> Mysql

Memorizzazione efficiente di 7.300.000.000 di righe

"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.

  1. 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.

  2. Il date_id "rollover" non significa nulla:non c'è alcuna query, quindi non è necessario rinominare nulla. Il date_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.

  1. 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.

  2. 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.