ExtendDB: Jalankan DynamoDB API di Database Anda
Katakanlah sistem pencatatan rumah sakit harus tetap berada di dalam gedung — data pasien bisa jangan pernah meninggalkan jaringan lokal, auditor menandatangani setiap ketergantungan, dan laptop dev tidak memiliki internet sama sekali. Tim sudah menulis lamarannya terhadap DynamoDB API dan menyukainya: pencarian kunci satu digit milidetik, a model item bersih, tidak ada migrasi skema untuk mengasuh. Tapi DynamoDB yang dikelola adalah a layanan cloud, dan "kirim data ke AWS" bukanlah hal yang perlu dilakukan di sini.
ExtendDB dibuat untuk mengatasi kesenjangan tersebut. Itu berbicara Protokol kabel DynamoDB tetapi menyimpan data dalam database yang Anda jalankan.
Apa itu ExtendDB?
ExtendDB adalah adaptor sumber terbuka AWS (ditulis dalam Rust) yang mengimplementasikan protokol kabel DynamoDB JSON di atas database yang Anda jalankan sendiri, seperti PostgreSQL. SDK AWS dan CLI AWS Anda yang ada tetap berfungsi tanpa perubahan — hanya titik akhir URL yang bergerak — sehingga Anda mendapatkan DynamoDB API tanpa mengirim data ke layanan cloud terkelola.
ExtendDB adalah adaptor sumber terbuka dari AWS — ditulis oleh para insinyur AWS DynamoDB dan diumumkan di Blog Database AWS — yang mengimplementasikan protokol kabel DynamoDB JSON di Rust. Karena itu menjawab HTTP API yang sama dengan layanan terkelola, SDK AWS Anda yang ada, dan CLI AWS berfungsi tidak berubah. Satu-satunya yang bergerak adalah titik akhir URL — tidak ada penulisan ulang kode, tidak ada perpustakaan klien baru.
Menariknya adalah apa yang ada di balik API itu. ExtendDB memiliki dapat dicolokkan backend penyimpanan: PostgreSQL adalah implementasi referensinya, dan Cassandra adalah implementasi referensinya dikutip sebagai kemungkinan backend lain. Backend baru adalah diimplementasikan tanpa memodifikasi inti, sehingga lapisan kompatibilitas DynamoDB dan lapisan penyimpanan berevolusi secara mandiri.
Jadi permintaannya mengalir seperti ini:
Apa yang didukungnya – dan apa yang tidak
Sesuai dengan dokumen memulai dan pengumumannya, ExtendDB (v0.1) mencakup operasi yang sebenarnya dipanggil oleh sebagian besar aplikasi:
- Tabel — Buat, Hapus, Describe, Daftar, Perbarui.
- Item — Masukkan, Dapatkan, Hapus, Perbarui (termasuk
SET/REMOVE/ADD/ tindakan pembaruanDELETE). - Kueri dan Pemindaian — kondisi utama, , proyeksi, pagination, dan indeks sekunder.
- Batch —
BatchGetItemdanBatchWriteItem. - —
TransactGetItemsdanTransactWriteItems. - , , Impor/Ekspor, dan Tag.
Apa yang sengaja tidak diimplementasikannya adalah himpunan Fitur terkelola khusus DynamoDB — terutama Tabel Global dan replikasi lintas Wilayah. Itu adalah properti dari layanan terkelola infrastruktur global, bukan dari permukaan API, sehingga tidak terbawa ke adaptor yang Anda host sendiri.
vs DynamoDB Lokal
Anda mungkin sudah menggunakannya
DynamoDB Lokal untuk pengembangan offline. Itu satu
JAR (atau gambar Docker amazon/dynamodb-local) dimaksudkan untuk pengujian unit pada satu perangkat
mesin. ExtendDB bertujuan lebih luas daripada alat proses tunggal itu: lokal
pengembangan, penerapan di lokasi, lingkungan tepi dan celah udara, dan
pengaturan hybrid / multi-cloud di mana Anda menginginkan DynamoDB API tetapi datanya tetap ada
infrastruktur yang Anda kendalikan.
vs DynamoDB yang dikelola
Ini adalah baris AWS draws secara eksplisit, dan itu penting:
ExtendDB bukan DynamoDB. Ini adalah implementasi yang kompatibel, bukan pengganti untuk layanan terkelola. Karakteristik kinerja, perilaku penskalaan, dan sifat operasional berbeda.
Konkretnya, saat Anda menjalankan ExtendDB:
- Anda memiliki ketersediaan dan cadangan database. Tidak ada yang dikelola ketahanan multi-AZ atau pemulihan point-in-time yang melakukannya untuk Anda — terserah Anda dan operasi PostgreSQL Anda.
- TLS bersifat wajib di titik akhir.
- Kredensial mirip IAM tetapi terpisah dari AWS IAM — ExtendDB memilikinya sendiri model kredensial; itu tidak mengautentikasi terhadap akun AWS Anda.
Ini v0.1 dan berlisensi Apache 2.0. Perlakukan itu sebagai perangkat lunak awal: bagus untuk lingkungan di atas, bukan drop-in swap untuk DynamoDB yang dikelola skala produksi.
ExtendDB sendiri tidak mengukur RCU atau WCU — kapasitas adalah masalah PostgreSQL Anda. Kapan
panggilan API yang sama mencapai DynamoDB terkelola di us-east-1 sesuai permintaan, 1 KB
Tagihan PutItem 1 WCU dan 4 KB Tagihan GetItem 0,5 RCU
pada akhirnya konsisten. Tolok ukur ExtendDB untuk latensi; gunakan
kalkulator harga untuk membandingkan apa yang ada di cloud
tagihan akan terlihat seperti pola akses yang sama.
Pengaturan
ExtendDB berjalan di Linux dan macOS dan membutuhkan Rust 1.85+ dan PostgreSQL 14+. Alurnya adalah dua perintah:
extenddb init
extenddb serveinit menyediakan skema di database PostgreSQL Anda; serve memulai
server protokol kabel, yang mendengarkan pada titik akhir seperti https://127.0.0.1:8000
(TLS diperlukan, maka https).
Arahkan SDK AWS ke sana dengan cara yang sama seperti yang Anda lakukan pada titik akhir khusus lainnya — hanya URL dan kredensialnya berubah:
import {DynamoDBClient} from '@aws-sdk/client-dynamodb';
const client = new DynamoDBClient({
endpoint: 'https://127.0.0.1:8000',
region: 'local',
credentials: {accessKeyId: '<extenddb-key>', secretAccessKey: '<extenddb-secret>'}
});Semuanya setelah konfigurasi klien — PutItem, Query, TransactWriteItems —
identik dengan kode yang Anda tulis pada DynamoDB terkelola. Sebuah meja tunggal
tata letak item berfungsi persis seperti di cloud:
| PK | SK | type | backend | createdAt |
|---|---|---|---|---|
| TENANT#acme | AUDIT#2026-06-24 | event | postgres | 2026-06-24T09:00:00Z |
| TENANT#acme | AUDIT#2026-06-24b | event | postgres | 2026-06-24T09:01:12Z |
| TENANT#beta | AUDIT#2026-06-24 | event | postgres | 2026-06-24T09:02:40Z |
Lakukan di DynoTable
Karena ExtendDB menggunakan protokol kabel DynamoDB, Anda tidak memerlukan yang terpisah alat admin untuk itu — arahkan DynoTable di titik akhir ExtendDB tersebut dengan cara yang sama seperti saat Anda menghubungkannya DynamoDB Lokal: buat offline profil (lokal) dengan port ExtendDB dan kredensial sekali pakai, dan DynoTable akan menelusuri, menanyakan, dan mengedit item — kecuali sekarang item tersebut didukung oleh PostgreSQL di disk Anda sendiri, bukan di penyimpanan dalam memori JAR.
Inilah manfaat dari kompatibilitas kabel-protokol: the
SQL Workbench, pembuat kueri visual, dan item
mengedit semua pekerjaan terhadap ExtendDB tidak berubah, sehingga Anda mendapatkan GUI nyata di atas
data yang dihosting sendiri tanpa menulis skrip scan.
Satu peringatan untuk direncanakan: titik akhir ExtendDB adalah HTTPS saja, sedangkan DynoTable
profil offline (seperti kebanyakan pengaturan DynamoDB-Lokal) menargetkan loopback
host:port. Jika klien atau peralatan Anda memerlukan pendengar loopback teks biasa,
akhiri TLS di depan ExtendDB (atau jalankan proxy terbalik lokal) dan arahkan
GUI pada saat itu — protokol pada kabel tetap DynamoDB JSON.
Jebakan
- Jangan perlakukan v0.1 sebagai DynamoDB produksi. Penskalaan, latensi, dan daya tahan adalah PostgreSQL Anda, bukan AWS. Tolok ukur beban kerja Anda sebelum Anda bergantung padanya.
- Tidak ada Tabel Global/replikasi lintas Wilayah. Jika desain Anda bergantung pada multi-Wilayah aktif-aktif, ExtendDB bukanlah jalurnya — itu adalah layanan terkelola fitur.
- Cadangkan sendiri database yang mendasarinya. Tidak ada PITR yang dikelola; A
volume PostgreSQL yang turun hilang. Hubungkan pengarsipan
pg_dump/ WAL seperti apa pun PostgreSQL lainnya. - Kredensial adalah milik ExtendDB, bukan AWS IAM. Jangan mengharapkan kebijakan IAM, peran, atau kunci ketentuan untuk mengatur akses — model otorisasi tersebut tidak melakukannya meneruskan.
Langkah selanjutnya
- Modelkan pola akses Anda terlebih dahulu — sama saja desain meja tunggal berlaku baik backendnya adalah DynamoDB atau PostgreSQL-via-ExtendDB.
- Bangun dan periksa pembacaan dan penulisan Anda dengan DynamoDB Expression Builder, lalu konversi perlengkapan antara JSON biasa dan format kabel dengan Konverter DynamoDB-JSON.
- Saat Anda siap untuk melihat instans ExtendDB langsung, sambungkan DynoTable dan jelajahi seperti tabel lainnya.