2012-11-15 6 views
5

Ich denke über große Verbesserung von Azure Table Storage nach. Ist es möglich, eine Abfrage an den Tabellenspeicher mit einer bestimmten Operation wie "Inkrementieren des Entitätsfelds [Name] nach [Wert], wobei [PartitionKey = SomestingPK] und [RowKey = somethingRK]" übergeben werden?Windows Azure-Tabellenspeicher Int-Feldinkrement

@smarx ist diese Funktion verfügbar?

+0

http://StackOverflow.com/a/11853335/67824 –

Antwort

0

Dies ist vergleichbar mit UPDATE Abfrage von MySQL und derzeit ist es nicht möglich, in Azure Table Storage durchzuführen. Nicht sicher, ob dies in einem solchen Datenbanktyp möglich ist, da Sie zuerst die gesamte Entität abrufen, die gewünschten Felder aktualisieren und in der Datenbank speichern müssen.

+0

Ich weiß, dass dies jetzt nicht möglich ist. Ich möchte meinen Vorschlag mit Entwicklern teilen :) –

1

Ja, das ist möglich - aber vielleicht nicht genau so, wie Sie denken. Sie suchen nach dem MERGE operation. Um sie zu verwenden, müssen Sie die Entität (d. H. Den Partitionsschlüssel und den Zeilenschlüssel der Entität) kennen, auf die Sie abzielen. Sie müssen die Entität nicht abrufen, um sie zu aktualisieren. Sie müssen jedoch jede Entität entweder per REST-Aufruf oder mithilfe der Batch-Funktionen (mit einigen Einschränkungen) spezifisch adressieren.

+3

Er sucht nach einem atomaren Zuwachs. So etwas gibt es heute nicht. – smarx

+0

Aber ich kann Inkrementoperation nicht verwenden. Nur eingestellt. Ich schlage vor, dass es nicht unmöglich ist, Entitäten im Tabellenspeicher zu aktualisieren. Diese Operation ist jedoch nicht über die REST-API verfügbar. –

4

Sie können dies entweder mit Tabellen- oder Seitenspeicher mit aktiviertem ETAG-Tracking erreichen. Ich verwende diese Technik, um einen Identity-Wert für jeden Eintrag in Azure Table zu erstellen. Die Idee geht so:

  • den Wert Lesen der Seite Blob, ETAG-Tracking aktiviert lassen

  • Erhöhungsschritte der abgerufene Wert

  • POST der abgerufene Wert, und wenn es eine ETAG Konflikt, wiederholen Sie die gesamte Operation erneut frisch. Verwenden Sie hier möglicherweise einen exponentiellen Backoff-Algorithmus, um eine Überladung des Zielcontainers oder der Zielpartition zu verhindern.

+1

Ich nenne diesen Ansatz als "Kostyil". Aber ich möchte native Implementierung von atomaren Inkrement in Tabellenspeicher verwenden. –