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.
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
}- **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
| Einheit | Klasse und Konfidenz | Begründung |
|---|---|---|
| Bigtable-Instanz (mit ihrer Tabelle) | REDESIGN, LOW | STACKIT 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, LOW | Nicht 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, LOW | Nicht im Katalog. Trägt die Versionsregel der anderen Column Family. |
| Application Profile mit Single-Cluster-Routing | MANUAL_REVIEW, LOW | Nicht 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.
| Option | Was sie bedeutet | Abwä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 Zeitstempel | Sie 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 Dokumentmodell | STACKIT beschreibt es als verwalteten MongoDB-Dienst, kompatibel mit nativem MongoDB | Schlü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-Bereiche | Verwaltet 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 Dateien | Günstig und dauerhaft, aber ohne Lookups mit niedriger Latenz. Meist Ergänzung zu einer anderen Option, kein Ersatz. |
Wohin welches Bigtable-Konstrukt geht
| Bigtable-Konstrukt | Was es tut | Was Sie entscheiden |
|---|---|---|
| Row Key | Der einzige indizierte Wert; Zeilen werden danach sortiert gespeichert, das Schlüsseldesign bestimmt also Schreibverteilung und Bereichslesen | Welche Abfragen ein einzelnes Bereichslesen bleiben müssen. Googles Schema-Hinweise warnen vor Zeitstempel am Schlüsselanfang wegen Hotspots. |
| Column Families und Qualifier | Gruppieren verwandte Spalten; jede Zelle hält Versionen mit Zeitstempel | Die Namen sind im Lauf offene Einstellungen. Entscheiden Sie, ob Versionen überhaupt eine Rolle spielen. |
| Garbage-Collection-Policy | Alters- und Versionsregeln je Column Family, von einem Hintergrundprozess angewandt | Das 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 Zonen | Die Replikation beginnt, sobald ein zweiter Cluster hinzukommt; Instanzen mit mehr als einem Cluster arbeiten standardmäßig mit Eventual Consistency | Replikation und Cluster-Zone sind offene Einstellungen. Legen Sie die Platzierung der Replikate auf STACKIT fest und welche Konsistenz Ihre Leser akzeptieren. |
| Application Profile | Steuert die Anfragen einer Anwendung; im Beispiel bindet Single-Cluster-Routing ingest an telemetry-ew3-a | Jeden Workload fest einem Cluster zuweisen oder jeden zulassen; im Zielspeicher gibt es dieses Objekt nicht. |
So wählen Sie
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. 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. 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. 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. 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. 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.