Berapa banyak pemasaran di ACID?

Halo semuanya. Dalam sentuhan Vladislav Rodin. Saat ini, saya adalah kepala kursus Arsitek Beban Tinggi di OTUS, dan saya juga mengajar kursus arsitektur perangkat lunak.

Selain mengajar, seperti yang Anda lihat, saya telah menulis untuk materi hak cipta blog OTUS Habré dan artikel hari ini saya ingin bertepatan dengan dimulainya kursus "Databases" , yang sekarang telah membuka lokasi syuting.




Kata pengantar


Transaksi muncul di tahun 70-an dan disajikan sebagai alat basis data untuk menyelesaikan masalah toleransi kesalahan dan akses data dalam lingkungan yang kompetitif. Kemudian sejumlah properti dirumuskan bahwa transaksi harus memiliki untuk memenuhi tugas yang diberikan kepadanya, dan huruf kapital dari properti ini, diatur dalam urutan yang tepat, membentuk akronim ACID yang indah.

Periode waktu di mana peristiwa ini terjadi ditandai dengan tidak adanya beban tinggi, Internet dan masalah kinerja, yang hanya dapat diselesaikan dengan metode penskalaan vertikal. Selanjutnya, pada awal 2000-an, tren muncul pada database NoSQL, BASE singkatan muncul, yang sebenarnya bertentangan dengan ACID klasik (ACID - acid, BASE - alkali). Sekarang ada tren terbalik untuk ACID. Bahkan MongoDB NoSQL sekarang mendukung ACID.

Mari kita lihat apa arti singkatan ini dan seberapa banyak pemasaran yang dimilikinya.

ACID mewakili 4 properti:

A = atomisitas
C = konsistensi
I = isolasi
D = daya tahan

Sekarang mari kita bicara tentang masing-masing properti secara terpisah.

A = atomicity


Atomicity adalah istilah kelebihan beban dan dalam konteks transaksi dalam database dapat dirumuskan sebagai prinsip "semua atau tidak sama sekali." Jika transaksi Anda mengandung 10 operasi penyisipan, maka semua 10 akan dieksekusi (melakukan transaksi komit akan dilakukan), atau tidak ada satupun (transaksi rollback akan dilakukan).

Bagaimana properti ini disediakan? Faktanya adalah bahwa ketika transaksi yang berisi 10 sisipan yang sama datang ke database, data tidak mulai berubah. Sebelum transaksi, transaksi ditulis langsung ke data dalam log, di mana perubahan yang dibuat olehnya dicatat. Jurnal ini juga dapat digunakan untuk mereplikasi data, atau dapat sepenuhnya tidak berhubungan dengan itu, seperti yang telah saya jelaskan, misalnya, di sini. Berkat jurnal ini, transaksi dapat dilakukan secara langsung ke data, atau, dalam hal ini, kembalikan. Aturan bahwa transaksi harus ditutup sesegera mungkin mengikuti langsung dari pemahaman prinsip-prinsip untuk menerapkan properti ini: database sering dilarang untuk membersihkan log ini saat transaksi terbuka, sehingga dapat menjadi tersumbat, yang pada gilirannya, menyebabkan konsekuensi yang sangat tidak menyenangkan.

C = konsistensi (konsistensi atau integritas)


Dalam hal ACID, konsistensi tidak berarti sama seperti dalam teorema CAP (dalam teori sistem terdistribusi, ada banyak derajat konsistensi ini). Yang dimaksud dengan konsistensi adalah sebagai berikut: beberapa invarian standar sistem harus dijalankan sebelum dan sesudah transaksi komit. Contoh invarian sistem dapat diwakili: debit menyatu dengan pinjaman, total gaji karyawan tidak melebihi anggaran, jumlah karyawan di perusahaan sama dengan jumlah lowongan yang dibuka sebelumnya, dll. Dalam bahasa database, ini berarti hanya pemenuhan semua kendala.

Pertanyaan tentang perlunya konsistensi di tingkat basis data cukup kontroversial, karena adanya kendala dapat menunjukkan bahwa bagian dari logika bisnis telah berpindah dari aplikasi ke tingkat basis data, yang tidak secara universal diakui sebagai praktik yang baik. Pada akhirnya, aplikasi itu sendiri dapat memutuskan untuk tidak melakukan data yang tidak valid. Ada pendapat bahwa konsistensi ditambahkan hanya untuk membuat singkatan itu indah (pemasaran).

I = isolasi


Isolasi adalah properti basis data yang memungkinkan transaksi paralel dijalankan sebagai berurutan. Lagi pula, tidak ada yang melarang database untuk melakukan beberapa transaksi pada saat yang sama, perlu untuk memastikan bahwa mereka tidak saling mempengaruhi, sehingga anomali dari bentuk kondisi balapan tidak terjadi. Bahkan, itu adalah isolasi yang memecahkan masalah akses data dalam lingkungan yang kompetitif.

Pengungkapan konsep isolasi karena volumenya layak mendapatkan artikel terpisah., karena justru isolasi itulah yang bisa disebut jantung ACID. Harga transaksionalitas sering turun pada harga untuk memastikan isolasi, yang mengapa isolasi memiliki tingkat yang berbeda, masing-masing menyediakan tingkat perlindungannya sendiri terhadap kondisi balapan dan membawa satu atau lebih overhead lainnya. Isolasi sepenuhnya dipastikan hanya pada tingkat serializable, yang sangat sulit untuk diterapkan dan yang jarang dibutuhkan.

D = daya tahan


Ketahanan memberitahu kita bahwa jika suatu transaksi telah diterapkan, maka tidak berarti apakah itu hilang. Bahkan, ini berarti yang berikut: jika database merespons bahwa suatu transaksi dilakukan, transaksi tersebut dilakukan pada memori yang tidak mudah menguap. Ini berarti bahwa panggilan sistem fsync terjadi, yaitu, buffer dibilas ke hard drive, dan itu menjawab ok.

Daya tahan juga merupakan istilah pemasaran, karena tidak dapat sepenuhnya disediakan. Bahkan jika kita membuang skenario buatan "membakar bumi oleh alien", setelah itu tidak akan ada database atau transaksi sama sekali, lebih mungkin tetapi skenario ekstrim penghancuran fisik hard drive tertentu di mana transaksi dicatat, kita dapat mengingat bahwa sistem fsync memanggil jaminan Memukul hard drive di controller, yang, pada gilirannya, masih berisi buffer volatile. Waktu yang dihabiskan di dalamnya singkat, tetapi tidak sama dengan 0. Sebagai hasilnya, jika Anda mematikan listrik tepat pada saat yang "tepat", transaksi mungkin masih hilang!

Meskipun masalah dengan fsync telah dipecahkan dalam database Oracle yang mahal, tidak ada yang dapat melindungi kita dari masalah yang terkait dengan penghancuran fisik mesin. Kami hanya dapat meningkatkan jaminan menggunakan cadangan dan replikasi .

temuan


Terlepas dari kenyataan bahwa ACID menyediakan properti yang cukup menarik, seperti atomicity dan isolasi, beberapa properti ini hanya pemasaran, dan bahkan dikenal karena kekakuannya dibandingkan dengan BASE, ACID tidak sepenuhnya memastikan tidak adanya peluang kehilangan transaksi, serta dampak dari hasil melakukan transaksi simultan satu sama lain (isolasi masih harus dikonfigurasi!).


Kami mengundang semua orang ke pelajaran gratis tentang topik: "Sebuah model untuk bekerja dengan data di PostgreSQL . "



All Articles