[RFC] Cloud Bigtable Storage Backend
Los mantenedores suelen responder en 2 días
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 25/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Tranquilo
- Stack tecnológico
- google-cloud, postgresql, rust
- Área
- backend, database, distributed-systems
Línea de trabajo
Start by locating the StorageEngine trait and existing storage backend implementations to understand the required operations. Then review how the project configures storage backends and handles transactions, GSIs, and TTL. The proposal describes the expected Bigtable table layout and configuration; completion means implementing the mandatory trait subset with the stated DynamoDB compatibility, transaction isolation, and TTL behavior.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
Defines the design and implementation of a production-grade Cloud Bigtable storage backend for ExtendDB. It specifies the mapping of the DynamoDB data model, query engine, transaction controls, and streams onto Google Cloud Bigtable. The design focuses on ensuring that workloads utilizing the DynamoDB API can run on GCP with high fidelity, guaranteeing transaction isolation, serializability, and scalable Time-to-Live (TTL) eviction.
Motivation
ExtendDB's goal is to allow developers to use the DynamoDB programming model in environments where the managed DynamoDB service is unavailable. Implementing a production-ready Cloud Bigtable connector supports this mission by:
- Enabling Multi-Cloud Portability
- Supporting Hybrid Deployments
- Ensuring API Fidelity
Proposed design
Describe the design in enough detail that someone familiar with ExtendDB could implement it. Include:
- API surface (new operations, changed behavior, wire format)
- Implements the full mandatory subset of the StorageEngine trait.
- Enforces strict GSI projection checks: queries requesting non-projected attributes on a GSI return
- ValidationException (matching DynamoDB behavior) instead of performing slow base-table fetches.
- Storage implications (schema changes, new tables, migration path)
- Catalog Metadata: System metadata, accounts, and policies are stored in a single table named
__extenddb_catalog__. - Data Tables: DynamoDB tables map to Bigtable tables named
t<table_id_hex>(wheretable_id_hexis a 32-character hex UUID). Data attributes are stored in column familyd. - GSIs: Shadow tables are named
t<table_id_hex>_g<idx_hash>(whereidx_hashis an 8-character hash of the index name) to respect Bigtable's 50-character limit. - Transaction Intents: Column family
min data tables stores locks. - TTL Index Table: Introduces a dedicated, sharded shadow table
__extenddb_ttl_index__with key encoding[shard_id:1] [expiry_timestamp_be:8] [account_id_len:1] [account_id] [table_name_len:1] [table_name] [encoded_base_row_key]. This allows targeted range scans for expired items rather than scanning entire data tables.
- Catalog Metadata: System metadata, accounts, and policies are stored in a single table named
- Configuration (new
extenddb.tomlsections or flags)- Adds the following [storage.bigtable] block to extenddb.toml:
[storage]
backend = "bigtable"
[storage.bigtable]
project_id = "my-project"
instance_id = "my-instance"
data_instance_id = "my-data-instance" # Optional (defaults to instance_id)
credentials_path = "/path/to/sa-key.json" # Optional (falls back to ADC)
pool_size = 20
DynamoDB compatibility
How does this relate to the real DynamoDB API? Is this:
- Matching existing DynamoDB behavior
- Extending beyond DynamoDB (ExtendDB-specific)
- Deliberately diverging from DynamoDB (explain why)
Alternatives considered
- Unprotected Single-Row Writes: Bypassing intent locks for non-transactional writes simplifies implementation but permits dirty writes/overwrites on active transactions, breaking serializability. Rejected to preserve API correctness.
- Scan-Based TTL Sweeper: Scanning the entire base table to evict expired items is simple to implement but does not scale beyond small tables and creates massive read overhead. Rejected in favor of the sharded TTL index table.
- Cloud Spanner Backend: Cloud Spanner natively supports multi-row transactions. This is a very viable alternative, but it has a different performance, indexing, and pricing profile compared to Bigtable. A Spanner connector should be built as a separate, distinct backend.
Breaking changes
None
Open questions
List anything unresolved that needs discussion before implementation.
- Tombstone Management on TTL Index: The extenddb_ttl_index table will accumulate empty row tombstones as keys expire. We need to define optimal Bigtable Garbage Collection (GC) policies to ensure compaction cleans them up efficiently.
- GSI Reconciliation Frequency: How often should the background GSI reconciler scan for mismatches? It should be configurable to allow operators to balance consistency latency against node load.
- Lenguaje dominante
- Rust
- Estrellas
- 517
- Forks
- 60
- Merge medio
- 2 d 23 h
- PR fusionados (30 d)
- 25
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de ExtendDB/extenddb
-
documentation
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 2 días
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
Los mantenedores suelen responder en 2 días
-
[storage.cassandra] accepts unknown keys silentlyPosiblemente ocupada @LeeroyHannigan la tomó hace 1 día. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
ExtendDB/extenddb#540 · 1 asignado ·
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 2 días
-
documentation
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
Los mantenedores suelen responder en 2 días
Todos los issues de ExtendDB/extenddb
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
FavioVazquez/mollify#62 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 61/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
fendouai/awesome-deepseek-harness#125 ·
Los mantenedores suelen responder en 4 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
rust-embedded/heapless#694 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 75/100
Los mantenedores suelen responder en 1 día