Frage

Jeder warnt davor, nichts anderes als Rowkey oder Partitionkey im Azure Table Storage (ATS) zu befragen, damit Sie nicht gezwungen sind, einen Tischscan zu erzielen. Für eine Weile hat mich dies gelähmt, um zu versuchen, genau die richtige PK und RK zu finden und pseudosekundäre Indizes in anderen Tabellen zu erstellen, wenn ich etwas anderes abfragen musste.

Mir fällt mir jedoch ein, dass ich üblicherweise den Scan in SQL Server einstellen würde, wenn ich angemessen dachte.

Es wird also die Frage, wie schnell ich einen Azure -Tisch telefonieren kann. Ist dies eine Konstante in Entitäten/Sekunde oder hängt es von der Datensatzgröße usw. ab.

War es hilfreich?

Lösung

Das Problem eines Tabellenscans hat mit der Überschreitung der Partitionsgrenzen zu tun. Die Leistung, die Ihnen garantiert ist, ist Explicity in der Partitionsebene. Wenn Sie einen vollständigen Tischscan ausführen, ist er a) nicht sehr effizient, b) keine Leistungspflicht hat. Dies liegt daran, dass die Partitionen selbst auf separaten Speicherknoten eingestellt sind. Wenn Sie einen Cross -Partition -Scan ausführen, verbrauchen Sie potenziell massive Mengen an Ressourcen (binden Sie gleichzeitig mehrere Knoten).

Ich glaube, dass der Effekt der Überschreitung dieser Grenzen auch zu Fortsetzungstoken führt, die zusätzliche Hin- und Rückträge zum Speichern erfordern, um die Ergebnisse abzurufen. Dies ergibt sich dann zur Reduzierung der Leistung sowie zu einer Erhöhung der Transaktionszahlen (und anschließend Kosten).

Wenn die Anzahl der Partitionen/Knoten, die Sie überqueren, ziemlich klein ist, werden Sie wahrscheinlich keine Probleme bemerken.

Aber bitte zitieren Sie mich nicht dazu. Ich bin kein Experte für Azure -Speicher. Es ist tatsächlich der Bereich von Azure, über das ich am wenigsten kennt. :P

Andere Tipps

Ich denke, Brent ist zu 100% für das Geld, aber wenn Sie immer noch das Gefühl haben, es zu versuchen, kann ich nur vorschlagen, einige Tests durchzuführen, um selbst herauszufinden. Versuchen Sie, den Partitionkey in Ihre Fragen zu geben, um das Überqueren von Partitionen zu verhindern, da dies am Ende des Tages der Performance -Killer ist.

Azure -Tabellen sind für Tischscans nicht optimiert. Das Scannen der Tabelle ist möglicherweise für einen langjährigen Hintergrundjob akzeptabel, aber ich würde es nicht tun, wenn eine schnelle Antwort erforderlich ist. Mit einer Tabelle einer angemessenen Größe müssen Sie Fortsetzungs -Token verarbeiten, wenn die Abfrage eine Partitionsgrenze erreicht oder 1K -Ergebnisse erzielt.

Das Azure Storage Team hat ein Toller Beitrag, der die Skalierbarkeitsziele erklärt. Das Durchsatzziel für eine einzelne Tabellenpartition beträgt 500 Entitäten/Sekunden. Das Gesamtziel für ein Speicherkonto beträgt 5.000 Transaktionen/Sekunden.

Die Antwort ist Pagination. Verwenden Sie das top_size - maximale Anzahl von Ergebnissen oder Aufzeichnungen in Ergebnis- in Verbindung mit next_partition_key und next_row_key Die Fortsetzungs -Token. Das macht einen signifikanten sogar faktoriellen Leistungsunterschied. Zum einen stammen Ihre Ergebnisse statistisch eher aus einer einzigen Partition. Klarte Ergebnisse zeigen, dass die Sets von dem Teile -Fortsetzungstaste und nicht nach dem Schlüssel der Zeile gruppiert werden.

Mit anderen Worten, Sie müssen auch über Ihre Benutzeroberfläche oder Ihre Systemausgabe nachdenken. Machen Sie sich nicht die Mühe, mehr als 10 bis 20 Ergebnisse maximal 50 zurückzugeben. Der Benutzer wird wahrscheinlich nicht mehr verwendet oder untersuchen.

Klingt dumm. Führen Sie eine Google -Suche nach "Hund" durch und beachten Sie, dass die Suche nur 10 Elemente zurückgibt. Nicht mehr. Die nächsten Aufzeichnungen sind für Sie verfügbar, wenn Sie sich die Mühe machen, "Weiter" zu treffen. Untersuchungen haben gezeigt, dass fast kein Benutzer über diese erste Seite hinausgeht.

das select (Rückgabe einer Teilmenge der Schlüsselwerte kann einen Unterschied machen; Zum Beispiel verwenden Sie select = "PartitionKey,RowKey" oder 'Name' Was auch immer Sie brauchen, was Sie brauchen.

"Ich glaube, dass der Effekt des Überschreitens dieser Grenzen auch zu Fortsetzungstoken führt, für die zusätzliche Hin- und Rückfahrten zur Speicherung erforderlich sind, um die Ergebnisse abzurufen. Diese Ergebnisse dann zur Reduzierung der Leistung sowie zu einer Erhöhung der Transaktionszahlen (und anschließend Kosten) . "

... ist etwas falsch. Das Fortsetzungstoken wird nicht wegen Kreuzungsgrenzen verwendet, sondern weil Azure -Tabellen nicht mehr als 1000 Ergebnisse zulassen; Daher werden die beiden Fortsetzungstoken für den nächsten Satz verwendet. Standard TOP_SIZE beträgt im Wesentlichen 1000.

Für Ihr Sehvergnügen finden Sie hier die Beschreibung für Abfragen von der Azure Python API. Andere sind ähnlich.

  '''
  Get entities in a table; includes the $filter and $select options. 

  table_name: Table to query.
  filter: 
     Optional. Filter as described at 
     http://msdn.microsoft.com/en-us/library/windowsazure/dd894031.aspx
  select: Optional. Property names to select from the entities.
  top: Optional. Maximum number of entities to return.
  next_partition_key: 
     Optional. When top is used, the next partition key is stored in
     result.x_ms_continuation['NextPartitionKey']
  next_row_key: 
     Optional. When top is used, the next partition key is stored in
     result.x_ms_continuation['NextRowKey']
  '''
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top