Horizontales Hochskalieren mit Azure SQL-DatenbankScaling out with Azure SQL Database

Mithilfe der Tools für elastische Datenbanken können Sie Azure SQL-Datenbanken problemlos horizontal hochskalieren.You can easily scale out Azure SQL databases using the Elastic Database tools. Mit diesen Tools und Features können Sie Datenbankressourcen von Azure SQL-Datenbank zum Erstellen von Lösungen für transaktionale Workloads und insbesondere SaaS-Anwendungen (Software-as-a-Service) verwenden.These tools and features let you use the database resources of Azure SQL Database to create solutions for transactional workloads, and especially Software as a Service (SaaS) applications. Die Features für elastische Datenbanken umfassen folgende:Elastic Database features are composed of the:

Die folgende Grafik zeigt eine Architektur mit den Features für elastische Datenbanken im Kontext einer Sammlung von Datenbanken.The following graphic shows an architecture that includes the Elastic Database features in relation to a collection of databases.

Die Datenbankfarbe symbolisiert Schemas.In this graphic, colors of the database represent schemas. Datenbanken mit der gleichen Farbe verwenden die gleichen Schemas.Databases with the same color share the same schema.

  1. Eine Reihe von Azure SQL-Datenbanken werden von Azure unter Verwendung einer Shardingarchitektur gehostet.A set of Azure SQL databases are hosted on Azure using sharding architecture.
  2. Die Clientbibliothek für elastische Datenbanken dient zum Verwalten einer Shardgruppe.The Elastic Database client library is used to manage a shard set.
  3. Eine Teilmenge der Datenbanken wird einem Pool für elastische Datenbanken zugewiesen.A subset of the databases are put into an elastic pool. (Siehe Was ist ein Pool?).(See What is a pool?).
  4. Ein Auftrag für elastische Datenbanken wird geplant ausgeführt, oder Ad-hoc-T-SQL-Skripts werden für alle Datenbanken ausgeführt.An Elastic Database job runs scheduled or ad hoc T-SQL scripts against all databases.
  5. Mit dem Split-Merge-Tool werden Daten zwischen Shards verschoben.The split-merge tool is used to move data from one shard to another.
  6. Mit der Abfrage für elastische Datenbanken können Sie eine Abfrage für alle Datenbanken in der Shardgruppe erstellen.The Elastic Database query allows you to write a query that spans all databases in the shard set.
  7. Mit elastischen Transaktionen können Sie Transaktionen ausführen, die sich über mehrere Datenbanken erstrecken.Elastic transactions allow you to run transactions that span several databases.

Tools für elastische Datenbanken

Gründe für die Verwendung der ToolsWhy use the tools?

Flexibilität und Skalierbarkeit für Cloudanwendungen lassen sich bei virtuellen Computern und Blob Storage durch einfaches Hinzufügen oder Entfernen von Einheiten oder durch Erhöhen der Leistung erreichen.Achieving elasticity and scale for cloud applications has been straightforward for VMs and blob storage - simply add or subtract units, or increase power. Bei der zustandsbehafteten Datenverarbeitung in relationalen Datenbanken ist es jedoch eine Herausforderung geblieben.But it has remained a challenge for stateful data processing in relational databases. Herausforderungen treten in folgenden Szenarios auf:Challenges emerged in these scenarios:

  • Vergrößern und Verkleinern der Kapazität für den relationalen Datenbankteil der Workload.Growing and shrinking capacity for the relational database part of your workload.
  • Verwalten von Hotspots, die Auswirkungen auf eine bestimmte Teilmenge von Daten haben können – z.B. auf aktive Endkunden (Mandanten).Managing hotspots that may arise affecting a specific subset of data - such as a busy end-customer (tenant).

