Dieser Artikel wurde maschinell übersetzt.

Vorhersage: "Cloudy"

Speicherung von SQL Azure- und Windows Azure-Tabellen

Joseph Fultz

Downloaden des Codebeispiels

Joseph FultzEin häufiges Szenario, das in meiner Familie wiedergegeben wird ist, dass wir für den Abend einfach nutzen, und genießen Sie eine Nacht, zusammen Essen möchten. Jeder dieser gerne und bietet die Zeit zum Essen und lockern. Wir haben viel Restaurant Auswahlmöglichkeiten in unseren Bereich so, wie es ist, deaktiviert werden, wenn jemand eine besonders starke Vorrang hat, wir erhalten hängen in dem Land Limbo selbst entscheiden, wo die Essen.

Es ist dieses Problem Wahl zwischen scheinbar gleichermaßen gute Auswahlmöglichkeiten, die ich viele meiner Erfahrung Kunden und Kollegen finden Sie bei der Entscheidung, welcher Speichermechanismus in der Wolke verwendet. Häufig ist der Ausgangspunkt des Verwirrung der Unterschiede zwischen Windows Azure Table-Speicher und Azure SQL verstehen.

Es nicht jeder Benutzer erkennbar, welche Technologie machen Wahl, aber ich enthalten einige Richtlinien für die Entscheidung bei der Auswertung von der Anforderungen der Lösung und die Lösungsteam gegen die Features und die Einschränkungen für Windows Azure Table-Speicher und Azure SQL. Darüber hinaus werde ich hinzufügen in eine Nutzung des Codes so, dass Sie das Verhalten der Entwickler für die Arbeit mit einzelnen abrufen können.

Datenverarbeitung

SQL-Azure und anderen relationalen Datenbanken bieten in der Regel Datenverarbeitungsfunktionen über ein Speichersystem. Im Allgemeinen sind RDBMS-Benutzer mehr interessiert Datenverarbeitung als die Rohdaten speichern und Abrufen von Aspekte einer Datenbank.

Wenn Sie außerhalb des Gesamtumsatzes des Unternehmens in einem bestimmten Zeitraum suchen möchten, möglicherweise Sie z. B. Scannen Sie Hunderte von Megabytes Verkaufsdaten und eine Summe zu berechnen. In einer Datenbank können senden eine einzelne Abfrage (ein paar Bytes) an die Datenbank, die dazu, die Datenbank zum Abrufen der Daten (möglicherweise viele Gigabyte dass führt) vom Datenträger in den Arbeitsspeicher, Filtern die Daten basierend auf den entsprechenden Zeitraum (auf mehrere Hundert Megabyte in allgemeinen Szenarien), berechnen Sie die Summe der Verkaufszahlen und die Anzahl an die Clientanwendung (ein paar Bytes) zurückzugeben.

Mit einem reinen Speichersystem dazu benötigt des Computers, auf dem den Anwendungscode, um alle unformatierten Daten über das Netzwerk aus dem Speichersystem abzurufen, und dann vom Entwickler zum Schreiben des Codes eine Summe für die Daten ausführen. Verschieben große Datenmengen aus dem Speicher in der Anwendung für die Datenverarbeitung ist sehr teuer und langsam sein.

SQL-Azure bietet Datenverarbeitungsfunktionen durch Abfragen, Transaktionen und gespeicherten Prozeduren, die auf dem Server ausgeführt werden, und nur die Ergebnisse an die Anwendung zurückgegeben werden. Wenn Sie eine Anwendung, die Datenverarbeitung über große Datenmengen erfordert haben, ist SQL Azure eine gute Wahl. Wenn Sie eine Anwendung, die speichert haben und abruft (Scans/Filter) große Datasets jedoch die Datenverarbeitung ist nicht erforderlich, ist Windows Azure Tabelle Speicher eine hervorragende Wahl.

– Windows-Azure Tony Petrossian, Principal Programm-Manager

Überprüfen die Optionen

Erweitern den Bereich kurz auf die anderen Speichermechanismen hinzufügen, um das Gesamtbild auf einer hohen Ebene ein wenig zu vermitteln ist einfach zu separaten Speicheroptionen in diesen großen Buckets:

  • Zugriff auf relationale Daten: SQL Azure
  • Datei- und Objekt-Zugriff: Windows Azure-Speicher
  • Datenträgerbasierte lokalen Cache: Rolle Lokaler Speicher

