Menengah7 menit baca

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:

Protokol kabel DynamoDB JSONmembaca / menulisAplikasi Anda (SDK AWS tidakberubah)ExtendDB (adaptor Karat)PostgreSQL (data Anda, diskAnda)

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 pembaruan DELETE).
  • Kueri dan Pemindaian — kondisi utama, , proyeksi, pagination, dan indeks sekunder.
  • BatchBatchGetItem dan BatchWriteItem.
  • TransactGetItems dan TransactWriteItems.
  • , , 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 serve

init 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:

PKSKtypebackendcreatedAt
TENANT#acmeAUDIT#2026-06-24eventpostgres2026-06-24T09:00:00Z
TENANT#acmeAUDIT#2026-06-24beventpostgres2026-06-24T09:01:12Z
TENANT#betaAUDIT#2026-06-24eventpostgres2026-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.

Diperbarui