BIGTABLE → STACKIT · ARCHITEKTUR

Bigtable-Migration: die Wide-Column-Schicht neu entwerfen

STACKIT hat keinen verwalteten Wide-Column-Dienst; Bigtable ist also erst eine Entwurfsentscheidung und dann eine Migration. StackToIT stuft die Instanz als REDESIGN ein, schreibt dafür kein Terraform und benennt die Einstellungen, die eine Person klären muss: Datenmodell, Replikation, Cluster-Zonen und Namen. Diese Seite legt die realistischen Optionen dar, was jede an Betrieb und Umbau kostet und wie Sie anhand von Code und Daten entscheiden.

Eine Bigtable-Instanz mit ihren Policies, bewertet

Eine für diese Seite geschriebene Umgebung, am 4. November 2026 von StackToIT bewertet: eine Instanz mit zwei Clustern, eine Tabelle mit zwei Column Families, zwei Garbage-Collection-Policies und ein Application Profile. Rechts steht ein wörtlicher Auszug aus engineering/architect-report.md zur Instanz: die Begründung, die enthaltene Tabelle und die drei Warnungen zu den nicht katalogisierten Nachbarn. Für keine der vier Einheiten hat der Lauf Terraform geschrieben.

Beispieleingabemain.tf
resource "google_bigtable_instance" "telemetry" {
  name                = "telemetry"
  deletion_protection = true

  cluster {
    cluster_id   = "telemetry-ew3-a"
    zone         = "europe-west3-a"
    num_nodes    = 3
    storage_type = "SSD"
  }

  cluster {
    cluster_id   = "telemetry-ew3-b"
    zone         = "europe-west3-b"
    num_nodes    = 3
    storage_type = "SSD"
  }
}

resource "google_bigtable_table" "readings" {
  name          = "device-readings"
  instance_name = google_bigtable_instance.telemetry.name
  split_keys    = ["a", "m", "t"]

  column_family {
    family = "metrics"
  }

  column_family {
    family = "meta"
  }
}

resource "google_bigtable_gc_policy" "metrics_ttl" {
  instance_name = google_bigtable_instance.telemetry.name
  table         = google_bigtable_table.readings.name
  column_family = "metrics"

  max_age {
    duration = "720h"
  }
}

resource "google_bigtable_gc_policy" "meta_versions" {
  instance_name = google_bigtable_instance.telemetry.name
  table         = google_bigtable_table.readings.name
  column_family = "meta"

  max_version {
    number = 1
  }
}

resource "google_bigtable_app_profile" "ingest" {
  instance       = google_bigtable_instance.telemetry.name
  app_profile_id = "ingest"

  single_cluster_routing {
    cluster_id                 = "telemetry-ew3-a"
    allow_transactional_writes = false
  }

  ignore_warnings = true
}
Auszug aus dem Architektenberichtengineering/architect-report.md
- **Why:** STACKIT has no wide-column database service; row-key design and the HBase/Bigtable client API move to a self-operated store or a redesigned data model.
- **Includes:** `google_bigtable_table.readings`
- **WARNING** (uncatalogued-related): google_bigtable_app_profile.ingest (google_bigtable_app_profile) is linked to this unit but not in the knowledge base; its effect on the migration is not assessed.
- **WARNING** (uncatalogued-related): google_bigtable_gc_policy.meta_versions (google_bigtable_gc_policy) is linked to this unit but not in the knowledge base; its effect on the migration is not assessed.
- **WARNING** (uncatalogued-related): google_bigtable_gc_policy.metrics_ttl (google_bigtable_gc_policy) is linked to this unit but not in the knowledge base; its effect on the migration is not assessed.
  • Vier Einheiten, keine im Entwurf

    Die Tabelle wird als Facette der Instanz mitgeführt. Die beiden Garbage-Collection-Policies und das Application Profile sind eigene Einheiten der Klasse MANUAL_REVIEW, weil sie nicht im Katalog der Engine stehen: Nichts davon wird bewertet oder entworfen, und der Lauf sagt das ausdrücklich.

  • Warum die Konfidenz hier LOW ist

    Für sich allein, in der Umgebung mit zwölf Ressourcen auf unserer Seite zur Dienstzuordnung, kam dieselbe Instanz auf MEDIUM. Hier führt der Architektenbericht die Instanz bei den verknüpften Einheiten der nicht katalogisierten Garbage-Collection-Policies mit der Konfidenzgrenze LOW. Das heißt: Policies und Profil brauchen den Blick eines Architekten; über die Portierbarkeit der Instanz sagt es nichts.

