Tabella di partizionamento per ID aggregato per l'efficiente creazione di eventi in RDBMS

0

I miei eventi sono archiviati in MySQL e sto raggiungendo un punto in cui ho decine di milioni di righe e le cose stanno iniziando a diventare lente quando si estrae un aggregato

Ho letto di "partizionamento della tabella" e mi chiedevo se fosse una buona opzione per archiviare i miei eventi aggregati, dal momento che un aggregato è solo un flusso di eventi, ogni aggregato avrebbe la propria partizione.

Il mio dubbio è, ho ancora bisogno di un indice sull'ID aggregato se sto andando alla partizione anche dall'ID aggregato? Avete mai usato il "partizionamento del tavolo" per risolvere questo problema?

    
posta lucaswxp 05.07.2018 - 16:35
fonte

1 risposta

1

MySQL è un limite al numero di partizioni è possibile avere su un tavolo, che credo sia attualmente 8192. Pertanto, può essere poco pratico di avere una partizione separata per ogni ID di aggregazione, come si sarebbe probabilmente a corto di partizioni molto velocemente.

Quando si modifica la tabella, è necessario fornire una funzione di partizionamento che indichi al database come distribuire i dati nelle partizioni. Se si desidera utilizzare una sottostringa dell'ID aggregato per determinare la partizione, è possibile utilizzare una funzione PARTITION BY RANGE in cui si definisce un insieme fisso di partizioni basato sui valori, come descritto in questa risposta . Personalmente, probabilmente utilizzerei PARTITION BY HASH o PARTITION BY KEY in modo da ottenere una distribuzione uniforme dei dati nelle partizioni e puoi definire un numero arbitrario di partizioni. Ciò consentirà anche di aggiungere facilmente più partizioni in seguito. Puoi vedere un esempio di questa tecnica descritta qui .

    
risposta data 05.07.2018 - 20:00
fonte

Leggi altre domande sui tag