Allerdings können die Auswahlmöglichkeiten genauer zu bestimmen, Sie starten gefragt werden einige einfachen Fragen wie:

  • Wie ich Dateien zur Verfügung, um alle Rollen häufig erstellen?
  • Wie kann ich stellen Dateien zur Verfügung und aktualisieren leicht zu?
  • Wie kann ich bereitstellen Semantik strukturierte Zugriff, sondern auch Bereitstellen über ausreichend Speicherplatz und Leistung?
  • Welche bietet die beste Leistung oder die optimale Skalierbarkeit?
  • Was sind die Schulungsanforderungen?
  • Was ist die Verwaltung von Fotostory?

Wird der Pfad zu einer Entscheidung klar muddy und können auf einfache Weise in einen Vorteil gegenüber Einschränkung Vergleich von Features verloren abrufen. Konzentration auf SQL Azure und Windows Azure Table-Speicher, werde ich einige ideale Verwendungsmuster beschreiben, und geben einige Codebeispiele, die mit den einzelnen.

SQL Azure Grundlagen

SQL-Azure stellt die Basisfunktionen für die Verwendung einer relationalen Datenbank durch Anwendungen. Wenn eine Anwendung Daten, die in ein relationales Datenbank-Managementsystem (RDBMS) gehostet werden enthält, ist die Möglichkeit, zu gelangen. Es enthält alle allgemeinen Semantik für den Datenzugriff über SQL-Anweisungen. Darüber hinaus können SQL Server Management Studio (SSMS) direkt auf SQL-Azure einbinden, der für ein einfach zu verwendendes und bekannte Mittel für das Arbeiten mit der Datenbank außerhalb des Codes enthält.

Beispielsweise erfolgt in wenigen Schritten, die die SQL Azure Web-Verwaltungskonsole und die SSMS eine neue Datenbank einrichten. Diese Schritte sind:

  1. Erstellen Sie die Datenbank über das Web
  2. Datenbank vom lokalen Computer Zugriff auf Erstellen Sie Regel
  3. Herstellen einer Verbindung mit der Web-Datenbank über lokale SSMS
  4. Ausführen von DDL innerhalb der Datenbank-container

SQL Server wird gerade von eine Anwendung verwendet, oder eine ähnliche RDBMS back-End, werden SQL-Azure den einfachsten Weg in Ihren Daten in der Wolke verschieben.

SQL-Azure ist auch die beste Wahl für den wolkenbasierte Zugriff auf strukturierte Daten. Dies trifft, ob die Anwendung in Windows Azure oder nicht gehostet wird. Wenn Sie eine mobile Anwendung oder sogar eine desktop-Anwendung verfügen, ist SQL Azure die Möglichkeit, die Daten in der Wolke und aus diesen Anwendungen darauf zugreifen.

Verwenden einer Datenbank in der Wolke unterscheidet sich nicht wesentlich von der Verwendung eines, das auf dem Gelände gehostet hat – mit eine erwähnenswerte Ausnahme, dass die Authentifizierung über SQL Server-Authentifizierung behandelt werden muss. Möglicherweise möchten Microsoft Project Codename “ Houston, ” ansehen, wird eine neue Managementkonsole für SQL Azure entwickelt, die mit Silverlight erstellt wird. Details zu diesem Projekt stehen sqlazurelabs.cloudapp.net/houston.aspx-zur Verfügung.

SQL Azure Development

Schreiben eine schnelle Beispielanwendung, die nur auf einem Windows Form ist als Host für eine Datentabelle, die Daten aus der Datenbank Pubs anzeigt nicht komplizierter als die Datenbank lokale wurde. Ich starten Sie den Assistenten in Visual Studio eine neue Datenquelle hinzufügen und führt mich zum Erstellen einer Verbindungszeichenfolge und einem Dataset. In diesem Fall erhalten ich eine Verbindungszeichenfolge in meinem app.config, die folgendermaßen aussieht:

<add name="AzureStrucutredStorageAccessExample.Properties.Settings.pubsConnectionString"

     connectionString="Data Source=gfkdgapzs5.database.windows.
