Benutzerdefinierte Partitionierung in Azure Synapse Link für Azure Cosmos DB

GILT FÜR: NoSQL MongoDB Gremlin

Mit der benutzerdefinierten Partitionierung können Sie Daten des Analysespeichers in Feldern partitionieren, die häufig als Filter in Analyseabfragen verwendet werden, um die Abfrageleistung zu verbessern.

In diesem Artikel wird beschrieben, wie Sie Ihre Daten im Azure Cosmos DB-Analysespeicher mit Schlüsseln partitionieren, die für Ihre Analyse-Workloads von entscheidender Bedeutung sind. Darüber hinaus wird beschrieben, wie Sie die verbesserte Abfrageleistung mit Partitionsbereinigung nutzen. Sie erfahren auch, wie die benutzerdefinierte Partitionierung zur Verbesserung der Abfrageleistung beiträgt, wenn für Ihre Workloads eine erhebliche Anzahl von Aktualisierungs- oder Löschvorgängen durchgeführt werden muss.

Hinweis

Azure Synapse Link sollte für Azure Cosmos DB-Konten und Container aktiviert sein, um die Vorteile der benutzerdefinierten Partitionierung nutzen zu können.

Wie funktioniert dies?

Die Partitionierung des Analysespeichers ist von der Partitionierung im Transaktionsspeicher unabhängig. Der Analysespeicher ist standardmäßig nicht partitioniert. Wenn Sie den Analysespeicher häufig basierend auf Feldern wie Datum, Uhrzeit, Kategorie usw. abfragen möchten, können Sie die benutzerdefinierte Partitionierung nutzen, um auf Grundlage dieser Schlüssel einen partitionierten Speicher zu erstellen. Sie können entweder ein einzelnes Feld oder eine Felderkombination aus Ihrem Dataset als Partitionsschlüssel für den Analysespeicher auswählen.

Sie können die Partitionierung von einem Azure Synapse Spark-Notebook mithilfe von Azure Synapse Link auslösen. Sie können sie als Hintergrundauftrag planen, der ein- oder zweimal täglich bzw. bei Bedarf auch häufiger ausgeführt wird.

Hinweis

Der partitionierte Speicher verweist auf das primäre ADLS Gen2-Speicherkonto, das mit dem Azure Synapse-Arbeitsbereich verknüpft ist.

Architecture of partitioned store in Azure Synapse Link for Azure Cosmos DB

Der partitionierte Speicher enthält die Azure Cosmos DB-Analysedaten bis zum letzten Zeitstempel der Ausführung Ihres Partitionierungsauftrags. Wenn Sie Analysedaten mithilfe der Partitionsschlüsselfilter abfragen, führt Synapse Link automatisch partitionierte Speicherdaten mit den neuesten Änderungen im Analysespeicher zusammen. So erhalten Sie die neuesten Ergebnisse für Ihre Abfragen. Die Daten werden vor dem Abfragen zwar zusammengeführt, aber die Deltadaten werden nicht in den partitionierten Speicher zurückgeschrieben. Wenn die Deltaabweichung zwischen Daten im Analysespeicher und im partitionierten Speicher größer wird, können die Abfragedauern für partitionierte Daten ggf. variieren. Diese Deltaabweichung wird verringert, wenn der Partitionierungsauftrag häufiger ausgelöst wird. Bei jeder Ausführung des Partitionierungsauftrags wird nicht das gesamte Dataset verarbeitet, sondern nur inkrementelle Änderungen im Analysespeicher.

Einsatzgebiete

Die Verwendung des partitionierten Speichers beim Abfragen von analytischen Daten in Azure Cosmos DB ist optional. Sie können dieselben Daten direkt abfragen, indem Sie Synapse Link mit dem vorhandenen Analysespeicher verwenden. Die Aktivierung des partitionierten Speichers kann ratsam sein, wenn bei Ihnen die folgenden Anforderungen gelten:

  • Allgemeine analytische Abfragefilter, die als Partitionsspalten verwendet werden können
  • Partitionsspalten mit niedriger Kardinalität
  • Gleichmäßige Verteilung von Daten auf die Partitionen über die Partitionsspalten
  • Große Menge an Update- oder Löschvorgängen
  • Langsame Datenerfassung

Wenn Sie Live-Daten mithilfe von Abfragefiltern abfragen, die sich von Partitionsschlüsseln unterscheiden, empfiehlt es sich, den analytischen Speicher direkt abzufragen.

Vorteile

Reduzierung der überprüften Datenmenge durch Partitionsbereinigung

Da die Daten zu den einzelnen eindeutigen Partitionsschlüsseln gemeinsam im partitionierten Speicher angeordnet sind, können die zugrunde liegenden Daten bei Verwendung des Partitionsschlüssels als Abfragefilter bei den Abfrageausführungen bereinigt werden, damit nur die erforderlichen Daten überprüft werden. Dank der Partitionsbereinigung wird die Leistung von Analyseabfragen verbessert, weil nur ein Teil der Daten überprüft werden muss.

