Ho eseguito alcuni test di carico di AWS Redshift per una nuova applicazione e ho notato che ha un limite di colonna di 1600 per tabella. Peggio ancora, le query rallentano all'aumentare del numero di colonne in una tabella.Limite colonna AWS Redshift?
Ciò che non ha senso qui è che Redshift dovrebbe essere un database di archivio di colonne e non dovrebbe in teoria essere un hit di I/O da colonne che non sono selezionate in una particolare clausola where.
In particolare, quando TableName è 1600 colonne, ho trovato che la query sottostante è sostanzialmente più lenta di se TableName fosse, ad esempio, 1000 colonne e lo stesso numero di righe. Man mano che il numero di colonne diminuisce, le prestazioni migliorano.
SELECT COUNT(1) FROM TableName
WHERE ColumnName LIKE '%foo%'
I miei tre domande sono:
- Qual è il problema? Perché Redshift ha questa limitazione se afferma di essere un negozio di colonne?
- Qualche suggerimento per aggirare questa limitazione? Le unioni di più tabelle più piccole sembrano eventualmente approssimare le prestazioni di una singola tabella. Non ho provato a ruotare i dati.
- Qualcuno ha un suggerimento per una veloce, in tempo reale prestazioni, database di archivio di colonne scalabile orizzontalmente che non ha le limitazioni di cui sopra? Tutto quello che stiamo facendo è contare le query con semplici restrizioni dove circa 10M (righe) x 2500 (colonne) dati.
Se sono necessarie più di 1600 colonne, è molto probabile che i dati siano scarsamente strutturati. Dovresti cercare le opportunità per normalizzare i tuoi dati * (come dici tu, in più tabelle) *. La limitazione del numero di colonne è semplicemente un fattore del motore di ottimizzazione e il numero di riferimenti memorizzati, probabilmente un retaggio della versione di PostGreSQL da cui proviene. Il limite di colonna e se è colonnare sono completamente indipendenti. Per quanto riguarda il calo delle prestazioni, non l'ho mai visto prima. La tua domanda è esattamente come sopra? – MatBailie
Oh, e se hai a che fare solo con 10M x 2,5k, non dovresti aver bisogno di RedShift. Userei PostGreSQL per qualcosa di così piccolo. Sto usando RedShift per trilioni di righe distribuite di dozzine/centinaia di nodi. – MatBailie
@MatBailie, le prestazioni devono essere sottocosto, motivo per cui abbiamo deciso di utilizzare Redshift. Sono abbastanza sicuro che uno dei principali vantaggi di un database di colonne è di poter estrarre qualsiasi colonna arbitraria senza un hit associato ad altre colonne. Puoi andare direttamente alle colonne di dati di cui hai bisogno, caricarle e il gioco è fatto. Sei completamente isolato dalle altre colonne. Infine, no, i miei dati sono ben strutturati. Ho letteralmente quel numero di attributi completamente indipendenti che mi piacerebbe interrogare. Pensa a un caso d'uso di segmentazione. Grazie. – mellocello