Share via


Materialisierte Sichten in Azure Cosmos DB for Apache Cassandra (Vorschau)

GILT FÜR: Cassandra

Wichtig

Materialisierte Sichten in Azure Cosmos DB for Apache Cassandra befinden sich derzeit in der Vorschau. Sie können dieses Feature im Azure-Portal aktivieren. Diese Vorschau materialisierter Sichten wird ohne Vereinbarung zum Servicelevel bereitgestellt. Materialisierte Sichten werden derzeit nicht für Produktionsworkloads empfohlen. Bestimmte Features dieser Vorschauversion werden möglicherweise nicht unterstützt oder sind nur eingeschränkt verwendbar. Weitere Informationen finden Sie in den zusätzlichen Nutzungsbestimmungen für Microsoft Azure-Vorschauversionen.

Materialisierte Sichten helfen bei der effizienten Abfrage einer Basistabelle (oder eines Containers in Azure Cosmos DB) mit Filtern, die keine Primärschlüssel sind. Wenn Benutzer Daten in die Basistabelle schreiben, wird die materialisierte Sicht automatisch im Hintergrund generiert. Diese Sicht kann für effiziente Nachschlagevorgänge einen anderen Primärschlüssel haben. Die Sicht enthält außerdem nur Spalten, die explizit aus der Basistabelle projiziert werden. Diese Sicht ist eine schreibgeschützte Tabelle.

Sie können mithilfe sekundärer Indizes einen Spaltenspeicher ohne Angabe eines Partitionsschlüssels abfragen. Die Abfrage ist jedoch für Spalten mit hoher oder niedriger Kardinalität nicht effektiv. Die Abfrage könnte alle Daten nach einem kleinen Resultset durchsuchen. Solche Abfragen sind letztlich aufwendig, da sie unbeabsichtigt als partitionsübergreifende Abfrage ausgeführt werden.

Eine materialisierte Sicht dient für Folgendes:

  • Verwenden als Nachschlage- oder Zuordnungstabelle, um partitionsübergreifende Scans beizubehalten, die andernfalls aufwendige Abfragen wären.
  • Bereitstellen eines SQL-basierten bedingten Prädikats, um nur bestimmte Spalten und Daten aufzufüllen, die die Vorbedingung erfüllen
  • Erstellen von Echtzeitansichten zur Vereinfachung ereignisbasierter Szenarien, die üblicherweise mithilfe von Änderungsfeedtriggern als separate Sammlungen gespeichert werden

Vorteile von materialisierten Sichten

Materialisierte Sichten haben viele Vorteile, wie z. B.:

  • Sie können mithilfe materialisierter Sichten serverseitige Denormalisierung implementieren. Dank serverseitiger Denormalisierung können Sie mehrere unabhängige Tabellen und eine rechenintensive Denormalisierung in Clientanwendungen vermeiden.
  • Materialisierte Sichten, die Sichten automatisch aktualisieren, um sie in Einklang mit der Basistabelle zu halten. Diese automatische Aktualisierung abstrahiert die Zuständigkeiten Ihrer Clientanwendungen, die normalerweise benutzerdefinierte Logik implementieren würden, um doppelte Schreibvorgänge in der Basistabelle und der Sicht durchzuführen.
  • Materialisierte Sichten optimieren die Leseleistung durch Lesen von Daten aus einer einzelnen Sicht.
  • Sie können den Durchsatz für die materialisierte Sicht unabhängig angeben.
  • Sie können eine Generatorebene für materialisierte Sichten konfigurieren, die Ihren Anforderungen für die Auffüllung einer Ansicht zugeordnet ist.
  • Materialisierte Sichten verbessern die Schreibleistung, da Schreibvorgänge nur in die Basistabelle erfolgen müssen.
  • Darüber hinaus basiert die Azure Cosmos DB-Implementierung materialisierter Sichten auf einem Pullmodell. Diese Implementierung wirkt sich nicht auf die Schreibleistung aus.

Erste Schritte mit materialisierten Sichten

