Angenommen, Ihre Daten sind unveränderlich und die Größe gegeben, möchten Sie möglicherweise Amazon Redshift betrachten; Es ist für Petabyte-große Berichtslösungen geschrieben.
In Dynamo kann ich mir ein paar brauchbare Designs vorstellen. Im ersten Fall könnten Sie eine Tabelle mit einem zusammengesetzten Hash-/Bereichsschlüssel (beide Zeichenfolgen) verwenden. Der Hash-Schlüssel wäre der Zeitreihenname, der Bereichsschlüssel wäre der Zeitstempel als eine ISO8601-Zeichenfolge (die die angenehme Eigenschaft hat, dass die alphabetische Reihenfolge auch eine chronologische Reihenfolge ist), und es würde ein zusätzliches Attribut für jedes Element geben; ein Wert'. Dies gibt Ihnen die Möglichkeit, alles aus einer Zeitreihe (Abfrage auf HashKey-Gleichheit) und einer Teilmenge einer Zeitreihe (Abfrage auf HashKey-Gleichheit und rangeKey-BETWEEN-Klausel) auszuwählen. Ihr Hauptproblem ist jedoch das "Hotspot" -Problem: intern partitioniert Dynamo Ihre Daten nach HashKey und verteilt Ihre ProvisionedReadCapacity auf alle Ihre Partitionen. Sie haben also vielleicht 1000 KB Lesezugriffe pro Sekunde, aber wenn Sie 100 Partitionen haben, dann haben Sie nur 10 KB pro Sekunde für jede Partition, und das Lesen aller Daten einer einzelnen Zeitreihe (single HashKey) trifft nur eine Partition. Sie können also denken, dass Ihre 1000 KB Lesevorgänge 1 MB pro Sekunde ergeben, aber wenn Sie 10 MB gespeichert haben, kann es viel länger dauern, sie zu lesen, da Ihre einzelne Partition Sie viel stärker drosseln wird.
Auf der Oberseite hat DynamoDB eine extrem hohe, aber kostspielige Obergrenze für die Skalierung; Wenn Sie möchten, können Sie 100.000 Read Capacity-Einheiten bezahlen und haben Antwortzeiten für alle Daten in Sekundenbruchteilen.
Ein anderes theoretisches Design wäre, jede Zeitreihe in einer separaten Tabelle zu speichern, aber ich denke nicht, dass DynamoDB auf Millionen von Tabellen skaliert werden soll, also ist dies wahrscheinlich ein No-Go.
Sie könnten versuchen, Ihre Zeitreihe über 10 Tabellen zu verteilen, wo "hoch gelesene" Daten in Tabelle 1, "fast nie gelesene Daten" in Tabelle 10 und alle anderen Daten dazwischen liegen. Auf diese Weise können Sie die Regeln für die Durchsatz- und Partitionsdrosselung "ausspielen", allerdings mit einem hohen Grad an Komplexität in Ihrem Design. Insgesamt ist es wahrscheinlich nicht wert; Wo machst du neue Zeitreihen? Wie erinnerst du dich, wo sie alle sind? Wie verschiebst du eine Zeitreihe?
Ich denke DynamoDB unterstützt einige interne "Bursting" auf diese Art von liest aus meiner eigenen Erfahrung, und es ist möglich, meine Zahlen sind aus, und Sie werden eine angemessene Leistung erhalten. Mein Urteil lautet jedoch Redshift.
Was haben Sie am Ende benutzt? – Hugo
Welches Design hast du am Ende benutzt? – Narayan