In der Vergangenheit wurden Szenarios wie diese durch eine Investition in größere Datenbankserver zur Unterstützung der Anwendung gelöst.Traditionally, scenarios like these have been addressed by investing in larger-scale database servers to support the application. Diese Option ist in der Cloud jedoch beschränkt, wo für die gesamte Verarbeitung vordefinierte Standardhardware verwendet wird.However, this option is limited in the cloud where all processing happens on predefined commodity hardware. Stattdessen stellt die Verteilung von Daten und ihrer Verarbeitung auf mehrere identisch strukturierte Datenbanken (die als „Sharding“ bezeichnete horizontale Hochskalierung) eine Alternative zur herkömmlichen Hochskalierung im Hinblick auf Kosten und Elastizität dar.Instead, distributing data and processing across many identically structured databases (a scale-out pattern known as "sharding") provides an alternative to traditional scale-up approaches both in terms of cost and elasticity.

Horizontale und vertikale SkalierungHorizontal and vertical scaling

Die folgende Abbildung zeigt die horizontalen und vertikalen Skalierungsdimensionen. Hierbei handelt es sich um die grundlegenden Skalierungsmöglichkeiten für elastische Datenbanken.The following figure shows the horizontal and vertical dimensions of scaling, which are the basic ways the elastic databases can be scaled.

Horizontale und vertikale Hochskalierung

Horizontales Skalieren meint das Hinzufügen oder Entfernen von Datenbanken zur Anpassung der Kapazität oder der allgemeinen Leistung.Horizontal scaling refers to adding or removing databases in order to adjust capacity or overall performance. Dies wird auch als „Ausskalieren“ bezeichnet.This is also called “scaling out”. Sharding ist eine gängige Methode für die horizontale Skalierung, bei der Daten in einer Sammlung von identisch strukturierten Datenbanken partitioniert werden.Sharding, in which data is partitioned across a collection of identically structured databases, is a common way to implement horizontal scaling.

Vertikales Skalieren bezeichnet das Erhöhen oder Verringern der Leistungsstufe einer einzelnen Datenbank. Dies wird auch als "zentrales Hochskalieren" bezeichnet.Vertical scaling refers to increasing or decreasing the performance level of an individual database—this is also known as “scaling up.”

Die meisten Datenbankanwendungen für Clouds verwenden eine Kombination aus diesen beiden Ansätzen.Most cloud-scale database applications use a combination of these two strategies. Eine SaaS-Anwendung (Software as a Service) kann z.B. die horizontale Skalierung für Bereitstellungen an neue Endkunden nutzen und die vertikale Skalierung, damit die Ressourcen für die Datenbanken der einzelnen Endkunden bei entsprechender Workload vergrößert oder verkleinert werden können.For example, a Software as a Service application may use horizontal scaling to provision new end-customers and vertical scaling to allow each end-customer’s database to grow or shrink resources as needed by the workload.

  • Die horizontale Skalierung wird mithilfe der Clientbibliothek für elastische Datenbankenverwaltet.Horizontal scaling is managed using the Elastic Database client library.
  • Bei der vertikalen Skalierung wird mithilfe von Azure PowerShell-Cmdlets die Dienstebene geändert, oder es werden Datenbanken einem elastischen Pool zugewiesen.Vertical scaling is accomplished using Azure PowerShell cmdlets to change the service tier, or by placing databases in an elastic pool.

Sharding (Horizontales Partitionieren)Sharding

Mit Sharding (horizontalem Partitionieren) werden große Mengen identisch strukturierter Daten auf mehrere unabhängige Datenbanken verteilt.Sharding is a technique to distribute large amounts of identically structured data across a number of independent databases. Sharding ist besonders bei Cloudentwicklern beliebt, die SaaS-Angebote (Software as a Service) für Endbenutzer oder Unternehmen erstellen.It is especially popular with cloud developers creating Software as a Service (SAAS) offerings for end customers or businesses. Diese Endbenutzer werden häufig als „Mandanten“ bezeichnet.These end customers are often referred to as “tenants”. Sharding kann aus verschiedenen Gründen erforderlich sein:Sharding may be required for any number of reasons:

  • Die Gesamtdatenmenge ist so groß, dass sie aufgrund einschlägiger Beschränkungen nicht in einer einzelnen Datenbank gespeichert werden kann.The total amount of data is too large to fit within the constraints of a single database
  • Der Transaktionsdurchsatz der Workload überschreitet die Fähigkeiten einer einzelnen Datenbank.The transaction throughput of the overall workload exceeds the capabilities of a single database
  • Mandanten erfordern u. U. eine physische Trennung von anderen Mandaten, sodass für jeden Mandanten eine eigene Datenbank erforderlich ist.Tenants may require physical isolation from each other, so separate databases are needed for each tenant
  • Verschiedene Abschnitte einer Datenbank müssen sich aufgrund von Compliance- oder Leistungsanforderungen oder aus geopolitischen Gründen an verschiedenen geografischen Standorten befinden.Different sections of a database may need to reside in different geographies for compliance, performance, or geopolitical reasons.