Erstellen Sie mithilfe der Azure CLI neue API für Cassandra-Konten, um das Feature „Materialisierte Sichten“ entweder mit einem nativen Befehl oder REST-API-Vorgang zu aktivieren.

  1. Melden Sie sich beim Azure-Portal an.

  2. Navigieren Sie zu Ihrem API für Cassandra-Konto.

  3. Wählen Sie im Menü „Ressource“ die Option Einstellungen aus.

  4. Wählen Sie im Abschnitt Einstellungen die Option Materialisierte Sicht für Cassandra-API (Vorschau) aus.

  5. Wählen Sie im neuen Dialogfeld Aktivieren aus, um dieses Feature für dieses Konto zu aktivieren.

    Screenshot des Features „Materialisierte Sichten“, das im Azure-Portal aktiviert wird.

Hinter den Kulissen

Die API für Cassandra verwendet eine Computeschicht für den Generator für materialisierte Sichten, um die Sichten zu verwalten.

Sie können die Compute-Instanzen des Generators von Sichten auf Grundlage Ihrer Anforderungen an Latenz und Verzögerung konfigurieren, um die Sichten aufzufüllen. Aus technischer Sicht hilft diese Compute-Ebene bei der effizienteren Verwaltung von Verbindungen zwischen Partitionen, selbst wenn die Datenmenge groß und die Anzahl der Partitionen hoch ist.

Die Computecontainer werden von allen materialisierten Sichten innerhalb eines Azure Cosmos DB-Kontos gemeinsam genutzt. Jeder bereitgestellte Computecontainer erzeugt mehrere Aufgaben, die den Änderungsfeed aus Basistabellenpartitionen lesen und Daten in die materialisierten Zielsichten schreiben. Der Computecontainer transformiert die Daten gemäß der Definition materialisierter Sichten für jede materialisierte Sicht im Konto.

Erstellen eines Generators für materialisierte Sichten

Erstellen Sie einen Generator für materialisierte Sichten, um Daten automatisch zu transformieren und in eine materialisierte Sicht zu schreiben.

  1. Melden Sie sich beim Azure-Portal an.

  2. Navigieren Sie zu Ihrem API für Cassandra-Konto.

  3. Wählen Sie im Ressourcenmenü Generator für materialisierte Sichten aus.

  4. Konfigurieren Sie auf der Seite Generator für materialisierte Sichten die SKU und Anzahl der Instanzen für den Generator.

    Hinweis

    Diese Option und Seite im Ressourcenmenü werden nur angezeigt, wenn das Feature „Materialisierte Sichten“ für das Konto aktiviert ist.

  5. Wählen Sie Speichern aus.

Erstellen einer materialisierten Sicht

Nachdem Ihr Konto und der Generator für materialisierte Sichten eingerichtet wurde, sollten Sie materialisierte Sichten mithilfe von CQLSH erstellen können.

Hinweis

Wenn Sie das eigenständige CQLSH-Tool noch nicht installiert haben, finden Sie unter Installieren des CQLSH-Tools weitere Informationen. Sie sollten im Tool auch Ihre Verbindungszeichenfolge aktualisieren.

Es folgen einige Beispielbefehle zum Erstellen einer materialisierten Sicht:

  1. Erstellen Sie zunächst den Keyspacenamenuprofile.

    CREATE KEYSPACE IF NOT EXISTS uprofile WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 1 };
    
  2. Erstellen Sie als Nächstes im Keyspace eine Tabelle mit dem Namen user.

    CREATE TABLE IF NOT EXISTS uprofile.USER (user_id INT PRIMARY KEY, user_name text, user_bcity text);
    
  3. Erstellen Sie nun im selben Keyspace eine materialisierte Sicht namens user_by_bcity. Geben Sie mithilfe einer Abfrage an, wie Daten aus der Basistabelle in die Sicht projiziert werden.

    CREATE MATERIALIZED VIEW uprofile.user_by_bcity AS 
    SELECT
        user_id,
        user_name,
        user_bcity 
    FROM
        uprofile.USER 
    WHERE
        user_id IS NOT NULL 
        AND user_bcity IS NOT NULL PRIMARY KEY (user_bcity, user_id);
    
  4. Fügen Sie Zeilen in die Basistabelle ein.

    INSERT INTO
        uprofile.USER (user_id, user_name, user_bcity) 
    VALUES
        (
            101, 'johnjoe', 'New York' 
        );
    
    INSERT INTO
        uprofile.USER (user_id, user_name, user_bcity) 
    VALUES
        (
            102, 'james', 'New York' 
        );
    
  5. Fragen Sie die materialisierte Sicht ab.

    SELECT * FROM user_by_bcity; 
    
  6. Beobachten Sie die Ausgabe der materialisierten Sicht.

     user_bcity | user_id | user_name 
    ------------+---------+----------- 
       New York |     101 |   johnjoe 
       New York |     102 |     james 
    
    (2 rows) 
    

