Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Memahami catatan CDC
penting
Fitur ini disediakan sebagai AWS Pratinjau dan dapat berubah sewaktu-waktu. Untuk informasi selengkapnya, lihat bagian 2, Beta dan Pratinjau, di Ketentuan AWS Layanan
Sebelum ketersediaan umum, kami akan menambahkan jenis operasi baru ("op": "u"untuk pembaruan) ke muatan aliran Anda. Untuk memastikan aplikasi Anda menangani perubahan ini tanpa modifikasi, perlakukan op nilai yang tidak dikenal sebagai peningkatan dengan menerapkan payload. after Lihat Memahami catatan CDC untuk detail.
Aurora DSQL CDC memberikan setiap perubahan sebagai catatan JSON. Rekaman menggunakan struktur amplop dengan tipe operasi, sebelum dan sesudah gambar baris, dan metadata sumber.
Bagaimana catatan memetakan ke Amazon Kinesis
Aurora DSQL menulis setiap catatan CDC sebagai catatan Kinesis tunggal. DataBidang catatan Kinesis berisi muatan JSON. Aurora DSQL menggunakan kunci partisi Kinesis acak untuk mendistribusikan catatan CDC secara merata di seluruh pecahan. Untuk membaca semua perubahan, gunakan semua pecahan pada aliran data Kinesis. Jika catatan melebihi batas ukuran rekaman Kinesis, Aurora DSQL membaginya di beberapa catatan Kinesis. Lihat perinciannya di Menangani catatan besar.
catatan
Catatan Kinesis memiliki satu Data gumpalan. Nilai kunci primer muncul di bidang payload JSON untuk dihapus, atau before after bidang untuk sisipan dan pembaruan. Untuk mengekstrak kunci utama untuk pemrosesan hilir, bacalah dari bidang yang sesuai di payload.
Kunci utama dalam muatan
Untuk tabel dengan kunci primer, nilai kolom kunci primer muncul di payload:
-
Untuk sisipan dan pembaruan, payload mencakup kolom kunci utama bersama dengan semua kolom lain di
afterbidang. -
Untuk menghapus, kolom kunci utama muncul di
beforebidang.
Misalnya, pertimbangkan tabel dengan kunci primer komposit:
CREATE TABLE order_items ( order_id INT, item_id INT, quantity INT, price NUMERIC, PRIMARY KEY (order_id, item_id) );
Penghapusan pada tabel ini menghasilkan muatan di mana"before": {"order_id": 1001, "item_id": 42}.
Rekam muatan
Payload menggunakan format amplop JSON berikut.
Contoh INSERT
Contoh berikut menunjukkan catatan CDC untuk operasi insert:
{ "type": "full", "op": "c", "before": null, "after": {"order_id": 1001, "item_id": 42, "quantity": 5, "price": "29.99"}, "source": { "version": "1.0", "ts_ms": 1705318200000, "ts_ns": 1705318200000000000, "txId": "ffthunp5stx6ffs2vyfqoatmfu", "schema": "public", "table": "order_items", "db": "postgres", "cluster": "kmabugltfmjdaj2siqr2qbxgju" }, "ts_ms": 1705318200125, "ts_ns": 1705318200125483291 }
Contoh UPDATE
Contoh berikut menunjukkan seperti apa catatan CDC yang dihasilkan oleh UPDATE pernyataan setelah Aurora DSQL mulai memancarkan: op: "u"
penting
Saat ini Aurora DSQL memancarkan op: "c" untuk sisipan dan pembaruan. Rilis berikutnya akan memancarkan pembaruan, dan op: "u" op: "c" untuk sisipan. Rancang aplikasi Anda untuk ditangani cu, d sehingga konsumen Anda terus bekerja di seluruh transisi.
{ "type": "full", "op": "u", "before": null, "after": {"order_id": 1001, "item_id": 42, "quantity": 10, "price": "29.99"}, "source": { "version": "1.0", "ts_ms": 1705318300000, "ts_ns": 1705318300000000000, "txId": "qvtiesgmd55cvlfukm3dfuotji", "schema": "public", "table": "order_items", "db": "postgres", "cluster": "kmabugltfmjdaj2siqr2qbxgju" }, "ts_ms": 1705318300125, "ts_ns": 1705318300125483291 }
DELETE contoh
Untuk menghapus pada tabel dengan kunci primer, before bidang berisi nilai kunci primer dari baris yang dihapus:
{ "type": "full", "op": "d", "before": {"order_id": 1001, "item_id": 42}, "after": null, "source": { "version": "1.0", "ts_ms": 1705318400000, "ts_ns": 1705318400000000000, "txId": "xyzabc123def456ghi789jklmno", "schema": "public", "table": "order_items", "db": "postgres", "cluster": "kmabugltfmjdaj2siqr2qbxgju" }, "ts_ms": 1705318400125, "ts_ns": 1705318400125483291 }
Bidang payload
| Bidang | Deskripsi |
|---|---|
type |
Jenis rekaman. fulluntuk catatan lengkap yang mencakup inline before dan after nilai. chunkeduntuk catatan utama yang mereferensikan catatan fragmen untuk satu atau kedua gambar. fragmentuntuk bagian individu dari gambar yang dipotong. Lihat perinciannya di Menangani catatan besar. |
op |
Jenis operasi. c= buat (sisipkan), u = pembaruan, d = hapus. Saat ini Aurora DSQL memancarkan c untuk sisipan dan pembaruan. Rilis berikutnya akan memancarkan pembaruan, dan u c untuk sisipan. Rancang aplikasi Anda untuk menangani ketiga nilai tersebut. |
before |
Untuk menghapus pada tabel dengan kunci primer, berisi nilai kunci primer dari baris yang dihapus. Aurora DSQL menetapkan bidang ini null untuk menyisipkan, memperbarui, dan menghapus pada tabel tanpa kunci utama. |
after |
Status baris penuh setelah perubahan, termasuk semua kolom. Aurora DSQL menetapkan bidang ini untuk dihapus. null |
chunked |
Hadir hanya ketika type adachunked. Berisi metadata pemasangan ulang untuk before gambar, gambar, atau keduanyaafter. Aurora DSQL menghilangkan gambar yang terpotong dari tingkat atas atau bidang dan menempatkannya di bawahbefore. after chunked Lihat perinciannya di Menangani catatan besar. |
source.version |
Versi format metadata sumber CDC. Versi saat ini adalah 1.0. |
source.ts_ms |
Transaksi melakukan stempel waktu dalam milidetik sejak zaman Unix, Coordinated Universal Time (UTC). |
source.ts_ns |
Stempel waktu komit transaksi dalam nanodetik, UTC. Stempel waktu presisi tertinggi yang tersedia. Gunakan bidang ini untuk menetapkan urutan total transaksi. |
source.txId |
Pengidentifikasi transaksi unik, dikodekan sebagai base32. Semua catatan dari transaksi yang sama memiliki txId nilai yang sama. Gunakan bidang ini untuk mengelompokkan catatan yang termasuk dalam transaksi yang sama. |
source.schema |
Nama skema PostgreSQL (misalnya,). public |
source.table |
Nama tabel. |
source.db |
Nama database. Selalu postgres untuk Aurora DSQL. |
source.cluster |
Pengidentifikasi cluster Aurora DSQL. |
ts_ms |
Waktu di mana sistem CDC memproses catatan, dalam milidetik, UTC. Perbedaan antara ts_ms dan source.ts_ms merupakan ukuran lag replikasi. |
ts_ns |
Waktu di mana sistem CDC memproses catatan, dalam nanodetik, UTC. |
Rincian format
Rincian berikut menjelaskan bagaimana format Aurora DSQL CDC mencatat. Rancang aplikasi Anda untuk menangani perilaku ini.
-
Gambar setelah penuh untuk sisipan dan pembaruan. Aurora DSQL menyertakan status baris lengkap di
afterbidang untuk semua penulisan.beforeBidang ininulluntuk sisipan dan pembaruan. Saat ini sisipan dan pembaruan digunakanop: "c", tetapi rilis berikutnya akan memancarkanop: "u"pembaruan. Rancang aplikasi Anda untuk digunakansource.ts_nsper kunci utama untuk pemesanan daripada mengandalkanopbidang untuk membedakan antara sisipan dan pembaruan. -
Post-change status baris saja. Catatan CDC mencakup status baris penuh setelah setiap perubahan. Status baris sebelum pembaruan tidak disertakan. Untuk menghapus pada tabel dengan kunci primer,
beforebidang berisi nilai kunci primer. -
Jenis numerik diserialkan sebagai string. Aurora DSQL membuat serial
numericdandecimalnilai sebagai string JSON untuk mempertahankan presisi yang tepat. -
Data biner dikodekan sebagai Base64. Aurora DSQL
byteamengkodekan nilai sebagai string Base64. -
Nilai floating-point dan numerik khusus. Aurora DSQL membuat serial NaN dan ±Infinity sebagai string,, dan.
"NaN""Infinity""-Infinity"Ini berlaku untukreal,double precision, dannumericjenis. -
Kolom JSON diserialkan sebagai string JSON. Aurora DSQL membuat serial nilai
jsonkolom sebagai string JSON yang berisi teks JSON mentah yang disimpan di kolom. Parse nilai string di aplikasi Anda (misalnya, denganJSON.parsein JavaScript ataujson.loadsdi Python) untuk mengakses nilai JSON yang mendasarinya. -
Nilai overflow dipancarkan sebagai null. Jika nilai tidak dapat direpresentasikan dalam tipe JSON target selama serialisasi, Aurora DSQL memancarkan JSON untuk kolom itu.
nullIni berlaku untukintervalnilai yang total mikrodetik melebihi rentang bilangan bulat bertanda 64-bit (± 9.223.372.036.854.775.807 mikrodetik, sekitar ±292.271 tahun). Rancang aplikasi Anda untuk menanganinullnilai tak terduga di kolom yang tidak dapat dibatalkan dalam skema database. -
Catatan besar dibagi menjadi beberapa bagian. Jika rekaman melebihi batas ukuran rekaman Amazon Kinesis, Aurora DSQL membagi
aftergambarbeforeatau yang terpengaruh menjadi fragmen dan mengirimkannya sebagai catatan Kinesis terpisah sehingga Anda masih menerima perubahan. Rancang aplikasi Anda untuk memasang kembali gambar. Lihat perinciannya di Menangani catatan besar.
Menangani catatan besar
Ketika JSON serial rekaman CDC melebihi 9 MiB, Aurora DSQL membagi gambar, memberikan beberapa catatan Kinesis. before and/or after Setiap rekaman berisi type bidang tingkat atas yang menunjukkan strukturnya: full untuk catatan lengkap, chunked untuk catatan utama yang mereferensikan fragmen, dan fragment untuk potongan individu dari gambar yang terpotong. Bidang opsource,ts_ms, dan ts_ns bidang pada catatan utama yang terpotong berperilaku sama seperti pada catatan lengkap. Rekaman yang sesuai dengan satu catatan Kinesis telah type ditetapkan full dan tidak memerlukan penanganan tambahan.
A chunk_id stabil di seluruh percobaan ulang. Jika Aurora DSQL mengirimkan ulang sebuah fragmen, itu akan chunk_id sama dengan pengiriman asli, sehingga aplikasi Anda dapat melanjutkan buffering di bawah pengenal yang sama tanpa menangani set sebagian dari upaya sebelumnya.
Rekor utama
Rekaman utama yang terpotong menggantikan level atas before atau after bidang untuk gambar terpisah dengan chunked objek yang menjelaskan cara memasangnya kembali. Setiap entri di bawah chunked memiliki chunk_id (pengenal yang menghubungkan fragmen ke catatan ini), total_fragments (jumlah fragmen yang membentuk gambar itu), dan crc32c (checksum CRC32C, sebagai string desimal, di atas teks gambar yang dipasang kembali). Jika satu gambar sebaris dan yang lainnya terpotong, gambar sebaris masih muncul di tingkat atas sebagai nilai atau. null
{ "type": "chunked", "op": "c", "before": null, "after": null, "source": { "version": "1.0", "ts_ms": 1705318200000, "ts_ns": 1705318200000000000, "txId": "ffthunp5stx6ffs2vyfqoatmfu", "schema": "public", "table": "order_items", "db": "postgres", "cluster": "cluster-id" }, "chunked": { "after": { "chunk_id": "chunk-id", "total_fragments": 3, "crc32c": "2073618257" } }, "ts_ms": 1705318200125, "ts_ns": 1705318200125483291 }
Catatan fragmen
Setiap fragmen adalah catatan Kinesis sendiri type dengan set fragment ke dan tiga bidangchunk_id: cocok dengan nilai dalam catatan chunked.before.chunk_id yang sesuai chunked.after.chunk_id atau pada catatan utamaindex, adalah posisi berbasis nol dari fragmen dalam gambar, data dan merupakan segmen dari teks JSON gambar yang dibagi UTF-8 pada batas karakter (nilai setiap fragmen data adalah string yang valid sendiri). UTF-8 Karena Aurora DSQL CDC menggunakan UNORDERED mode dan kunci partisi acak, fragmen dan catatan utama dapat tiba di pecahan yang berbeda dan dalam urutan apa pun. Untuk membaca semua fragmen, konsumsi semua pecahan pada aliran data Kinesis. Untuk informasi lebih lanjut tentang pemesanan pengiriman, lihatMemesan.
{ "type": "fragment", "chunk_id": "chunk-id", "index": 0, "data": "partial-JSON-text" }
Untuk memasang kembali gambar yang terlalu besar, buffer setiap rekaman dengan itu. type fragment chunk_id Ketika Anda menerima catatan utama dengan typechunked, tunggu sampai Anda memiliki total_fragments fragmen untuk setiap chunk_id direferensikan di bawah chunked.before atauchunked.after, urutkan fragmen dengan index naik, dan gabungkan string. data Hasil gabungan adalah asli before atau after objek sebagai teks JSON — menguraikannya untuk mengakses nilai kolom. Untuk memverifikasi integritas pengiriman, hitung CRC32C melalui string gabungan dan bandingkan hasilnya dengan atau. chunked.before.crc32c chunked.after.crc32c
Serialisasi tipe data
Tabel berikut menjelaskan bagaimana Aurora DSQL serialisasi setiap tipe data PostgreSQL dalam catatan CDC.
Jenis bilangan bulat
| Jenis PostgreSQL | Representasi JSON | Contoh |
|---|---|---|
smallint (int2) |
Nomor JSON | 42 |
integer (int4) |
Nomor JSON | 1001 |
bigint (int8) |
Nomor JSON | 9223372036854775807 |
oid |
Nomor JSON (tidak ditandatangani) | 16384 |
Nilai bigint di luar ±2^53 mungkin kehilangan presisi di lingkungan. JavaScript Gunakan BigInt atau pustaka presisi sewenang-wenang dalam kasus tersebut.
Floating-point jenis
| Jenis PostgreSQL | Representasi JSON | Contoh | Catatan |
|---|---|---|---|
real (float4) |
Nomor JSON | 3.14159 |
NaN dan ±Infinity diserialisasikan sebagai string"NaN",,. "Infinity" "-Infinity" |
double precision (float8) |
Nomor JSON | 3.141592653589793 |
Penanganan nilai khusus yang sama sepertireal. |
numeric / decimal |
String JSON | "123.45" |
Selalu string untuk mempertahankan presisi yang tepat. NaN dan ±Infinity diserialisasikan sebagai string"NaN",,. "Infinity" "-Infinity" |
Boolean
| Jenis PostgreSQL | Representasi JSON | Contoh |
|---|---|---|
boolean |
Boolean JSON | true atau false |
Jenis karakter
| Jenis PostgreSQL | Representasi JSON | Contoh |
|---|---|---|
varchar / text |
String JSON | "Hello, world!" |
bpchar (char(n)) |
String JSON | "ABC"(spasi belakang dilucuti) |
name |
String JSON | "pg_class" |
"char"(byte tunggal) |
String JSON | "A" |
Biner
| Jenis PostgreSQL | Representasi JSON | Contoh |
|---|---|---|
bytea |
String JSON (Base64) | "SGVsbG8gV29ybGQh" |
Jenis data tanggal dan waktu
| Jenis PostgreSQL | Representasi JSON | Contoh | Catatan |
|---|---|---|---|
date |
Nomor JSON (hari sejak zaman Unix) | 19797 |
+infinitydan -infinity direpresentasikan sebagai hitungan hari penjaga yang berasal dari aritmatika epoch-offset. Nilai-nilai ini tidak sesuai dengan tanggal kalender yang bermakna. |
time |
Nomor JSON (mikrodetik sejak tengah malam) | 52200123456 |
|
timetz |
Nomor JSON (mikrodetik sejak tengah malam, UTC) | 52200123456 |
Waktu lokal disesuaikan dengan UTC dengan menerapkan offset zona waktu yang disimpan (detik di sebelah barat UTC). Hasilnya dibungkus ke kisaran [0, 86400000000) mikrodetik. |
timestamp |
Nomor JSON (mikrodetik sejak zaman Unix) | 1710510600123456 |
±Infinity memetakan nilai sentinel: 9223372036825200000 untuk dan untuk. +infinity -9223372036832400000 -infinity |
timestamptz |
Nomor JSON (mikrodetik sejak zaman Unix) | 1710510600123456 |
Disimpan dan dipancarkan dalam UTC. Nilai sentinel ±infinity yang sama dengan. timestamp |
interval |
Nomor JSON (perkiraan total mikrodetik) | 2802603000000 |
Bulan diperkirakan 30,4375 hari (2.629.800 detik). Total dihitung sebagai(months × 2,629,800 + days × 86,400) ×
1,000,000 + microseconds. Jika hasilnya melebihi rentang bilangan bulat bertanda 64-bit (± 9.223.372.036.854.775.807 mikrodetik, kira-kira ± 292.271 tahun), Aurora DSQL memancarkan JSON untuk kolom. null |
Jenis lainnya
| Jenis PostgreSQL | Representasi JSON | Contoh |
|---|---|---|
uuid |
String JSON (format hex standar 8-4-4-4-12) | "550e8400-e29b-41d4-a716-446655440000" |
oidvector |
Array kosong JSON | [] |
json |
String JSON yang berisi teks JSON mentah | "{\"key\": \"value\"}" |
Nilai NULL
Untuk tipe data apa pun, nilai NULL kolom direpresentasikan sebagai JSONnull.
Evolusi skema dalam catatan CDC
Saat Anda memodifikasi skema tabel—misalnya, dengan menambahkan, menjatuhkan, atau mengganti nama kolom—catatan CDC mencerminkan perubahan yang dimulai dari transaksi yang melakukan perubahan DDL. Catatan dari transaksi yang dilakukan sebelum perubahan DDL menggunakan skema sebelumnya. Contoh:
-
Jika Anda menambahkan kolom, catatan dari transaksi sebelumnya tidak menyertakan kolom baru. Catatan dari transaksi penambahan dan seterusnya termasuk kolom baru.
-
Jika Anda menjatuhkan kolom, catatan dari transaksi yang jatuh dan seterusnya tidak lagi menyertakan kolom itu.
-
Jika Anda mengganti nama kolom, catatan dari transaksi penggantian nama selanjutnya menggunakan nama kolom baru.
Lacak perubahan skema di konsumen hilir Anda dengan memeriksa nama kolom yang ada di setiap rekaman dan bidang. after before source.versionBidang di setiap catatan mengidentifikasi format amplop CDC.