Was der Lauf einstuft

EinheitKlasse und KonfidenzBegründung
Bigtable-Instanz (mit ihrer Tabelle)REDESIGN, LOWSTACKIT hat keinen Wide-Column-Datenbankdienst. Row-Key-Design und die HBase- oder Bigtable-Client-API wandern in einen selbst betriebenen Speicher oder ein neu entworfenes Datenmodell. Genannte Ziele: ein selbst betriebener Speicher auf SKE oder MongoDB Flex.
Garbage-Collection-Policy, 30 Tage (max_age)MANUAL_REVIEW, LOWNicht im Katalog. Trägt die Aufbewahrungsregel einer Column Family; wo sie künftig lebt, entscheidet ein Architekt.
Garbage-Collection-Policy, eine Version (max_version)MANUAL_REVIEW, LOWNicht im Katalog. Trägt die Versionsregel der anderen Column Family.
Application Profile mit Single-Cluster-RoutingMANUAL_REVIEW, LOWNicht im Katalog. Legt fest, mit welchem Cluster eine Anwendung spricht; ein Speicher ohne diesen Begriff braucht die Entscheidung an anderer Stelle.

Der Datenumzug steht auf DECISION REQUIRED, das Verfahren auf UNKNOWN: Die Quelle nennt weder Datenmenge noch Änderungsrate, und der Lauf rät nicht.

Die Optionen mit ihren Abwägungen

Die ersten beiden sind die Ziele, die die Engine nennt. Die letzten beiden sind allgemeine Praxis, die die Engine nicht vorschlägt; sie passen nur, wenn die Last kleiner oder kälter ist, als ein Bigtable-Einsatz vermuten lässt.

OptionWas sie bedeutetAbwägung
Selbst betriebener Wide-Column-Speicher auf SKE (der Lauf nennt Apache Cassandra oder HBase als Beispiele)Nächstes Datenmodell: Row- oder Partition-Keys, Column Families, Zellen mit ZeitstempelSie betreiben ihn selbst: Updates, Backups, Kapazität und Reparatur. Die Client-API ändert sich, außer Sie wählen HBase. Höchster Betriebsaufwand.
MongoDB Flex mit neu entworfenem DokumentmodellSTACKIT beschreibt es als verwalteten MongoDB-Dienst, kompatibel mit nativem MongoDBSchlüsselbereichszugriffe werden zu Index- oder Shard-Key-Design. Das Schema wird neu geschrieben, nicht übertragen. Prüfen Sie Ihr tatsächliches Volumen und Ihre Schreibrate gegen den Dienst.
PostgreSQL Flex mit partitionierten Tabellen (allgemeine Praxis)Zeit- oder Geräte-Partitionen ersetzen Row-Key-BereicheVerwaltet und relational, aber jeder Zugriffspfad wird neu geschrieben. Sinnvoll bei mäßigem Volumen, nicht bei unbegrenzten Schreibzugriffen.
Object Storage für kalte Historie (allgemeine Praxis)Abgelaufene oder selten gelesene Zeilen landen als DateienGünstig und dauerhaft, aber ohne Lookups mit niedriger Latenz. Meist Ergänzung zu einer anderen Option, kein Ersatz.

Wohin welches Bigtable-Konstrukt geht

Bigtable-KonstruktWas es tutWas Sie entscheiden
Row KeyDer einzige indizierte Wert; Zeilen werden danach sortiert gespeichert, das Schlüsseldesign bestimmt also Schreibverteilung und BereichslesenWelche Abfragen ein einzelnes Bereichslesen bleiben müssen. Googles Schema-Hinweise warnen vor Zeitstempel am Schlüsselanfang wegen Hotspots.
Column Families und QualifierGruppieren verwandte Spalten; jede Zelle hält Versionen mit ZeitstempelDie Namen sind im Lauf offene Einstellungen. Entscheiden Sie, ob Versionen überhaupt eine Rolle spielen.
Garbage-Collection-PolicyAlters- und Versionsregeln je Column Family, von einem Hintergrundprozess angewandtDas Ziel braucht einen eigenen Ablaufmechanismus. Bigtable kann abgelaufene Zellen bis zur Compaction noch liefern; prüfen Sie, ob etwas davon abhängt.
Zwei Cluster in zwei ZonenDie Replikation beginnt, sobald ein zweiter Cluster hinzukommt; Instanzen mit mehr als einem Cluster arbeiten standardmäßig mit Eventual ConsistencyReplikation und Cluster-Zone sind offene Einstellungen. Legen Sie die Platzierung der Replikate auf STACKIT fest und welche Konsistenz Ihre Leser akzeptieren.
Application ProfileSteuert die Anfragen einer Anwendung; im Beispiel bindet Single-Cluster-Routing ingest an telemetry-ew3-aJeden Workload fest einem Cluster zuweisen oder jeden zulassen; im Zielspeicher gibt es dieses Objekt nicht.