net;Initial Catalog=pubs;Persist Security Info=True;User ID=jofultz;Password=[password]"

     providerName="System.Data.SqlClient" />

In der Regel ist integrierte Authentifizierung die Wahl für die Datenbanksicherheit, daher ist es erscheint ein wenig unhandlich erneut zu SQL Server-Authentifizierung verwenden.SQL-Azure minimiert Belichtung durch Erzwingen von IP-Access List, müssen Sie einen Eintrag für jede der IP-Bereich Adressen hinzufügen, die in der Datenbank eine Verbindung herstellen kann.

Zurückgehen zu meinem Beispiel absichtlich einfach durch Auswählen der Titleview Ansicht aus der Datenbank "Pubs" auch mir generierten Code in das Dataset standardmäßig mit dem Namen PubsDataSet wie in Abbildung 1.

image: Automatically Generated Code for Accessing SQL Azure

Abbildung 1 automatisch generierten Codes für den Zugriff auf SQL-Azure

Führen Sie einige Drag & Drop Vorgänge durch eine DataGridView auf das Formular ziehen, und konfigurieren Sie die Verbindung, die Sie verbinden.Sobald es bis verkabelt ist, ich ausführen und Ende nach oben mit einer schnellen Rasteransicht der Daten wie in Abbildung 2.

image: SQL Azure Data in a Simple Grid

Abbildung 2 SQL Azure Daten in einer einfachen Raster

Ich bin nicht versucht, die Idee zu verkaufen, das Erstellen einer Enterprise-Anwendung über Assistenten können Sie in Visual Studio, sondern vielmehr, die der Datenzugriff ist mehr oder weniger gleichbedeutend mit SQL Server und verhält sich und ist wie erwartet.Also ein Entitätsmodell dafür zu generieren und LINQ verwenden, genau wie ich dies tun könnte, wäre es anstelle von lokalen (siehe Abbildung 3 ) gehostet.

image: Using an Entity Model and LINQ

Abbildung 3 mithilfe einer Entity Model und LINQ

Eine großartige neue Feature Ergänzung Gegenstand der normalerweise verfügbaren SQL Server-basierten lokalen Datenbank steht (derzeit über sqlazurelabs.com verfügbar), die Daten als ein feed OData verfügbar zu machen.Sie erhalten REST Abfragen wie die folgende:

https://odata.sqlazurelabs.com/  

  OData.svc/v0.1/gfkdgapzs5/pubs/  

  authors?$top=10

Dies führt zu einer Antwort OData oder, im Format $ = JSON-Parameter, eine JSON-Antwort.Dies ist ein großer Vorteil für Anwendungsentwickler, da nicht nur Sie das Standardverhalten von SQL Server erhalten, Sie erhalten jedoch auch zusätzliche Zugriffsmethoden über Konfiguration, statt eine einzige Zeile Code zu schreiben.Dadurch wird der Fokus auf den Layern Dienst- oder platziert werden, die im Vergleich zu der Grundstruktur zum Abrufen von Daten über die Verbindung in des Informationsspeichers Geschäftswert steigern.

Wenn eine Anwendung Zugriff auf traditionelle relationale Daten benötigt, ist SQL Azure wahrscheinlich die bessere und einfachere Möglichkeit.Aber es gibt eine Reihe von anderen Gründen SQL Azure als die primäre Auswahl über Windows Azure Table-Speicher zu berücksichtigen.

Der erste Grund ist Wenn Sie eine hohe Transaktionsrate haben, d. h. es werden häufige Abfragen (alle Vorgänge) an den Datenspeicher.Es gibt keine Gebühren pro Transaktion für SQL Azure.

SQL-Azure gibt Ihnen außerdem die Möglichkeit, SQL Azure Daten synchronisieren (sqlazurelabs.com/SADataSync.aspx) zwischen verschiedenen Windows Azure Datenbanken zusammen mit der Fähigkeit zum Synchronisieren von Daten zwischen SQL Azure Installationen (microsoft.com/windowsazure/developers/sqlazure/datasync/ ) und lokale Datenbanken einrichten.Ich werde Entwurf und die Verwendung von SQL-Azure und DataSync mit dem lokalen Speicher in einem zukünftigen Artikel behandeln, wenn ich Teilstruktur Knoten Architektur mit SQL Azure behandeln.

