Supponendo che i dati siano immutabili e considerate le dimensioni, è possibile considerare Amazon Redshift; è scritto per soluzioni di reporting di dimensioni petabyte.
In Dynamo, posso pensare ad alcuni progetti validi. Nel primo caso, è possibile utilizzare una tabella, con un hash composto/chiave di intervallo (entrambe le stringhe). La chiave hash sarebbe il nome della serie temporale, la chiave dell'intervallo sarebbe il timestamp come una stringa ISO8601 (che ha la proprietà piacevole che l'ordinamento alfabetico è anche l'ordinamento cronologico) e ci sarebbe un attributo extra su ciascun elemento; un valore'. Questo ti dà la possibilità di selezionare tutto da una serie temporale (Query su uguaglianza hashKey) e un sottoinsieme di una serie temporale (Query su equanimità hashKey e clausola rangeKey BETWEEN). Tuttavia, il tuo problema principale è il problema "hotspot": internamente, Dynamo suddivide i tuoi dati da hashKey e disperderà la tua ProvisionedReadCapacity su tutte le tue partizioni. Quindi potresti avere 1000 KB di letture al secondo, ma se hai 100 partizioni, allora hai solo 10 KB al secondo per ogni partizione, e leggendo tutti i dati da una singola serie temporale (singolo hashKey) colpirà solo una partizione. Quindi potresti pensare che i tuoi 1000 KB di letture ti danno 1 MB al secondo, ma se hai 10 MB memorizzati potrebbe richiedere molto più tempo per leggerlo, dato che la tua singola partizione ti rallenterà molto più pesantemente.
Sul lato positivo, DynamoDB ha un limite superiore estremamente elevato ma costoso per il ridimensionamento; se volessi, potresti pagare per 100.000 unità di capacità di lettura e avere tempi di risposta inferiori a tutti questi dati.
Un altro progetto teorico sarebbe quello di memorizzare tutte le serie temporali in una tabella separata, ma non penso che DynamoDB sia destinato a ridimensionare a milioni di tabelle, quindi questo è probabilmente un no-go.
Si potrebbe provare a distribuire le serie temporali su 10 tabelle in cui i dati "letti" nella tabella 1, "quasi mai letti i dati" nella tabella 10 e tutti gli altri dati nel mezzo. Ciò consentirebbe di "giocare" le regole di limitazione della velocità effettiva/partizione approvate, ma con un alto grado di complessità nella progettazione. Nel complesso, probabilmente non ne vale la pena; dove hai nuove serie temporali? Come ricordi dove sono tutti? Come muovi una serie temporale?
Penso che DynamoDB supporti alcuni "scoppi" interni su questi tipi di letture dalla mia esperienza, ed è possibile che i miei numeri siano disattivati e otterrete prestazioni adeguate. Tuttavia il mio verdetto è di esaminare Redshift.
fonte
2013-08-13 18:42:13
Cosa hai usato? – Hugo
quale design hai utilizzato? – Narayan