Derzeit verwende ich den PartitionKey, um Geräte zu unterscheiden, die Daten in Azure Table Services speichern. Ich möchte einen Viewer erstellen, der es mir erlaubt, diese Daten zu durchsuchen, aber es wäre schön, sie so strukturieren zu können, dass ich Daten "nach Gerät" oder nach PartitionKey anzeigen kann. Die Viewer-App wird keine Kenntnis davon haben, welche Geräte existieren, also wäre es großartig, wenn ich irgendwie eine Liste von verschiedenen PartionKeys in einer gegebenen Tabelle zurückbekommen könnte. Ist das möglich, oder werde ich dazu verleitet, eine Metadatentabelle zu erstellen, in die ich für jedes Gerät eine neue Zeile einfüge, und diese dann zur Abfrage verwende?
Ich glaube nicht, dass es eine Möglichkeit gibt, alle Partitionsschlüssel abzurufen. Hier ist ein cleverer Workaround: Ссылка
Um aus Avkashs Blog zu zitieren:
Ich habe weiter herausgefunden, dass es keine eingebaute API gibt, um eine Liste von zu bekommen Partitionsschlüssel, stattdessen müsste ich eine Lösung für mich selbst erstellen. Also lege ich eine einzelne Dummy-Zeile in jede Partition und wann Ich wollte eine Liste von Partitionsschlüsseln bekommen, die ich gerade nach diesen Dummies abfrage Gegenstände und sie gaben mir die Liste, die ich suchte.
Ich bin mir sicher, dass Sie das schon gesehen haben, aber für andere, die in dieser Frage vorkommen, denke ich, dass dies der beste Leitfaden für die Funktionalität des Tabellenservice ist: Ссылка mit Beispielen und Links zu den detaillierten API-Dokumenten.
Erstellen Sie eine einzelne Tabelle zum Speichern Ihrer Partitionen. Partitionieren Sie die Tabelle nach den von Ihnen verwendeten Tabellennamen und fügen Sie für jede von Ihnen erstellte Partition einen Eintrag hinzu.
%Vor%dann nur diese Tabelle abfragen, um eine Liste der Partitionen zu erhalten. Das ist sehr überschaubar für mich.
%Vor%Ich wette, das könnte optimiert werden.
Bedauerlicherweise haben Azure Tables keine Funktionen wie distinct oder andere - betrachten Sie sie als strukturierten Schlüsselspeicher wie ein Dictionary im Speicher. Jede Operation, die Sie ausführen, muss alle Elemente durchlaufen, um eine Teilmenge davon zu erhalten, es sei denn, Sie wissen, welche Schlüssel zuerst geladen werden sollen und verarbeiten diese Unterliste.
Ich würde persönlich einfach eine zweite azurblaue Tabelle verwenden und die Partitionsschlüssel dort (als Zeilenschlüssel) speichern, was Ihnen dann die Möglichkeit gibt, diese um einen anderen Faktor zu gruppieren. Oder verwenden Sie einfach einen einzelnen Partitionsschlüssel für diese zweite Tabelle.
Dies würde Ihnen die beste Leistung und die geringste Menge an Kopfschmerzen geben.
Manchmal ist der einfachste Ansatz der beste, da Sie den Job einfach erledigen können.
Hoffe, das hilft,
Damit erhalten Sie eine Liste aller Partitionsschlüssel in Ihrer Tabelle:
%Vor%Auch wenn Sie eine große Tabelle haben, sollte sie schnell gefüllt werden, weil sie parallel läuft. Es gibt kein "ConcurrentSet", wenn Sie wollen, also müssen wir ConcurrentDictionary verwenden. Das Byte ist nur ein Platzhalter; Alle Werte befinden sich in partitionKeys.Keys.
Ich habe einen ähnlichen Ansatz zuvor mit:
versucht %Vor%obere wie auch Ihre arbeiten sehr langsam auf großen (Lauf für 70 Millionen Zeilen Tabelle - ca. 2 Stunden) oder Medium, aber mit vielen Eigenschaften Tabelle
Tags und Links .net azure azure-table-storage