2016-09-14 1 views
1

Hier:löschen mein Setup eine sehr große Anzahl von Einträgen in Azure Tabellen Speicher

Ich bin ein Node.js Web App in Azure ausgeführt wird, die Azure Table Storage (Non-SQL) verwendet. Um mit Tabellenspeicher zu arbeiten, verwende ich das azure-storage npm-Modul.

Was ich versuche zu tun:

So habe ich ein System, das Ereignis für Geräte Tracking. Im Speicher setze ich meinen PartitionKey als deviceId und setze den RowKey als eventId ein.

Hinzufügen von Ereignissen ist einfach; fügen Sie sie einzeln nacheinander hinzu.

Abrufen von ihnen ist einfach mithilfe der Abfragestruktur.

Das Löschen großer Mengen von Einträgen scheint jedoch ein Schmerz zu sein. Es scheint, dass Sie nur jeweils eine Entität löschen können. Es scheint keine abfragebasierte Implementierung zu geben.

Es gibt die Option, Stapel zu verwenden, um einen großen Stapel von Löschvorgängen zu erstellen. aber ich habe gerade festgestellt, dass es eine Begrenzung von 100 Operationen pro Batch gibt.

Also versuche ich alle Ereignisse für ein einzelnes Gerät zu löschen; In meinem aktuellen Fall habe ich ungefähr 5000 Ereignisse. Um dies zu erreichen, muss ich zunächst alle meine Ereignisse mit einer GET-Anfrage abfragen (und sie mit Fortführungstoken verketten), dann in 100er-Einheiten trennen und dann 50 große Anfragen senden, um alle Einträge zu löschen ...

Die gleiche Sache in SQL würde 'xxxxxxxx' DELETE sein * WHERE deviceId =

Sicherlich muss es ein besserer Weg, als dies sein!

Antwort

3

Dasselbe in SQL * WHERE deviceId = DELETE wäre es 'xxxxxxxx'

Sicherlich ein besserer Weg, als dies sein muss!

Leider gibt es nicht :). Sie müssen die Entitäten basierend auf Ihrer Anforderung abrufen und dann löschen (entweder in Stapeln oder einzeln).

Sie können den Abrufvorgang jedoch optimieren, indem Sie nur PartitionKey und RowKey aus Ihrer Tabelle anstelle aller Attribute abrufen, da Sie nur diese beiden Attribute zum Löschen einer Entität benötigen.

+0

Gibt es keine Methode, Wildcards zu verwenden? Setze den Zeilenschlüssel als * oder etwas? Dies scheint eine lächerliche Umsetzung ihrer selbst zu sein. – Mitch

+0

Leider nicht. Ich würde jedoch ihre Entscheidung verteidigen, den Tabellenspeicher auf diese Weise zu gestalten. –

+0

Könnte ich die Gründe fragen warum? Im Moment scheint es nur eine große Unannehmlichkeit zu sein, wenn man mit großen Datenmengen arbeitet. – Mitch

Verwandte Themen