So wählen Sie

  1. 1. Zugriffsmuster aus dem Code lesen

    Listen Sie die Abfragen auf: Punktzugriffe per Schlüssel, Präfix- oder Bereichs-Scans, zeitlich geordnete Zugriffe je Gerät. Bereichs-Scans auf einem zusammengesetzten Schlüssel kann ein Wide-Column-Speicher am besten, und jede andere Option muss sie nachbauen.

  2. 2. Die Zahlen beschaffen, die der Lauf nicht liefert

    Datenmenge, Änderungsrate und Schreibdurchsatz stehen nicht im Terraform. Die Datei data-movement.md hält fest, dass Größe und Änderungsrate nicht in der Quelle stehen und tolerierte Ausfallzeit und Recovery Point nicht angegeben wurden; erheben Sie all das im laufenden System, bevor Sie etwas in die engere Wahl nehmen.

  3. 3. Die akzeptierte Konsistenz benennen

    Eine Bigtable-Instanz mit mehreren Clustern arbeitet standardmäßig mit Eventual Consistency. War das eine bewusste Entscheidung, genügt womöglich ein Primary mit Replikat; hat es niemand bemerkt, klären Sie es jetzt.

  4. 4. Aufbewahrung als Anforderung festhalten

    Die Regeln 30 Tage und eine Version im Beispiel sind Anforderungen, keine Einstellungen zum Kopieren. Formulieren Sie die Aufbewahrung fachlich und setzen Sie sie dann im Ziel um.

  5. 5. Betriebsaufwand realistisch rechnen

    Ein selbst betriebener Speicher bringt das nächste Modell und braucht ein Team, das ihn betreiben kann. Ein verwalteter Dienst senkt diesen Aufwand und vergrößert den Umbau. Der Lauf bepreist keines von beiden.

  6. 6. Den Datenumzug zuletzt planen, nicht zuerst

    Verfahren, Zeitfenster und Validierung hängen vom Ziel ab. Wählen Sie sie nach dem Speicher und mit Rollback im Blick: Halten Sie Bigtable lesbar, bis der neue Speicher echten Verkehr bedient hat.

Fragen von Architekten

Bietet STACKIT ein verwaltetes Bigtable-Pendant?

Die Engine findet keines: Ihre Begründung für die Instanz lautet, dass STACKIT keinen Wide-Column-Datenbankdienst hat. Als Ziele nennt sie einen selbst betriebenen Speicher auf SKE oder MongoDB Flex, jeweils nach einem Redesign.

Warum sind die Garbage-Collection-Policies MANUAL_REVIEW?

Sie stehen nicht im Katalog der Engine, deshalb wird nichts davon bewertet oder entworfen. Sie sind trotzdem wichtig, denn sie halten Ihre Aufbewahrungsregeln.

Kann StackToIT die Bigtable-Daten übertragen?

Nein. Es überträgt nie Daten. Der Lauf führt die Instanz als zustandsbehaftete Einheit mit offenem Verfahren und überlässt Datenmenge, Änderungsrate und tolerierte Ausfallzeit Ihnen.

Bedeutet Redesign immer, die Anwendung neu zu schreiben?

In den meisten Fällen wird die Datenzugriffsschicht neu geschrieben. Ein Speicher mit demselben Modell, etwa HBase, verkleinert die Änderung, verlangt aber den Eigenbetrieb.

Quellen

Ihr nächster Schritt: STACKIT.

Erzählen Sie uns von Ihrer Umgebung. Wir zeigen Ihnen, was StackToIT dafür liefert: Zielarchitektur, Terraform-Artefakte und einen strukturierten Migrationsplan.