docs: add RFC draft for Cloud Bigtable storage backend - #186
Conversation
88190c4 to
e0d1d91
Compare
|
Thank you for this RFC. At a quick glance, this looks solid. Let me do a thorough review and circle back to you early next week (week commencing 6 July). |
|
Thanks for the detailed RFC, @annguy3n this is a strong design and we're happy to accept a Cloud Bigtable backend on these lines. You've clearly thought hard about the DynamoDB semantics: the lock-then-read 2PC, single-row write guarding, stream replay via the txn log, and the sharded TTL index are exactly the right calls given Bigtable's single-row atomicity. A few DynamoDB-parity points to fold in, split into what must match vs. what's fine to differ if documented: Must match DynamoDB
Fine to differ, just call it out
Overall: accepted in principle, let's tighten the TTL-stream path, key-encoding, and the read-isolation guarantees in the doc, then move to implementation behind the opt-in feature. Really nice write-up. |
|
@LeeroyHannigan Thanks for the feedback, I've updated the RFC to address them. Let me know if you have any other questions/comments. |
a217f51 to
0a09a0f
Compare
Proposes the design of a production-grade Cloud Bigtable storage backend for ExtendDB. Key items include a Lock-then-Read 2PC transaction flow, sharded TTL indexing shadow table, GSI projection enforcement, and secure GCP authentication config.
- Promoted exact decimal number key encoding to core design specification. - Documented TransactWriteItems ClientRequestToken idempotency (10m) and duplicate item rejection rules. - Clarified read isolation guarantees (no dirty reads via CF 'd' snapshot writes and serializable TransactGetItems). - Documented TTL sweeper REMOVE stream emission with service principal identity. - Added explicit ConsistentRead=true rejection on GSIs. - Called out cross-row visibility in apply window and PITR retention differences.
0a09a0f to
aa6a7a5
Compare
|
Hi @annguy3n , Thanks for the update to the RFC, please find below my findings BlockingB1. Internal phase-numbering is self-contradictory. The 2PC mermaid in 2.B defines exactly three labeled phases (Phase 1 Open, Phase 2 Commit, Phase 3 Clean up), with intent placement and data apply as unlabeled steps. But the prose references non-existent/contradictory phases: 2.C says intents are written in "Phase 3" (the diagram's Phase 3 is Clean up) and data is applied "only in Phase 7"; 3 says log enrichment in "Phase 2" and stream records written in "Phase 5"; the recovery sweeper (2.E) and streams (3.4) roll forward against these. There is no Phase 4–7 anywhere. This must be reconciled to a single consistent phase list before implementation, because the commit/visibility ordering (see B2) hinges on which phase is the durable commit point. B2. Non-blockingN1. Commit-point vs client-ack visibility gap (needs to be pinned down). 2.C states data in N2. GSI row-key delimiter contradicts the string-key encoding rule. 1.B first says String/Binary keys use "null-byte / length-prefixed terminators to preserve lexicographical sort order," then defines the GSI shadow row key as N3. Trait name is stale vs Notes (positive / low-risk)
Thanks again, looking forward to seeing your implementation of Bigtable here. |
What
This PR introduces the draft design for the Cloud Bigtable storage backend (RFC-0003).
Key design highlights include:
Why
Cloud Bigtable is GCP's managed wide-column store and serves as the natural target for DynamoDB workloads migrating to GCP. A robust connector allows AWS-to-GCP migration for high-throughput, low-latency applications with zero code changes.
Checklist
ADR / RFC: #185
By submitting this pull request, I confirm that my contribution is made under
the terms of the Apache License 2.0 and I agree to the Developer Certificate of
Origin (DCO). See CONTRIBUTING.md for details.