Wie Martin vorschlägt, ist die Verwendung eines Zeitstempels als Partitionsschlüssel fast sicher nicht das, was Sie tun möchten.
Partitionen sind die Skalierungseinheit im Azure-Tabellenspeicher und repräsentieren mehr oder weniger die physische Segmentierung Ihrer Daten. Sie sind eine Skalierbarkeitsoptimierung, die es Ihnen ermöglicht, "Hardware" auf das Problem zu werfen, immer mehr Daten zu speichern, während akzeptable Antwortzeiten beibehalten werden (etwas, das traditionell schwer im Datenspeicher ist). Sie definieren die Partitionen in Ihren Daten, indem Sie jeder Zeile Partitionsschlüssel zuweisen. Es ist fast nie wünschenswert, dass jede Zeile in einer eigenen Partition lebt.
In ATS wird der Zeilenschlüssel zu Ihrem eindeutigen Schlüssel innerhalb einer bestimmten Partition. Die Kombination aus Partitionsschlüssel + Zeilenschlüssel ist also der eindeutige Schlüssel in der gesamten ATS-Tabelle.
Es gibt viele Ratschläge für die Auswahl eines gültigen Partitionsschlüssels und Zeilenschlüssels ... von denen keiner generalisiert ist. Dies hängt von der Art Ihrer Daten, Ihren erwarteten Abfragemustern usw. ab.
Wählen Sie einen Partitionsschlüssel, der Ihre Daten in einer angemessen verteilten "Gruppe von Buckets" zusammenfasst. Wenn alle Dinge gleich sind, wenn Sie 1 Million Zeilen in Ihrem Tisch haben, ist es oft sinnvoll, 10 Eimer mit je 100.000 Reihen zu haben ... oder vielleicht 100 Eimer mit jeweils 10.000 Reihen. Zur Abfragezeit müssen Sie die Partition (en) auswählen, die Sie abfragen, sodass die Anzahl der Buckets für Sie von Bedeutung sein kann. "Buckets" entsprechen häufig einem natürlichen Segmentierungskonzept in Ihrer Domäne ... einem Bucket, um jeden US-Bundesstaat zu repräsentieren, oder einem Bucket, um jede Abteilung in Ihrem Unternehmen usw. darzustellen. Beachten Sie, dass es nicht notwendig (oder oft möglich) ist, perfekt zu haben verteilte Eimer ... so nah wie möglich, mit vertretbarem Aufwand.
Ein Beispiel für eine absichtlich ungleiche Verteilung ist, wenn Sie Abfragemuster nach Bucket variieren möchten ... Bucket A erhält viele billige, schnelle Abfragen, Bucket B weniger, teurere Abfragen usw. Oder Vielleicht bleiben die Daten des Buckets A statisch, während sich Daten des Buckets B häufig ändern. Dies kann auch mit mehreren Tabellen erreicht werden ... also gibt es keine "one size fits all" Antwort.
Angesichts der begrenzten Kenntnisse, die wir von Ihrem Problem haben, mag ich Martins Ratschlag, eine Zeitspanne als Ihren Partitionsschlüssel zu verwenden. Kleine Spannen führen zu vielen Partitionen und machen (unter anderem) Abfragen, die mehrere Zeitspannen nutzen, relativ teuer. Größere Spannen führen zu geringeren Aggregationskosten über Spannen hinweg, führen jedoch zu größeren Partitionen und somit zu teureren Abfragen innerhalb einer Partition (außerdem wird die Identifizierung eines geeigneten Zeilenschlüssels potenziell schwieriger).
Am Ende werden Sie wahrscheinlich mit ein paar Optionen experimentieren müssen, um den am besten geeigneten für Ihre Daten und beabsichtigten Abfragen zu finden.
Ein weiterer Ratschlag ... scheuen Sie sich nicht, Daten in mehreren Datenspeichern zu duplizieren, um sie an unterschiedlichste Abfragetypen anzupassen. Nicht jede Abfrage funktioniert effektiv gegen eine einzelne Schema- oder Speicherkonfiguration. Der Aufwand, der zum Synchronisieren von Daten zwischen Speichern erforderlich ist, ist möglicherweise geringer als die erforderliche Biegeabfragetechnologie X.
more on Partition and Row key choices
also here
Best of luck!
Die Auswahl von D18 würde mich verwirren, denn wenn Ihre Daten nicht auf ~ 300AD zurückgehen, entspricht dies dem Standard ToString(), der G19 verwendet. Ich empfehle die Verwendung von D19, wenn die Leute es sehen, können sie denken "ah, weil Longs auf 19 Ziffern begrenzt sind." – user1676558
@ user1676558: Allerdings werden Sie höchstwahrscheinlich keine Ticks als Partitionsschlüssel verwenden, obwohl es in der Frage steht.Wenn Sie beispielsweise Stunden als Partitionsschlüssel verwenden möchten, ist der resultierende Schlüssel eine 8-stellige Ganzzahl. Mit 'D8' als Format wird sichergestellt, dass Zahlen mit weniger als 8 Ziffern immer noch einen 8-stelligen Partitionsschlüssel mit vorangestellten Nullen enthalten. Sie haben jedoch recht, dass Sie zu irgendeinem vernünftigen Termin höchstwahrscheinlich nur 'ToString()' verwenden können, da alle Daten in nicht zu ferner Zukunft oder Vergangenheit immer 8 Ziffern für Stunden oder 18 Ziffern für Ticks usw. haben. Mein 'D #' soll eine allgemeine Lösung sein. –