Optional können Sie auch den Ressourcenanbieter verwenden, um eine materialisierte Sicht zu erstellen oder zu aktualisieren.

Aktuelle Einschränkungen

Die Vorschauimplementierung materialisierter Sichten für die API für Cassandra weist einige Einschränkungen auf:

  • Materialisierte Sichten können nicht für eine Tabelle erstellt werden, die bereits vorhanden war, bevor die Unterstützung für materialisierte Sichten für das Konto aktiviert wurde. Erstellen Sie zum Verwenden materialisierter Sichten eine neue Tabelle, nachdem das Feature aktiviert wurde.
  • Für die WHERE-Klausel der Definition der materialisierten Sicht sind derzeit nur IS NOT NULL-Filter zulässig.
  • Nachdem eine materialisierte Sicht für eine Basistabelle erstellt wurde, sind ALTER TABLE ADD-Vorgänge im Schema der Basistabelle nicht zulässig. ALTER TABLE APP ist nur zulässig, wenn keine der materialisierten Sichten in ihrer Definition * ausgewählt hat.
  • Es gelten Grenzwerte für die Größe des Partitionsschlüssels (2 KB) und die Gesamtlänge des Clusterschlüssels (1 KB). Wenn diese Obergrenze überschritten wird, landet die betreffende Nachricht in der Warteschlange für nicht verarbeitbare Nachrichten.
  • Wenn eine Basistabelle benutzerdefinierte Typen aufweist und die Definition der materialisierten Sicht entweder SELECT * FROM oder den benutzerdefinierten Typ in einer der projizierten Spalten aufweist, sind Aktualisierungen benutzerdefinierter Typen für das Konto nicht zulässig.
  • Materialisierte Sichten können nach einem automatischen regionalen Failover für einige Zeilen inkonsistent mit der Basistabelle werden. Um diese Inkonsistenz zu vermeiden, erstellen Sie die materialisierte Sicht nach dem Failover neu.
  • Das Erstellen von Instanzen des Generators für materialisierte Sichten mit 32 Kernen wird nicht unterstützt. Bei Bedarf können Sie mehrere Generatorinstanzen mit einer geringeren Anzahl von Kernen erstellen.

Berücksichtigen Sie zusätzlich zu den oben genannten Einschränkungen die folgenden zusätzlichen Einschränkungen:

  • Verfügbarkeitszonen
    • Materialisierte Sichten können nicht für ein Konto mit Regionen mit aktivierter Verfügbarkeitszone aktiviert werden.
    • Das Hinzufügen einer neuen Region mit einer Verfügbarkeitszone wird nicht unterstützt, wenn enableMaterializedViews für das Konto auf TRUE festgelegt ist.
  • Regelmäßige Sicherung und Wiederherstellung
    • Materialisierte Sichten werden nicht automatisch mit dem Wiederherstellungsprozess wiederhergestellt. Sie müssen nach dem Wiederherstellungsprozess die materialisierten Sichten neu erstellen. Anschließend sollten Sie enableMaterializedViews für ihr wiederhergestelltes Konto konfigurieren, ehe Sie die materialisierten Sichten und Generatoren erneut erstellen.
  • Apache Cassandra
    • Die Definition einer Richtlinie zur Konfliktlösung für materialisierte Sichten ist nicht zulässig.
    • Schreibvorgänge sind in materialisierten Sichten nicht zulässig.
    • Dokumentübergreifende Abfragen und Aggregatfunktionen werden für materialisierte Sichten nicht unterstützt.
    • Das Schema einer materialisierten Sicht kann nach seiner Erstellung nicht geändert werden.
    • Das Löschen der Basistabelle ist nicht zulässig, wenn mindestens eine materialisierte Sicht für sie definiert ist. Zuerst müssen alle Sichten gelöscht werden, und erst danach kann die Basistabelle gelöscht werden.
    • Das Definieren materialisierter Sichten für Container mit statischen Spalten ist nicht zulässig.

Nächste Schritte