Langsung ke konten

Arsip

Database

13 artikel
Rekayasa Perangkat Lunak 22 Sep 2026 6 min read

Write Skew Dapat Merusak Invarian pada Snapshot Isolation

Write Skew Dapat Merusak Invarian pada Snapshot Isolation Snapshot isolation memberi setiap transaction pandangan stabil terhadap data yang sudah commit dan biasanya menolak update konkuren pada row yang sama. Kombinasi ini menghilangkan banyak anomali yang muncul pada isolation level yang lebih lemah. Namun, tidak setiap invarian aplikasi otomatis menjadi serializable. Write skew adalah kasus penting. Dua transaction membaca state yang saling beririsan, mengambil keputusan dari snapshot valid yang sama, lalu mengubah row yang berbeda. Karena write set keduanya tidak bertabrakan, keduanya dapat commit. Hasil gabungannya dapat melanggar aturan yang tetap terpenuhi pada snapshot masing-masing transaction.

Rekayasa Perangkat Lunak 22 Sep 2026 7 min read

Optimistic Concurrency Menolak Write Stale Sebelum Mengganti State yang Lebih Baru

Optimistic Concurrency Menolak Write Stale Sebelum Mengganti State yang Lebih Baru Alur read-modify-write terlihat sederhana ketika hanya satu actor menyentuh sebuah record. Client membaca state, mengubah sebagian isinya, lalu menulis hasilnya kembali. Saat beberapa actor bekerja bersamaan, jeda antara read dan write menjadi race. Writer lain dapat melakukan commit terhadap nilai yang lebih baru pada jeda tersebut, lalu update tanpa kondisi dapat menghapusnya. Optimistic concurrency control menambahkan kondisi pada write terakhir. Client membawa version yang berasal dari state yang dibacanya, dan storage layer menerima mutation hanya jika version itu masih current. Ketidakcocokan menjadi conflict, bukan overwrite yang tidak terlihat.

Rekayasa Perangkat Lunak 22 Sep 2026 6 min read

Optimistic Concurrency Control Menolak Write dari State yang Sudah Usang

Optimistic Concurrency Control Menolak Write dari State yang Sudah Usang Dua client dapat membaca record yang sama, membuat perubahan berbeda, lalu menyimpan dengan selisih beberapa detik. Jika setiap update langsung mengganti value yang tersimpan, write terakhir dapat menghapus perubahan sebelumnya meski kedua request sama-sama dinyatakan berhasil. Optimistic concurrency control mencegah overwrite diam-diam dengan memberi syarat pada write. Client menyimpan version saat membaca data. Update hanya berhasil jika version tersebut masih berlaku. Version yang sudah berubah membuat write berakhir sebagai conflict, bukan kehilangan perubahan tanpa tanda.

Rekayasa Perangkat Lunak 21 Sep 2026 7 min read

Write Skew Merusak Invariant pada Snapshot Isolation

Write Skew Merusak Invariant pada Snapshot Isolation Snapshot isolation memberi setiap transaksi tampilan stabil atas data yang sudah commit. Properti ini menghilangkan banyak anomali akibat nilai yang berubah di tengah transaksi. Namun, properti tersebut tidak otomatis membuat setiap eksekusi concurrent setara dengan suatu urutan serial. Write skew memperlihatkan celah itu dengan jelas. Dua transaksi membaca state valid yang sama, mengambil keputusan dari state tersebut, lalu menulis row yang berbeda. Karena write set keduanya tidak beririsan, kedua commit dapat berhasil meski hasil gabungannya melanggar aturan yang tetap dipenuhi oleh masing-masing transaksi saat berdiri sendiri.

Rekayasa Perangkat Lunak 21 Sep 2026 5 min read

Write Skew Dapat Merusak Invariant Lintas Baris pada Snapshot Isolation

Write Skew Dapat Merusak Invariant Lintas Baris pada Snapshot Isolation Snapshot isolation memberi setiap transaksi view database yang stabil dan umumnya mencegah transaksi concurrent melakukan commit atas write yang saling bertabrakan pada baris yang sama. Properti concurrency ini kuat, tetapi tidak membuat setiap invariant aplikasi menjadi serializable. Write skew muncul ketika dua transaksi membaca state yang saling beririsan, mengambil keputusan dari snapshot valid yang sama, lalu menulis record yang berbeda. Karena write set keduanya tidak bertabrakan, kedua commit dapat berhasil. State gabungannya dapat melanggar aturan yang sudah diperiksa masing-masing transaksi sebelum menulis.

Rekayasa Perangkat Lunak 21 Sep 2026 4 min read

Kolom Versi Mengubah Lost Update Menjadi Konflik yang Terdeteksi

Kolom Versi Mengubah Lost Update Menjadi Konflik yang Terdeteksi Alur read-modify-write dapat menimpa perubahan lain yang sudah commit walaupun setiap statement database berhasil. Dua client membaca row yang sama, menghitung replacement berbeda, lalu menulis secara berurutan. Tanpa kondisi yang mengikat setiap write ke state yang dibacanya, write terakhir dapat menghapus perubahan sebelumnya tanpa sinyal konflik. Kolom versi membuat dependency tersebut eksplisit. Client membaca data beserta versinya, lalu melakukan update hanya jika versi di storage masih sama dengan yang diamati. Perubahan versi mengubah race menjadi conditional update yang gagal, bukan lost update.

Rekayasa Perangkat Lunak 19 Sep 2026 5 min read

Write Skew Merusak Invariant Lintas Row pada Snapshot Isolation

