Azure TableServiceEntity - Speichern komplexer Klassen

8

Speichern von Daten in Azure Table Services über TableServiceEntity Sie sind auf die üblichen Basistypen (int, string, datetime usw.) beschränkt, die public get / set haben.

Es gibt keine übliche Magie, die Sie von der Serialisierung erwarten, die sich mit Sammlungen, komplexen Typen, Vererbung usw. beschäftigt.

Verschiedene Möglichkeiten, damit umzugehen, könnten

sein
  • Einbinden in WritingEntity und ReadingEntity Ereignisse zum manuellen Festlegen von Eigenschaften ( inc Umgang mit komplexen Typen mit Hilfe einiger Serialisierungsmethoden zu einfachen String-Eigenschaften).
  • Ähnlich wie oben, aber verwenden Sie eine zusätzliche "Speicherklasse", um zwischen YourClass & lt; - & gt; YourClassStorage & lt; - & gt; TableServices
  • Verwenden Sie ein Framework wie Lokad.Clouds FatEntities oder Lucifure

Habe ich etwas verpasst? Welche Methode mag unter welchen Umständen am besten sein?

    
Ryan 04.07.2012, 14:46
quelle

2 Antworten

5

Die Vererbung wird vom ATS unterstützt. Alle geerbten Eigenschaften in der realisierten konkreten Klasse werden beibehalten und abgerufen. Komplexe Typen werden jedoch nicht unterstützt.

Es gibt mindestens eine weitere Möglichkeit, mit der Persistenz von Objektbäumen und Objektbeziehungen umzugehen: Speichern Sie verwandte Objekte separat unter einem anderen PartitionKey / RowKey.

Die einfachste Methode (brute force) zur Implementierung dieses Ansatzes erfordert möglicherweise, dass Sie mehrere Aufrufe an ATS vornehmen, damit Sie Objekte ordnungsgemäß deserialisieren können.

Wenn die Anzahl der Transaktionen, die für den Speicher ausgeführt werden, wichtiger ist als der belegte Speicherplatz und die Bandbreite, wäre eine elegantere Erweiterung dieses Ansatzes die Implementierung von Schnittstellen für Ihre Entitäten und die Erstellung einer "breiten" Unionsentität, die all diese Schnittstellen implementiert - und das ist der Typ, der gespeichert und abgerufen wird. Jedes Union-Objekt, das abgerufen wird, wird nur über eine bestimmte Schnittstelle verwendet. Sie können sowohl Sammlungen als auch einfach verbundene Entitäten auf diese Weise speichern - stellen Sie einfach sicher, dass Ihr PartitionKey für alle Benutzer identisch ist, die mit dem Union-Objekt verknüpft sind, und Sie können bestimmen, welches Union-Objekt welchen Entitätstyp darstellt.

HTH

    
Igorek 04.07.2012, 18:45
quelle
3

Ich bin nicht sicher, ob das Ihre Frage beantwortet, aber wenn Sie komplexe Typen hochladen müssen, könnten Sie einfach die Daten in ein Byte-Array serialisieren.

Ich musste eine Liste von KeyValuePairs in TableStorage hochladen, also habe ich einfach einen binären Formatierer verwendet, um ihn in ein Byte-Array zu serialisieren, dann zu deserialisieren und ihn beim Abrufen zurück zu werfen.

Serialisieren:

%Vor%

Deserialisieren und zurückwerfen:

%Vor%     
Shahin Dohan 05.07.2012 06:50
quelle

Tags und Links