2011-01-07 7 views
1

Ich arbeite mit Azure Table-Speicher unter Verwendung der .NET-API (TableServiceContext, WCF Data Service usw.). Ich habe eine einfache Grafik von Objekten, die ich in den Tischladen speichern möchte. In der Dienstkontextklasse habe ich den folgenden Code.Verwenden des WCF Data Services-Clients für Azure Table Storage - Speichern von Diagrammen von Objekten

_TableClient.CreateTableIfNotExist("AggRootTable"); 
this.AddObject("AggRoots", model); 
foreach (var related in model.RelatedObjects) 
{ 
    this.AddRelatedObject(model, "RelatedCollection", related); 
} 
this.SaveChanges(); 

Ich habe diese Art von Code in WCF Data Service über EF und einen SQL Server verwendet, aber es funktioniert nicht gegen Azure-Tabellen. Ich würde es nicht erwarten, da es in Azure keine echten Beziehungen zwischen Tabellen gibt. Die Methoden sind jedoch vorhanden. Kann jemand AddRelatedObject, AddLink, usw. im Kontext von Azure Tables verwenden? Oder können Sie Ansätze zum Speichern von Objektdiagrammen im Allgemeinen vorschlagen? Ich konnte keine Dokumente finden und Google war nicht hilfreich.

Danke, Erick

Antwort

1

können Sie nicht. ATS unterstützt keine Beziehungen. Es gibt viele nicht funktionierende Methoden, die aufgrund der Data-Services-API verfügbar sind.

Sie können jedoch den gesamten Objektbaum in einer einzigen Tabelle speichern. Nicht sicher, ob dies für Ihr Design/Ihre Architektur funktioniert

auch, es ist eine schlechte Idee, CreateIfNotExists vor jedem Schreibvorgang aufzurufen. Erstens, Sie zahlen extra für Transaktionen, die für die Hin- und Rückfahrt anfallen, zweitens ist der Anruf nicht sofort und verlangsamt Ihre Schreibvorgänge. Erstellen Sie die Tabellen einfach vor der Bereitstellung oder beim Start der Rollen.

+0

Danke. Es sah so aus, als wäre die ATS-Client-API in einer eigenen Assembly. Schade, dass sie die API nicht auf unterstützte Funktionen beschränken konnten. Es würde die Benutzung viel einfacher machen. –

1

Der Tabellenspeicherdienst ist im Allgemeinen kein guter Ort, um ganze Objektdiagramme zu speichern, da es eine Größenbeschränkung (von 1 MB, IIRC) für jede Zeile/Einheit gibt. Offensichtlich, wenn Sie wissen, dass Ihre Objektdiagramme nie groß sein werden, ist es Ihnen vielleicht egal ...

Eine gute Alternative ist oft Speichern Sie eine serialisierte Grafik in Blob Storage. Sie müssen jedoch eine Strategie für die Versionsverwaltung haben.

+0

Danke. Ich denke über diesen Ansatz nach. Die Größenbeschränkung könnte ein Problem sein, aber ich muss das herausfinden. –

Verwandte Themen