In anderen Szenarien, z. B. beim Erfassen von Daten von verteilten Geräten, kann das Sharding eingesetzt werden, um eine Gruppe von Datenbanken über einen Zeitraum verteilt zu füllen.In other scenarios, such as ingestion of data from distributed devices, sharding can be used to fill a set of databases that are organized temporally. Beispielsweise kann jedem Wochentag oder jeder Woche eine eigene Datenbank zugeordnet werden.For example, a separate database can be dedicated to each day or week. In diesem Fall kann der Sharding-Schlüssel eine Ganzzahl sein, die das Datum darstellt (und in allen Zeilen der partitionierten Tabellen vorhanden ist). Abfragen zum Abruf von Informationen für einen Datumsbereich müssen von der Anwendung an die Teilmenge von Datenbanken, welche den fraglichen Bereich abdecken, weitergeleitet werden.In that case, the sharding key can be an integer representing the date (present in all rows of the sharded tables) and queries retrieving information for a date range must be routed by the application to the subset of databases covering the range in question.

Das Sharding funktioniert am besten, wenn jede Transaktion in einer Anwendung auf einen einzelnen Wert eines Sharding-Schlüssels begrenzt werden kann.Sharding works best when every transaction in an application can be restricted to a single value of a sharding key. Damit wird sichergestellt, dass alle Transaktionen für eine bestimmte Datenbank spezifisch sind.That ensures that all transactions are local to a specific database.

Mehrere Mandanten und einzelner MandantMulti-tenant and single-tenant

Einige Anwendungen verwenden den einfachsten Ansatz und erstellen für jeden Mandanten eine eigene Datenbank.Some applications use the simplest approach of creating a separate database for each tenant. Dies ist das Shardingmuster mit einzelnen Mandanten, das Isolation, Sicherungs-/Wiederherstellungsfunktion und Ressourcenskalierung auf Ebene einzelner Mandanten bietet.This is the single tenant sharding pattern that provides isolation, backup/restore ability, and resource scaling at the granularity of the tenant. Beim Sharding mit einzelnen Mandanten ist jede Datenbank mit einem bestimmten Mandanten-ID-Wert (oder Kundenschlüsselwert) verknüpft, wobei der Schlüssel jedoch nicht immer in den Daten vorhanden sein muss.With single tenant sharding, each database is associated with a specific tenant ID value (or customer key value), but that key need not always be present in the data itself. Es ist Aufgabe der Anwendung, die einzelnen Anforderungen an die entsprechende Datenbank weiterzuleiten – dies wird durch die Clientbibliothek vereinfacht.It is the application’s responsibility to route each request to the appropriate database - and the client library can simplify this.

Einzelinstanzen und Mehrinstanzen