Windows-Azure Table-Speicher

Jetzt haben Sie gesehen, die Vorteile der Verwendung von SQL-Azure als Speicher.Also wenn es mehr vorteilhaft auf Windows Azure Tabelle Speicher verlassen?Hier finden Sie eine Reihe von Szenarios, in denen SQL Azure nicht die richtige Wahl sein muss.

Ist eine Anwendung zum Verschieben in das Web überholt werden, oder die Datenspeicherung Layer-Implementierung nicht vollständig ausgeführt, sollten Sie einen Blick auf Windows Azure Table-Speicher.Windows Azure Table-Speicher ist ebenso sinnvoll, wenn Sie keinen relationalen Speicher oder Zugriff auf eine einzige Tabelle beschränkt ist, zu einem Zeitpunkt und erfordert keine Verknüpfungen.In diesem Fall wäre die Datasets kleinen und Verknüpfungen möglich behandelt clientseitige von LINQ.

Sie sollten auch einen Blick auf Windows Azure Table-Speicher zu werfen, wenn mehr Daten als die maximale Anzahl von SQL-Azure (die derzeit 50 GB für eine einzelne Instanz) unterstützt.Beachten Sie, dass Größenbeschränkung mit einigen Datenpartitionierung überwunden werden kann, jedoch, um die Einstandspreise SQL Azure Laufwerk konnte.Der Abstand in Windows Azure Tabelle Speicher wäre wahrscheinlich kostengünstiger und verfügt über integrierte durch ein Schlüsselsymbol deklarierten Partition zu partitionieren.

Darüber hinaus würde aufgrund von Gebühren pro Transaktion für Windows Azure Table-Speicher, Daten mit ein Frequenz untere zugreifen oder Daten, die problemlos zwischengespeichert werden können eine gute Wahl sein.

Einige Dinge, die Windows Azure Tabelle Speicher ansprechend zu schließen, wenn die Anwendung einige Zugriff strukturierten Format, wie z. B. indizierte Suche benötigt aber hauptsächlich Objekte oder Binary Large Objects (BLOBs) speichert / Character Large Objects (CLOBs);Wenn Ihre Anwendung aus, die für die Daten in der Tabelle; Typ Variabilität unterstützen profitieren würdenoder wenn Sie die vorhandene Datenstruktur (oder fehlende Therof) in der SQL Server-Installation migrieren erschwert.

Verwenden von Windows Azure Table-Speicher

Zunächst scheinen das Arbeiten mit Windows Azure Table-Speicher ein wenig unhandlich aufgrund von Annahmen, die von einer SQL-Datenbank im Zusammenhang mit “ Tabelle Speicher ”.Die Verwendung von “ Tabelle ” im Namen unterstützen nicht.Wenn über Windows Azure Table-Speicher zu denken, empfehle ich, dass Sie es als Objektspeicher vorstellen.

Als Entwickler konzentrieren Sie nicht auf die Speicherstruktur oder Mechanismus;konzentrieren Sie sich stattdessen auf das Objekt, und was Sie damit tun möchten.Beim Abrufen der richten Sie Objekte in Windows Azure Table-Speicher ist häufig die größte Hürde für Entwickler jedoch Zugriff auf Windows Azure Tabelle Speicher über Objekte ist natürlich, besonders dann, wenn Sie LINQ einsetzen.

Arbeiten mit Windows Azure Table-Speicher zu starten, indem Sie dem Projekt einen Verweis auf die System.Data.Services.Client hinzufügen.Fügen Sie einen Verweis auf Microsoft.WindowsAzure.StorageClient.dll darüber hinaus, bei der Arbeit in einer Wolke für Visual Studio-Vorlage (zur Referenz für Sie) werden nicht.

Als Nächstes erstellen Sie eine Objekt/Entität, mit der Sie arbeiten können (aus der Tabelle Authors Diebstahl):

public class TableStorageAuthor:

  Microsoft.WindowsAzure.StorageClient.TableServiceEntity {

  public int Id {get; set;}

  public string LastName { get; set; }

  public string FirstName { get; set; }

  public string Phone { get; set; }

  public string Address { get; set; }

  public string City { get; set; }

  public string State { get; set; }

  public string Zip {get; set;}

}