Flexible Partitionierung Ihrer analytischen Daten

Sie können mehrere Partitionierungsstrategien für einen bestimmten Analysespeichercontainer verwenden. Sie können z. B. zusammengesetzte oder separate Partitionsschlüssel basierend auf Ihren Abfrageanforderungen nutzen.

Verbesserungen bei der Abfrageleistung

Zusätzlich zu den Abfrageverbesserungen durch die Partitionsbereinigung führt die benutzerdefinierte Partitionierung auch zu einer verbesserten Abfrageleistung für die folgenden Workloads:

  • Aktualisieren/Löschen von Workloads mit vielen Vorgängen: Anstatt mehrere Versionen von Datensätzen im Analysespeicher nachzuverfolgen und bei jeder Ausführung der Abfrage zu laden, enthält der partitionierte Speicher nur die aktuelle Version der Daten. Hierdurch wird die Abfrageleistung erheblich verbessert, wenn Sie über Workloads mit vielen Aktualisierungs- bzw. Löschvorgängen verfügen.

  • Workloads mit langsamer Datenerfassung: Bei der Partitionierung werden analytische Daten komprimiert. Wenn für Ihre Workload die Datenerfassung nur langsam erfolgt, kann diese Komprimierung also zu einer besseren Abfrageleistung führen.

Transaktionsgarantie

Beachten Sie den wichtigen Hinweis, dass bei der benutzerdefinierten Partitionierung eine vollständige Transaktionsgarantie gilt. Der Abfragepfad wird nicht blockiert, während die Partitionierung ausgeführt wird. Bei jeder Ausführung der Abfrage werden die partitionierten Daten der letzten erfolgreichen Partitionierung gelesen. Hierbei werden die neuesten Daten aus dem Analysespeicher gelesen. So wird sichergestellt, dass bei Abfragen immer die neuesten verfügbaren Daten zurückgegeben werden, wenn der partitionierte Speicher verwendet wird.

Sicherheit

Wenn Sie verwaltete private Endpunkte für Ihren Analysespeicher konfiguriert haben, empfehlen wir Ihnen Folgendes: Fügen Sie für den partitionierten Speicher verwaltete private Endpunkte hinzu. Der partitionierte Speicher ist das primäre Speicherkonto, das Ihrem Synapse-Arbeitsbereich zugeordnet ist.

Ebenso gilt Folgendes: Wenn Sie kundenseitig verwaltete Schlüssel für den Analysespeicher konfiguriert haben, müssen Sie dies auch direkt im primären Speicherkonto (partitionierter Speicher) des Synapse-Arbeitsbereichs aktivieren.

Partitionierungsstrategien

Sie können einen oder mehrere Partitionsschlüssel für Ihre analytischen Daten verwenden. Wenn Sie mehrere Partitionsschlüssel verwenden, finden Sie im Folgenden einige Empfehlungen zum Partitionieren der Daten:

  • Verwenden zusammengesetzter Schlüssel:

    Gehen wir davon aus, dass Sie häufig Abfragen basierend auf Key1 und Key2 ausführen wollen.

    Beispiel: „Abfragen aller Datensätze mit ReadDate = '2021-10-08' und Location = 'Sydney'“.

    In diesem Fall ist die Verwendung zusammengesetzter Schlüssel effizienter, um nach allen Datensätzen zu suchen, die mit ReadDate übereinstimmen, und dann nach allen Datensätzen, die innerhalb dieses ReadDates mit der Location übereinstimmen.

    Beispiele für Konfigurationsoptionen:

    .option("spark.cosmos.asns.partition.keys", "ReadDate String, Location String") \
    .option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \
    

    Jetzt kann abfragen, basierend auf dem „Speicherort“-Filter:

    • Ist es möglicherweise besser, die Abfrage direkt an den Analysespeicher durchzuführen. Der partitionierte Speicher überprüft zuerst alle Datensätze nach ReadDate und dann nach Speicherort. Je nach Workload und Kardinalität Ihrer analytischen Daten erhalten Sie also möglicherweise bessere Ergebnisse, wenn Sie den Analysespeicher direkt abfragen.
    • Sie können auch einen anderen Partitionsauftrag ausführen, um eine Partitionierung auf Grundlage der „Location“ im gleichen partitionierten Speicher durchzuführen.
  • Separates Verwenden mehrerer Schlüssel:

    Gehen wir davon aus, dass Sie manchmal Abfragen basierend auf „ReadDate“ und manchmal Abfragen basierend auf „Location“ ausführen wollen.

    Beispiel:

    • Abfragen aller Datensätze, bei denen ReadDate = '2021-10-08'
    • Abfragen aller Datensätze, bei denen Location = 'Sydney'

    Führen Sie zwei Partitionsaufträge mit den nachstehend für dieses Szenario definierten Partitionsschlüsseln aus:

    Auftrag 1:

    .option("spark.cosmos.asns.partition.keys", "ReadDate String") \
    .option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \
    

    Auftrag 2:

    .option("spark.cosmos.asns.partition.keys", "Location String") \
    .option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \
    

    Beachten Sie, dass es bei der obigen Partitionierung nicht effizient ist, häufige Abfragen auf Grundlage von „ReadDate“- und „Speicherort“-Filtern zusammen auszuführen. In diesem Fall bieten zusammengesetzte Schlüssel eine bessere Abfrageleistung.

