Freigeben über


Modellieren von Echtzeitanalyse-Apps in Azure Cosmos DB for PostgreSQL

Von Bedeutung

Azure Cosmos DB für PostgreSQL wird für neue Projekte nicht mehr unterstützt. Verwenden Sie diesen Dienst nicht für neue Projekte. Verwenden Sie stattdessen einen der folgenden beiden Dienste:

  • Verwenden Sie für hochskalige Szenarien eine verteilte Datenbanklösung mit Azure Cosmos DB für NoSQL, die ein 99,999%iges Verfügbarkeits-Service-Level-Agreement (SLA), eine sofortige Autoskalierung und ein automatisches regionenübergreifendes Failover bietet.

  • Verwenden Sie die Elastic Clusters-Funktion von Azure Database for PostgreSQL für geshartete PostgreSQL-Datenbanken mithilfe der Open-Source-Erweiterung Citus.

Kolocieren großer Tabellen mit Shardschlüssel

Um den Shardschlüssel für eine operative Echtzeitanalyse-App auszuwählen, befolgen Sie die folgenden Richtlinien:

  • Wählen Sie eine Spalte aus, die in großen Tabellen häufig verwendet wird
  • Wählen Sie eine Spalte aus, die eine natürliche Dimension in den Daten oder ein zentrales Element der Anwendung ist. Einige Beispiele:
    • In der Finanzwelt würde eine Anwendung, die Sicherheitstrends analysiert, wahrscheinlich security_id verwenden.
    • In einem Benutzeranalysen-Workload, in dem Sie Website-Nutzungsmetriken analysieren möchten, wäre user_id eine gute Verteilungsspalte

Indem Sie große Tabellen verlagern, können Sie SQL Abfragen parallel zu Workerknoten herunterpushen. Durch das Herunterpushen von Abfragen wird verhindert, dass Daten zwischen Knoten über dem Netzwerk verschoben werden. Vorgänge wie JOINs, Aggregate, Rollups, Filter, LIMITs können effizient ausgeführt werden.

Um parallele, verteilte Abfragen auf zusammengeführten Tabellen zu visualisieren, betrachten Sie dieses Diagramm.

Abbildungen von Verknüpfungen innerhalb von Workerknoten.

Die Tabellen users und events werden beide durch user_id horizontal partitioniert, sodass verwandte Zeilen für dieselbe Benutzer-ID zusammen auf demselben Workerknoten platziert werden. Die SQL JOINs können passieren, ohne Informationen zwischen Workern zu ziehen.

Optimales Datenmodell für Echtzeit-Apps

Fahren wir mit dem Beispiel einer App fort, die Benutzerwebsitebesuche und -metriken analysiert. Es gibt zwei "Fakten"-Tabellen – Benutzer und Ereignisse – und andere kleinere "Dimensions"-Tabellen.

Abbildung von Benutzer*innen, Ereignissen und sonstigen Tabellen

Führen Sie die folgenden Schritte aus, um die Superleistung verteilter Tabellen auf Azure Cosmos DB for PostgreSQL anzuwenden:

  • Verteilen Sie große Faktentabellen auf einer gemeinsamen Spalte. In unserem Fall werden Benutzer und Ereignisse auf user_idverteilt.
  • Markieren Sie die kleinen/Dimensionstabellen (device_types, countries und `event_types) als Verweistabellen.
  • Achten Sie darauf, die Verteilungsspalte in primäre, eindeutige und Fremdschlüsseleinschränkungen für verteilte Tabellen einzuschließen. Die Spalte kann dazu führen, dass die Schlüssel zusammengesetzt werden. Es müssen Schlüssel für Referenztabellen aktualisiert werden.
  • Wenn Sie große verteilte Tabellen verknüpfen, müssen Sie sie unbedingt mit dem Shardschlüssel verknüpfen.
-- Distribute the fact tables

SELECT create_distributed_table('users', 'user_id');
SELECT create_distributed_table('products', 'user_id', colocate_with => 'users');

-- Turn dimension tables into reference tables, with synchronized copies
-- maintained on every worker node

SELECT create_reference_table('countries');
-- similarly for device_types and event_types...

Nächste Schritte

Jetzt haben wir die Datenmodellierung für skalierbare Apps erkundet. Der nächste Schritt besteht darin, die Datenbank mithilfe der Programmiersprache Ihrer Wahl zu verbinden und abzufragen.