Sie können definieren, verwenden zum Herstellen einer Verbindung mit dem Informationsspeicher zu behandeln, und führen die Arbeitsgänge erstellen/Lese-/Update/Delete (CRUD) wie in TableServiceContext Daten Dienst Clientkontexts Abbildung 4. TableStorageAuthor-Klasse wird als die Vorlagenklasse verwendet, um das AuthorData-Element deklarieren, für das eine Tabelle Abfragemethode für die Authors-Tabelle zurückgegeben wird. Es wird auch als Parametertyp implementierten Add-Vorgang verwendet.

Abbildung 4 Zugriff auf Windows-Azure Tabelle Speicher

public class AuthorDataServiceContext : TableServiceContext {

  public IQueryable<TableStorageAuthor> AuthorData {

    get {

      return this.CreateQuery<TableStorageAuthor>("Authors");

    }

  }



  public AuthorDataServiceContext (

    Uri baseAddress, StorageCredentials credentials)

    : base(baseAddress.AbsoluteUri, credentials) {}



  public void Add(TableStorageAuthor author) {

    this.AddObject("Authors", author);

    DataServiceResponse dsResponse = SaveChanges();

  }

}

Erstellen der Zieltabelle:

TableClient.CreateTableIfNotExist("Authors");

Einige Daten erstellen und hinzufügen auf die Tabelle, die im Speicher erstellt wurde mit einem bekannten Objekterstellung und Eigenschaft Zuordnungs-Paradigma (siehe Abbildung 5 ).

Abbildung 5 Adding Data to Windows Azure Tabelle Speicher

var TableClient = StorageAccount.CreateCloudTableClient();



TableStorageAuthor author = new TableStorageAuthor();

author.FirstName = "Joseph";

author.LastName = "Fultz";

author.RowKey = System.Guid.NewGuid().ToString();

author.Id = author.RowKey;

author.State = "TX";

author.PartitionKey = "TX";



AuthorDataServiceContext ctx = 

  new AuthorDataServiceContext(

  StorageAccount.TableEndpoint, 

  StorageAccount.Credentials);

ctx.Add(author);

Sobald alle Daten ist es kann es mit LINQ bearbeitet werden. Wählen Sie für das Entitäten wäre beispielsweise:

AuthorDataServiceContext ctx = 

  new AuthorDataServiceContext(

  StorageAccount.TableEndpoint, 

  StorageAccount.Credentials);



var authors = 

  from a in ctx.AuthorData

  select a;



foreach (TableStorageAuthor ta in authors) {

  Debug.WriteLine(ta.FirstName + " " + ta.LastName);

}

Ich nicht implementieren, Update und Delete, aber Sie ähnliche wäre. Der einzige Unterschied, der von den etwas unterschiedlich sein kann, die LINQ mit Entity Framework verwendet haben wird den Code zum Erstellen der TableServiceContext und den nachfolgenden Code erstellen und verwenden. Wenn Sie mit REST und der DataServiceContext gearbeitet haben, wird diese Arbeit ganz natürlich sein.

Mithilfe der TableServiceContext, TableServiceEntity und LINQ erhalten Sie Informationen über dasselbe Verhalten wie SQL Azure mit dem Entity Framework und LINQ – Wenn auch mit ein wenig mehr Hand kodieren auf der Seite Windows Azure Table-Speicher.

Auswertung-basierte Lösung

Wie bereits erwähnt, vor, wenn die Anwendung einen relationalen Speicher bereits eingerichtet, es wahrscheinlich am besten geeignet ist, um SQL Azure mit ein wenig Unterstützung von Tools wie der Assistent für die Migration zu SQL Azure migrieren. Wenn das ist nicht der Fall, oder der Cloud-Teil der Anwendung nicht die volle Funktionalität von einem RDBMS muss, dann betrachten Sie die Matrix in Abbildung 6 und feststellen Sie, welche Spalten der Großteil der Anforderungen der Lösungsanforderungen und Architektur erfüllen.

Abbildung 6 Vergleichen von SQL Azure und Windows Azure Tabelle Speicher

Feature SQL Azure Allgemeine Benefit(s) Windows-Azure Table-Speicher
Wählen Sie die Semantik Cross-Tabelle Abfragen Primäre Schlüsseln basierende Suche Einzelne Schlüssel Lookup (durch Partition)
Leistung und Skalierung Hohe Leistung über mehrere Indizes normalisierte Daten Strukturen und so auf, und skalierbar über manuelle Partitionierung über Azure SQL-Instanzen   Automatische großem Umfang von Partition und konsistenter Leistung sogar großen Maßstab
Benutzerfreundlichkeit Bekannte Verwaltungstools und traditionellen Datenbankentwurf Bekannte übergeordnete Entwickler-Erfahrung Direkte Serialisierung;keine ORM erforderlich;Durch das Entfernen des relationalen Modells vereinfachte Entwurfsmodell
Speicher-Stil Traditionelle relationale Entwurfsmodell Die Datenspeicherung für alle Arten von Daten Geben Sie in einer einzigen Tabelle Streuung
EP Faktoren Keine Transaktion Kosten, Zahlung von der Größe der Datenbank Datenverkehr Netzwerkkosten außerhalb von demselben Datencenter Kein Platz mehr Aufwand Kosten, bezahlen, für welche verwendet wird
Daten laden und Synchronisierung Synchronisierung zwischen lokalen und wolkenbasierte speichert;Daten verschoben von herkömmlichen extrahieren problemlos in und out, Transformieren Sie und laden Sie (ETL) Mechanismen;Synchronisierung zwischen Azure SQL-Datenbanken in verschiedenen Datencentern    

Es ist wichtig zu beachten, dass für einige der Elemente in der Abbildung 6 (z. B. die im Zusammenhang mit der Verwaltung und für Windows Azure Tabelle Speicher laden von Daten) bereits vorhanden Lösungen von Drittanbietern eingeben den Markt sind, die fehlende Funktionalität bereitzustellen. Als solche werden die Kosten und die Funktionalität des Tools für wichtige Projekte berücksichtigt werden müssen.

Ich erwarte, dass viele Anwendungen einen gemischter Daten Ansatz zur Technologie optimal zu nutzen müssen. Beispielsweise würde Windows Azure Tabelle Speicher zum Optimieren der Abrufoperation Zeiten und gleichzeitig weiterhin großem Umfang für Ressourcen, wie z. B. Dokumente, Videos, Bildern und anderen solchen Medien verwendet werden. Jedoch würde zur Erleichterung der Suche Metadaten für das Element verknüpfte Daten und Objektzeiger in SQL Azure gespeichert werden. Ein solcher Entwurf würde auch den Transaktion Datenverkehr gegen Windows Azure Tabelle Speicher reduzieren. Diese Art der ergänzenden Entwurf würde folgende Vorteile bieten:

  • Halten Sie den Durchsatz für Abfragen zum Suchen von Ressourcen
  • Halten Sie die Datenbankgröße SQL Azure, so Kosten für ihn ein Minimum bleibt
  • Minimieren der Kosten für die Speicherung durch Speichern von großen Dateien in Windows Azure Table-Speicher im Vergleich zu SQL Azure (Obwohl BLOB-Speicher für Dateien zu bevorzugen ist)
  • Verwalten Sie eine schnellen Abruf-Leistung durch solche Ressourcen Abruf durch Schlüssel und Partition sowie die Verschiebung der Abrufabfrage aus der Datenbank SQL Azure
  • Automatische und großem Maßstab für die Daten, die in Windows Azure Table-Speicher gespeichert zu ermöglichen

Einfach ausgedrückt: Ihr Entwurf sollte jede Speichermechanismus, dem Teil der Lösung bereitzustellen, dass die besten durchführen, sondern versucht, die Aufgabe des beide vorhanden ist ermöglichen. In beiden Fällen Sie weiterhin in der Wolke für eine Antwort suchen.

Joseph Fultz ist Architekt bei Microsoft Technology Center in Dallas, wo er mit Unternehmenskunden und unabhängigen Softwareanbietern entwerfen und Erstellen von Prototypen Softwarelösungen arbeitet erfüllen Unternehmen und Markt Anforderungen. Er hat bei Ereignissen wie z. B. TechEd und ähnliche interne Schulungen Veranstaltungen gesprochen.

Dank an die folgenden technischen Experten für die Überprüfung der in diesem Artikel: Jai Haridas, Tony Petrossian and Suraj Puri