Begrenzungen

  • Die benutzerdefinierte Partitionierung ist nur für Azure Synapse Spark verfügbar. Für serverlose SQL-Pools wird die benutzerdefinierte Partitionierung derzeit nicht unterstützt.

  • Für den partitionierten Speicher kann derzeit nur auf das primäre Speicherkonto verwiesen werden, das dem Synapse-Arbeitsbereich zugeordnet ist. Die Auswahl von benutzerdefinierten Speicherkonten wird derzeit noch nicht unterstützt.

  • Die benutzerdefinierte Partitionierung ist nur für die API für NoSQL in Azure Cosmos DB verfügbar. Die API für MongoDB, Gremlin und Cassandra befinden Sie derzeit in Preview.

Preisberechnung

Zusätzlich zu den Kosten, die gemäß den Preisen für Azure Synapse Link anfallen, werden Ihnen bei der Verwendung der benutzerdefinierten Partitionierung die folgenden Gebühren berechnet:

  • Ihnen wird die Nutzung von Synapse Apache Spark-Pools berechnet, wenn Sie Partitionierungsaufträge im Analysespeicher ausführen.

  • Die partitionierten Daten werden im primären Azure Data Lake Storage Gen2-Konto gespeichert, das Ihrem Azure Synapse Analytics-Arbeitsbereich zugeordnet ist. Ihnen werden die Kosten berechnet, die für die Nutzung des ADLS Gen2-Speichers und die Transaktionen anfallen. Diese Kosten richten sich nach dem Speicher, der für partitionierte analytische Daten benötigt wird, bzw. den verarbeiteten Daten für Analyseabfragen in Synapse. Weitere Informationen zu den Preisen finden Sie unter Azure Data Lake Storage – Preise.

Häufig gestellte Fragen

Wie oft sollte ich den benutzerdefinierten Partitionierungsauftrag ausführen?

Es gibt mehrere Faktoren, z. B. die Menge inkrementeller Daten, die Anforderungen in Bezug auf die Abfragelatenz usw., die bestimmen, wie oft Sie den benutzerdefinierten Partitionierungsauftrag ausführen können. Es ist beispielsweise möglich, dass der Auftrag einmal täglich oder nach einigen Stunden erneut ausgeführt werden kann. Es kann ratsam sein, die Ausführung des Partitionierungsauftrags häufiger einzuplanen, wenn die Menge der eingehenden Daten hoch und die erwartete Abfragelatenz gering ist. Darüber hinaus müssen Sie zunächst inkrementelle Daten im Analysespeicher sammeln, damit sich die Partitionsbereinigung lohnt.

Enthalten die Abfrageergebnisse die neuesten Daten, während der Partitionierungsauftrag ausgeführt wird?

Ja. Für die benutzerdefinierte Partitionierung gilt eine vollständige Transaktionsgarantie. In den Abfrageergebnissen werden also jeweils die vorhandenen partitionierten Daten mit den Tail-Daten kombiniert, um das aktuelle Analysespeicher-Dataset zurückzugeben.

Kann für die benutzerdefinierte Partitionierung die Authentifizierung per verknüpftem Dienst in Azure Synapse Analytics genutzt werden?

Ja. Die Authentifizierung per verknüpftem Dienst kann für die Analysespeicherpartitionierung verwendet werden.

Kann ich den Partitionsschlüssel für einen bestimmten Container zu einem späteren Zeitpunkt ändern?

Ja. Der Partitionsschlüssel für den jeweiligen Container kann geändert werden. Anhand der neuen Partitionsschlüsseldefinition wird dann ein neuer partitionierter Speicher erstellt.

Hinweis

Die Partitionsschlüsseldefinition ist Teil des Pfads für den partitionierten Speicher.

Können unterschiedliche Partitionsschlüssel auf denselben BasePath verweisen?

Ja, wie nachfolgend dargestellt, können Sie mehrere Partitionsschlüssel im gleichen partitionierten Speicher angeben:

.option("spark.cosmos.asns.partition.keys", "ReadDate String, Location String") \
.option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \

Nächste Schritte

Weitere Informationen finden Sie in den folgenden Dokumenten: