Level Isolasi Database dengan PostgreSQL dan Spring Boot

Apr 12 2023
Dalam sistem manajemen basis data, isolasi mengacu pada sejauh mana transaksi diisolasi dari pengaruh transaksi lain yang berjalan secara bersamaan. Bergantung pada kebutuhan aplikasi Anda, Anda dapat membuat kueri database PostgreSQL atau MySQL menggunakan tingkat isolasi yang berbeda dalam aplikasi Spring Boot.

Dalam sistem manajemen basis data, isolasi mengacu pada sejauh mana transaksi diisolasi dari pengaruh transaksi lain yang berjalan secara bersamaan.

Bergantung pada kebutuhan aplikasi Anda, Anda dapat membuat kueri database PostgreSQL atau MySQL menggunakan tingkat isolasi yang berbeda dalam aplikasi Spring Boot.

Anda dapat melakukannya dengan menggabungkan anotasi @Transactional dengan Isolationenum, yang memungkinkan kami menentukan tingkat isolasi yang diinginkan untuk transaksi Anda.

Level Isolasi di Database (PostgreSQL)

Di blog ini, kita akan melihat semua jenis isolasi yang kita miliki dan bagaimana kita dapat mencapainya menggunakan kueri PostgreSQL dan Spring Boot@Transactional annotation.

Tingkat Isolasi Database

  • Read Uncommitted : Suatu transaksi dapat mengakses data uncommitted dari transaksi lain pada tingkat isolasi ini, yang dapat mengakibatkan pembacaan kotor . Pertimbangkan transaksi yang mengubah catatan database tetapi gagal melakukan atau mengembalikan transaksi. Transaksi lain yang membaca catatan yang sama dapat mengambil data yang tidak dikomit, yang mengakibatkan ketidakkonsistenan.
  • Komitmen Baca : Transaksi pada tingkat isolasi ini hanya dapat membaca data yang dilakukan dari transaksi lain. Pertimbangkan transaksi yang memodifikasi catatan database dan kemudian melakukan transaksi. Transaksi selanjutnya yang membaca catatan yang sama hanya dapat mengambil data yang dikomit.
  • Baca Berulang : Transaksi dalam tingkat isolasi ini hanya dapat membaca data yang dilakukan dari transaksi lain dan tidak akan melihat modifikasi apa pun yang dilakukan oleh transaksi lain hingga dilakukan. Pertimbangkan transaksi yang membaca kumpulan catatan dari database. Bahkan jika transaksi lain mengubah atau menghapus catatan, transaksi pertama akan terus melihat data asli hingga dilakukan.
  • Serializable : Transaksi dieksekusi pada tingkat isolasi ini sedemikian rupa sehingga tampaknya dieksekusi secara berurutan, satu demi satu. Pertimbangkan dua transaksi bersamaan di mana satu transaksi memodifikasi catatan dan transaksi lainnya menghapus catatan yang sama. Transaksi diproses secara berurutan pada tingkat isolasi ini, dan satu transaksi diblokir hingga transaksi berikutnya selesai.

Catatan: Tingkat isolasi default di PostgreSQL adalah READ COMMITTED.

Konfigurasikan level Isolasi di PostgreSQL

Di PostgreSQL, Anda dapat mengonfigurasi level isolasi menggunakan SET TRANSACTIONperintah, yang memungkinkan Anda menyetel level isolasi untuk transaksi saat ini. Langkah-langkahnya adalah sebagai berikut:

Gunakan alat klien seperti pgAdmin untuk terhubung ke database PostgreSQL Anda.

Mulailah transaksi dengan mengetik BEGINatauSTART TRANSACTION.

Untuk memberikan tingkat isolasi yang sesuai, gunakan SET TRANSACTIONperintah. Untuk mengubah level isolasi menjadi read commit, misalnya, jalankan perintah berikut:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

Dalam transaksi, lakukan aktivitas basis data Anda.

Saat Anda selesai dengan aktivitas Anda, gunakan perintah COMMITatau ROLLBACKuntuk melakukan atau membatalkan transaksi.

Perhatikan bahwa tingkat isolasi juga dapat disesuaikan secara global untuk seluruh server Postgresql menggunakan postgresql.conffile. Namun, menyetel tingkat isolasi pada tingkat transaksi memberikan kontrol yang lebih halus atas tingkat konsistensi dan konkurensi dalam aplikasi Anda.
Untuk mengubah tingkat isolasi secara global, buka postgresql.conffile dan edit parameternya transaction_isolation. Parameter ini dapat memiliki nilai berikut [serializable, repeatable read, read committed, read uncommitted]. Selengkapnya cek link ini .

Konfigurasikan tingkat isolasi di Spring Boot

Langkah-langkahnya adalah sebagai berikut:

Gunakan anotasi @Transactional untuk menganotasi metode yang mengeksekusi kueri database.

Setel atribut isolasi anotasi @Transactional ke jumlah isolasi yang diinginkan. Untuk menyetel tingkat isolasi ke READ COMMITTED, misalnya, gunakan kode berikut:

@Transactional(isolation = Isolation.READ_COMMITTED)
public void performDatabaseQuery() {
    // Perform your database query here
}

Setel tingkat isolasi transaksi default di kacang DataSource aplikasi Spring Boot Anda. Anda dapat melakukannya dengan menyertakan kode berikut dalam file konfigurasi aplikasi Anda:

@Bean
public DataSource dataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName("org.postgresql.Driver");
    dataSource.setUrl("jdbc:postgresql://localhost:5432/mydatabase");
    dataSource.setUsername("myusername");
    dataSource.setPassword("mypassword");
    dataSource.setDefaultTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); // Set default isolation level
    return dataSource;
}

Jika Anda menikmati membaca ini, jangan lupa tepuk tangan.

Saya harap saya bisa menjelaskan apa itu level Isolasi di Database dan bagaimana melakukan kueri dengan berbagai jenis isolasi.

Terima kasih.