In anderen Szenarien werden mehrere Mandanten in Datenbanken zusammengefasst, statt sie in getrennten Datenbanken zu isolieren.Others scenarios pack multiple tenants together into databases, rather than isolating them into separate databases. Dabei handelt es sich um ein typisches Shardingszenario mit mehreren Mandanten, dem die Tatsache zugrunde liegen kann, dass eine Anwendung eine große Anzahl von kleinen Mandanten verwalten muss.This is a typical multi-tenant sharding pattern - and it may be driven by the fact that an application manages large numbers of small tenants. Beim Sharding mit mehreren Mandanten sollen die Zeilen in den Datenbanktabellen einen Schlüssel enthalten, der die Mandanten-ID oder den Sharding-Schlüssel eindeutig identifiziert.In multi-tenant sharding, the rows in the database tables are all designed to carry a key identifying the tenant ID or sharding key. Auch hier ist es Aufgabe der Anwendungsschicht, die Anforderung eines Mandanten an die entsprechende Datenbank weiterzuleiten. Dieser Vorgang kann durch die Clientbibliothek für elastische Datenbanken unterstützt werden.Again, the application tier is responsible for routing a tenant’s request to the appropriate database, and this can be supported by the elastic database client library. Darüber hinaus kann die Sicherheit auf Zeilenebene zum Filtern der Zeilen verwendet werden, auf die jeder Mandant Zugriff hat. Weitere Informationen hierzu finden Sie unter Mehrinstanzenfähige Anwendungen mit Tools für elastische Datenbanken und zeilenbasierter Sicherheit.In addition, row-level security can be used to filter which rows each tenant can access - for details, see Multi-tenant applications with elastic database tools and row-level security. Beim Sharding mit mehreren Mandanten ist möglicherweise eine Neuverteilung der Daten zwischen den Datenbanken erforderlich, die mit dem Split-Merge-Tool für elastische Datenbanken durchgeführt wird.Redistributing data among databases may be needed with the multi-tenant sharding pattern, and this is facilitated by the elastic database split-merge tool. Weitere Informationen zu Entwurfsmustern für SaaS-Anwendungen, für die elastische Pools verwendet werden, finden Sie unter Entwurfsmuster für SaaS-Anwendungen mit mehreren Mandanten und Azure SQL-Datenbank.To learn more about design patterns for SaaS applications using elastic pools, see Design Patterns for Multi-tenant SaaS Applications with Azure SQL Database.

Verschieben von Daten aus Datenbanken mit mehreren Mandanten in Datenbanken mit EinzelmandantMove data from multiple to single-tenancy databases

Wenn Sie eine SaaS-Anwendung erstellen, wird Interessenten üblicherweise eine Testversion der Software bereitgestellt.When creating a SaaS application, it is typical to offer prospective customers a trial version of the software. In diesem Fall ist es aus Kostengründen sinnvoll, für die Daten eine Datenbank mit mehreren Mandanten zu verwenden.In this case, it is cost-effective to use a multi-tenant database for the data. Wenn aus dem Interessenten allerdings ein Kunde wird, ist eine Datenbank mit nur einem Mandanten die bessere Wahl, da diese eine bessere Leistung bietet.However, when a prospect becomes a customer, a single-tenant database is better since it provides better performance. Falls der Kunde während des Testzeitraums Daten erstellt hat, können Sie diese mithilfe des Split-Merge-Tools aus der Datenbank mit mehreren Mandanten in die neue Einzelmandantendatenbank verschieben.If the customer had created data during the trial period, use the split-merge tool to move the data from the multi-tenant to the new single-tenant database.

Nächste SchritteNext steps

Unter Erste Schritte mit Tools für elastische Datenbankenfinden Sie eine Beispiel-App zur Veranschaulichung der Clientbibliothek.For a sample app that demonstrates the client library, see Get started with Elastic Database tools.

Informationen zum Umwandeln von vorhandenen Datenbanken für die Verwendung der Tools finden Sie unter Migrieren von vorhandenen Datenbanken zur horizontalen Hochskalierung.To convert existing databases to use the tools, see Migrate existing databases to scale out.

Einzelheiten zum Pool für elastische Datenbanken finden Sie unter Überlegungen zum Preis und zur Leistung von Pools für elastische Datenbanken. Informationen zum Erstellen eines neuen Pools finden Sie unter Erstellen und Verwalten eines Pools für elastische Datenbanken über das Azure-Portal.To see the specifics of the elastic pool, see Price and performance considerations for an elastic pool, or create a new pool with elastic pools.

Weitere RessourcenAdditional resources

Verwenden Sie noch keine elastischen Datenbanktools?Not using elastic database tools yet? Sehen Sie sich unseren Leitfaden zu den ersten Schritten an.Check out our Getting Started Guide. Bei Fragen erreichen Sie uns im Forum für SQL-Datenbank, Featureanforderungen können Sie im Feedbackforum für SQL-Datenbank einreichen.For questions, please reach out to us on the SQL Database forum and for feature requests, please add them to the SQL Database feedback forum.