Bagaimana cara kerja ACID dan transaksi basis data?

161

Apa hubungan antara ACID dan transaksi basis data?

Apakah ACID memberikan transaksi basis data atau apakah itu hal yang sama?

Bisakah seseorang mencerahkan topik ini.

never_had_a_name
sumber

Jawaban:

320

ACID adalah seperangkat properti yang ingin Anda terapkan saat memodifikasi database.

  • Atomicity
  • Konsistensi
  • Isolasi
  • Daya tahan

Transaksi adalah sekumpulan perubahan terkait yang digunakan untuk mencapai beberapa properti ACID. Transaksi adalah alat untuk mencapai properti ACID.

Atomicity berarti Anda dapat menjamin bahwa semua transaksi terjadi, atau tidak ada yang terjadi; Anda dapat melakukan operasi kompleks sebagai satu unit tunggal, semua atau tidak sama sekali, dan kerusakan, kegagalan daya, kesalahan, atau apa pun tidak akan memungkinkan Anda untuk berada dalam keadaan di mana hanya beberapa perubahan terkait yang terjadi.

Konsistensi berarti Anda menjamin bahwa data Anda akan konsisten; tidak ada kendala yang Anda miliki pada data terkait yang akan dilanggar.

Isolasi berarti bahwa satu transaksi tidak dapat membaca data dari transaksi lain yang belum selesai. Jika dua transaksi dieksekusi secara bersamaan, masing-masing akan melihat dunia seolah-olah mereka mengeksekusi secara berurutan, dan jika satu perlu membaca data yang ditulis oleh yang lain, itu harus menunggu sampai yang lain selesai.

Daya tahan berarti bahwa setelah transaksi selesai, dijamin bahwa semua perubahan telah direkam ke media yang tahan lama (seperti hard disk), dan fakta bahwa transaksi telah selesai juga dicatat.

Jadi, transaksi adalah mekanisme untuk menjamin properti ini; mereka adalah cara pengelompokan tindakan terkait bersama sehingga secara keseluruhan, kelompok operasi dapat berupa atom, menghasilkan hasil yang konsisten, diisolasi dari operasi lain, dan direkam secara tahan lama.

Brian Campbell
sumber
6
Anda mengatakan "Konsistensi berarti Anda menjamin bahwa data Anda akan konsisten; tidak ada kendala yang Anda miliki pada data terkait yang akan dilanggar." Jika berdasarkan kendala, maksud Anda yang didefinisikan dalam basis data (mis., Periksa batasan), apa hubungannya manajemen transaksi dengan mencegahnya dilanggar? Bukankah mereka selalu berlaku? Sepertinya saya bahwa C dalam ACID harus memiliki arti lain.
Marc Rochkind
20
@MarcRochkind Suatu transaksi memungkinkan Anda untuk menerapkan pemeriksaan konsistensi walaupun operasi individu dalam transaksi akan melanggar batasan konsistensi. Misalnya, jika Anda memperbarui sistem pembukuan entri ganda, Anda mungkin perlu mendebit dari beberapa akun dan kredit ke beberapa akun secara bersamaan. Tanpa transaksi, Anda akan memeriksa kendala setelah setiap pernyataan, dan akan gagal karena pernyataan individu tidak mempertahankan konsistensi. Dengan transaksi, meskipun pernyataan individual tidak mempertahankan konsistensi, transaksi secara keseluruhan tidak.
Brian Campbell
1
" dan jika seseorang perlu membaca data yang ditulis oleh orang lain, itu harus menunggu sampai yang lain selesai " - tidak sepenuhnya benar. Transaksi pertama dapat (dan akan) membaca data itu dan akan melihat keadaan seperti sebelum transaksi kedua dimulai.
a_horse_with_no_name
1
@BrianCampbell 1) Konsistensi adalah "periksa batasan" seperti UNIK, KUNCI LUAR NEGERI serta keadaan yang valid (sesuai dengan logika bisnis / persyaratan aplikasi) pada akhir transaksi? 2) Bukankah Atomicity dan atau Isolasi saja memastikan Konsistensi? Haruskah kita menyebutkan Konsistensi secara eksplisit sebagai properti wajib?
user104309
1
@a_horse_with_no_name Anda berbicara tentang OCC (Kontrol konkurensi optimistis) v / s PCC (Pesimistis). Keduanya dapat diimplementasikan dalam sistem basis data ACID-compliant, tergantung pada apakah Anda ingin konsistensi atau ketersediaan tinggi.
Siddhartha
37

ACID adalah sifat yang diinginkan dari setiap mesin pemrosesan transaksi.

DBMS adalah (jika ada gunanya) jenis mesin pengolah transaksi khusus yang memaparkan, biasanya sebagian besar tetapi tidak sepenuhnya sepenuhnya, sifat-sifat tersebut.

Tapi ada mesin lain yang juga bisa mengekspos properti itu. Jenis perangkat lunak yang dulu disebut "monitor TP" menjadi contohnya (saat ini setara dengan kebanyakan server web).

Monitor TP semacam itu dapat mengakses sumber daya selain DBMS (misalnya printer), dan masih menjamin ACID terhadap penggunanya. Sebagai contoh apa arti ACID ketika printer terlibat dalam transaksi:

  • Atomicity: seluruh dokumen dicetak atau tidak sama sekali
  • Konsistensi: pada akhir transaksi, umpan kertas diposisikan di bagian atas halaman
  • Isolasi: tidak ada dua dokumen yang tercampur saat mencetak
  • Daya tahan: printer dapat menjamin bahwa itu bukan "mencetak" dengan kartrid kosong.
Erwin Smout
sumber
3
contoh printer ringkas yang bagus.
lakesare
2
Contoh yang baik. Saya tidak mengerti bagian "Konsistensi". Dalam pikiran saya, contoh yang lebih baik adalah "Printer tidak menerima kertas yang lebih besar dari 10 inci."
skeller88
EDIT - "kertas lebih lebar dari 10 inci."
skeller88
1
Saya akui bahwa itu adalah sedikit peregangan. Tetapi sulit untuk menemukan contoh yang lebih baik karena "konsistensi" adalah tentang data, dan printer bukanlah perangkat data.
Erwin Smout
1
Kalau begitu, printer memiliki fasilitas yang mencegahnya mulai mencetak jika jumlah halaman suatu dokumen lebih tinggi dari jumlah lembar yang saat ini diketahui ada dalam persediaan kertas. Anda lihat itulah masalahnya dengan banyak orang yang berkomentar di sini. Anda menyebutkan "printer" dan mereka hanya melihat perangkat streaming serial bodoh yang mereka miliki di meja rumah mereka, bukan perangkat profesional bermutu tinggi yang akan mengisi seluruh ruang tamu mereka (dan yang sering memiliki fitur semacam itu yang saya sebutkan).
Erwin Smout
21

Saya sedikit memodifikasi contoh printer agar lebih mudah dijelaskan

1 dokumen yang berisi 2 halaman dikirim ke printer

Transaksi - dokumen yang dikirim ke printer

  • atomicity - printer mencetak 2 halaman dokumen atau tidak sama sekali
  • konsistensi - printer mencetak setengah halaman dan halaman macet. Printer me-restart sendiri dan mencetak 2 halaman dengan semua konten
  • isolasi - sementara ada terlalu banyak print out yang sedang berlangsung - printer mencetak konten dokumen yang tepat
  • daya tahan - saat mencetak, ada pemotong listrik lagi mencetak dokumen tanpa kesalahan

Semoga ini bisa membantu seseorang untuk memahami konsep ACID

Manish Singh
sumber
Saya tidak yakin apa artinya "sementara ada terlalu banyak print out yang sedang berlangsung" - itu hanya "beberapa" daripada "terlalu banyak"?
icc97
17

Apa hubungan antara ACID dan transaksi basis data?

Dalam database relasional, setiap pernyataan SQL harus dijalankan dalam lingkup transaksi.

Tanpa mendefinisikan batas-batas transaksi secara eksplisit, database akan menggunakan transaksi implisit yang membungkus setiap pernyataan individu.

Transaksi implisit dimulai sebelum pernyataan dieksekusi dan berakhir (komit atau kembalikan) setelah pernyataan dieksekusi. Mode transaksi implisit umumnya dikenal sebagai autocommit.

Sebagaimana dijelaskan dalam artikel ini , transaksi adalah kumpulan operasi baca / tulis yang berhasil hanya jika semua operasi yang terkandung berhasil.

Atomicity

Secara inheren transaksi ditandai oleh empat properti (biasanya disebut ACID):

  • Atomicity
  • Konsistensi
  • Isolasi
  • Daya tahan

Apakah ACID memberikan transaksi basis data atau apakah itu hal yang sama?

Untuk sistem basis data relasional, ini benar karena SQL Standard menetapkan bahwa transaksi harus memberikan jaminan ACID:

Atomicity

Atomicity mengambil operasi individu dan mengubahnya menjadi unit kerja semua atau tidak sama sekali, berhasil jika dan hanya jika semua operasi yang terkandung berhasil.

Transaksi mungkin merangkum perubahan negara (kecuali jika itu hanya baca-saja). Suatu transaksi harus selalu meninggalkan sistem dalam keadaan yang konsisten, tidak peduli berapa banyak transaksi bersamaan yang disisipkan pada waktu tertentu.

Konsistensi

Konsistensi berarti kendala diberlakukan untuk setiap transaksi yang dilakukan. Itu menyiratkan bahwa semua Kunci, tipe data, Cek dan Pemicu berhasil dan tidak ada pelanggaran kendala dipicu.

Isolasi

Transaksi membutuhkan mekanisme kontrol konkurensi, dan mereka menjamin kebenaran bahkan ketika disisipkan. Isolasi memberi kita keuntungan menyembunyikan perubahan negara yang tidak dikomit dari dunia luar, karena transaksi yang gagal seharusnya tidak pernah merusak kondisi sistem. Isolasi dicapai melalui kontrol konkurensi menggunakan mekanisme penguncian pesimis atau optimis.

Daya tahan

Transaksi yang berhasil harus secara permanen mengubah status sistem, dan sebelum mengakhirinya, perubahan status dicatat dalam log transaksi tetap. Jika sistem kami tiba-tiba dipengaruhi oleh crash sistem atau pemadaman listrik, maka semua transaksi yang belum selesai dapat diputar ulang.

masukkan deskripsi gambar di sini

Untuk detail lebih lanjut tentang Daya Tahan dan Redo Log, lihat artikel ini .

Vlad Mihalcea
sumber
Untuk "konsistensi" - Saya melihat "kebenaran aplikasi logis" sebagai penjelasan di banyak tempat. Asumsikan jika itu masalahnya, DB tidak dapat mengetahui logika aplikasi. Jadi "konsistensi" tidak bisa menjadi properti yang melekat pada DB. Jadi untuk aplikasi untuk menerapkan kebenarannya (atau "konsistensi") tidakkah Atomicity dan Isolasi cukup?
user104309
1
Konsistensi dalam ACID berarti kendala integritas database: PK, FK, kendala UNIK. ACID penting, tetapi aplikasi Anda mungkin perlu lebih dari itu, seperti mencegah pembaruan yang hilang dalam percakapan panjang yang membutuhkan penguncian optimis tingkat aplikasi.
Vlad Mihalcea
Biarkan saya melihatnya. Tetapi sebelum itu saya perlu klarifikasi dasar. Komentar Brain Campbell dalam jawaban yang diterima "Dengan transaksi, meskipun pernyataan individual tidak menjaga konsistensi, transaksi secara keseluruhan tidak". Bagaimana itu mungkin ? Dan bagaimana beberapa debit dan kredit terkait dengan konsistensi?
user104309
Lihat bab Transaksi di buku Java Persistence Kinerja Tinggi saya untuk jawaban terperinci untuk semua pertanyaan itu.
Vlad Mihalcea
12

Properti ACID adalah konsep teori basis data yang sangat tua dan penting. Saya tahu Anda dapat menemukan banyak posting tentang topik ini, tetapi saya masih ingin mulai membagikan jawaban tentang ini karena ini adalah topik yang sangat penting dari RDBMS.

Sistem Database bermain dengan banyak jenis transaksi yang berbeda di mana semua transaksi memiliki karakteristik tertentu. Karakteristik ini dikenal dengan ACID Properties. Properti ACID mengambil penerima untuk semua transaksi basis data untuk menyelesaikan semua tugas.

Atomicity: Baik melakukan semua atau tidak sama sekali.

Konsistensi: Membuat catatan yang konsisten dalam hal memvalidasi semua aturan dan batasan transaksi.

Isolasi: Pastikan dua transaksi tidak saling mengetahui.

Daya tahan: data yang berkomitmen disimpan selamanya. Referensi diambil dari artikel ini:

Landasan
sumber
5

Mengutip Wikipedia :

ACID (atomicity, konsistensi, isolasi, daya tahan) adalah seperangkat properti yang menjamin transaksi basis data diproses secara andal.

DBMS yang mendukung transaksi akan berusaha untuk mendukung semua properti ini - setiap DBMS komersial (serta beberapa DBMS open-source) menyediakan 'dukungan' ACID penuh - walaupun sering kali mungkin (misalnya, dengan berbagai tingkat isolasi dalam MSSQL) untuk mengurangi ACIDness - sehingga kehilangan jaminan perilaku transaksional penuh.

Will A
sumber
3

[Gray] memperkenalkan properti ACD untuk transaksi pada tahun 1981. Pada tahun 1983 [Haerder] menambahkan properti Isolasi. Menurut pendapat saya, properti ACD akan memiliki set properti yang lebih berguna untuk didiskusikan. Satu interpretasi Atomicity (bahwa transaksi harus atomik seperti yang terlihat dari klien mana saja kapan saja) sebenarnya akan menyiratkan properti isolasi. Properti "isolasi" berguna ketika transaksi tidak terisolasi; ketika properti isolasi santai. Dalam ANSI SQL speak: jika level isolasi lebih lemah maka SERIALIZABLE. Tetapi ketika tingkat isolasi SERIALIZABLE, properti isolasi tidak benar-benar menarik.

Saya telah menulis lebih banyak tentang ini di sebuah posting blog: "ACID Tidak Masuk Akal".

http://blog.franslundberg.com/2013/12/acid-does-not-make-sense.html

[Gray] Konsep Transaksi, Jim Gray, 1981. http://research.microsoft.com/en-us/um/people/gray/papers/theTransactionConcept.pdf

[Haerder] Prinsip Pemulihan Basis Data Berorientasi Transaksi, Haerder dan Reuter, 1983. http://www.stanford.edu/class/cs340v/papers/recovery.pdf

Frans Lundberg
sumber
1

Transaksi dapat didefinisikan sebagai kumpulan tugas yang dianggap sebagai unit pemrosesan minimum. Setiap unit pemrosesan minimum tidak dapat dibagi lebih lanjut.

Semua transaksi harus mengandung empat properti yang umumnya dikenal sebagai properti ACID. yaitu ACID adalah kelompok properti dari setiap transaksi.

  • Atomicity:
  • Konsistensi
  • Isolasi
  • Daya tahan
ruam
sumber