Snapshot isolation dapat membiarkan dua transaksi commit meskipun hasil gabungannya melanggar aturan yang sudah diperiksa masing-masing transaksi sebelum melakukan write. Anomali ini muncul saat kedua transaksi membaca kondisi logis yang sama, lalu menulis row yang berbeda. Karena write set keduanya tidak beririsan, deteksi konflik write-write biasa tidak memiliki benturan untuk ditolak. Kondisi ini disebut write skew. Batas masalahnya berada di antara invariant aplikasi dan isolation database: sebuah transaksi dapat melihat snapshot yang konsisten, tetapi tetap ikut menghasilkan state akhir yang akan gagal terhadap predicate yang sebelumnya diperiksa.

Basis Data 19 Sep 2026 5 min read

Menjalankan Database Turso Embedded di SvelteKit Tanpa Turso Cloud

Aplikasi SvelteKit tidak harus memakai Turso Cloud untuk menggunakan Turso. Paket @tursodatabase/database dapat membuka file database langsung dari proses Node.js: import { connect } from '@tursodatabase/database'; const db = await connect('local.db'); Konfigurasi ini tidak memerlukan URL database, authentication token, ataupun network round trip. Aplikasi membaca dan menulis file database lokal.

Rekayasa Perangkat Lunak 19 Sep 2026 5 min read

Kolom Versi Mengubah Update Database Menjadi Transisi State Bersyarat

Client database dapat membaca sebuah row, memakai waktu untuk menghitung perubahan, lalu menjalankan UPDATE setelah transaksi lain lebih dulu mengubah row yang sama. Jika statement terakhir hanya mengidentifikasi row lewat primary key, write yang datang kemudian dapat mengganti state yang dihitung dari kondisi lama tanpa konflik yang terlihat. Kolom versi mengubah batas tersebut. Client membaca state aplikasi beserta nilai revisinya, lalu menyertakan revisi itu dalam predicate update. Database menerima write hanya selama revisi yang tersimpan masih sama dengan state yang sebelumnya diamati client.

Basis Data 16 Sep 2026 5 min read

Truncasi Tail PostgreSQL VACUUM Memerlukan Lock Eksklusif

VACUUM biasa pada PostgreSQL umumnya membiarkan ruang heap yang telah direklamasi tetap berada di dalam relation agar dapat digunakan kembali. Fase tail truncation yang terpisah dapat memperpendek file relation ketika terdapat rangkaian halaman kosong yang berurutan pada ujung fisiknya. Fase tersebut memerlukan lock ACCESS EXCLUSIVE. Batas lock ini membuat tail truncation berbeda secara material dari pembersihan vacuum biasa. Pemeliharaan heap dan index rutin dirancang agar dapat berjalan berdampingan dengan operasi baca dan tulis normal, sedangkan memperpendek relation secara fisik memerlukan periode singkat ketika akses tabel secara bersamaan tidak dapat berlangsung.

Basis Data 15 Sep 2026 5 min read

PostgreSQL Visibility Map Melacak Status Heap Page

PostgreSQL menyimpan metadata visibility tuple di row heap, tetapi memeriksa setiap tuple heap tidak diperlukan ketika seluruh page sudah diketahui memenuhi kondisi yang lebih kuat. Visibility map menyimpan status tingkat page tersebut dalam relation fork yang ringkas. Setiap heap page memiliki dua bit yang bersesuaian. Bit all-visible mencatat bahwa setiap tuple pada page terlihat oleh setiap transaksi saat ini dan mendatang. Bit all-frozen mencatat bahwa setiap tuple pada page telah dibekukan. Fakta tersebut memungkinkan PostgreSQL menghindari pekerjaan dalam index-only scan dan operasi vacuum tanpa memindahkan data visibility MVCC ke dalam index.

Basis Data 15 Sep 2026 5 min read

PostgreSQL Full Page Writes Memperbaiki Torn Page

Sebuah data page PostgreSQL dapat lebih besar daripada unit write atomik yang disediakan storage. Jika host gagal ketika sebuah page sedang ditulis, sebagian page tersebut dapat mencapai durable storage sementara bagian lain masih berasal dari versi yang lebih lama. Recovery tidak dapat dengan aman menerapkan change record biasa ke page yang struktur internalnya mungkin sudah tidak konsisten. full_page_writes menangani mode kegagalan tersebut. Ketika setting ini diaktifkan, PostgreSQL mencatat image lengkap sebuah page ke write-ahead log (WAL) pada modifikasi pertama page tersebut setelah checkpoint. Selama crash recovery, image itu dapat menggantikan on-disk page yang torn sebelum WAL record berikutnya di-replay.

Basis Data 14 Sep 2026 4 min read

Partial Index PostgreSQL Memfokuskan Entri Indeks

Indeks PostgreSQL tidak harus merepresentasikan setiap baris dalam tabelnya. Partial index menambahkan predikat ke definisi indeks, sehingga hanya baris yang memenuhi predikat tersebut yang memperoleh entri indeks. Hal ini mengubah cakupan fisik indeks sekaligus kumpulan query yang dapat menggunakan indeks tersebut melalui planner. Mekanisme ini cocok untuk workload ketika subset baris yang stabil menerima porsi query yang jauh lebih besar. Aplikasi mungkin berulang kali memeriksa job yang masih pending sementara job yang selesai sebagian besar hanya menjadi riwayat, atau melakukan query pada akun aktif sementara akun yang dinonaktifkan tetap berada dalam tabel yang sama.