4.1 Ketekalan tentang Brewera

Sebagai permulaan, Eric Brewer bukan, dan tidak pernah mendakwa sebagai, pakar pangkalan data. Dia tergolong dalam komuniti sistem teragih, dan ceramahnya yang terkenal, di mana "teorem" CAP muncul, diberikan pada persidangan "Prinsip Pengkomputeran Teragih". (Dengan cara ini, sepuluh tahun kemudian, pada tahun 2010, beliau sekali lagi memberikan ceramah jemputan pada persidangan yang sama, dan dalam ceramah ini beliau memberikan, khususnya, beberapa contoh sistem yang diedarkan, pembangunan yang mengambil kira " teorem" CAP.) Dalam bidang ini mempunyai tafsiran sendiri tentang istilah yang digunakan dalam bidang pangkalan data.

Khususnya, istilah "konsistensi serta-merta" bermaksud bahawa selepas pengguna menerima pemberitahuan daripada sistem tentang kejayaan menyiapkan beberapa operasi kemas kini data, hasil operasi ini dapat dilihat dengan serta-merta kepada semua pemerhati.

Ketekalan akhirnya bermakna jika tiada operasi kemas kini data baharu memasuki sistem untuk tempoh masa yang cukup lama, maka dapat dijangkakan bahawa keputusan semua operasi kemas kini data sebelumnya akhirnya akan merebak ke semua nod sistem, dan semua data replika adalah konsisten (nampaknya, ini harus difahami sebagai "semua replika akan mempunyai keadaan yang sama".

Dengan rasa konsisten ini dalam fikiran, "teorem" Brewer boleh dianggap agak mudah difahami dan jelas: dalam mana-mana sistem teragih dengan data dikongsi, hanya mana-mana dua sifat ketekalan, ketersediaan dan toleransi sekatan rangkaian boleh dipastikan serentak. Dalam hal ini, Brewer malah membezakan set sifat ACID dengan set sifat BASE yang dicadangkan (Dasarnya Tersedia, Keadaan Lembut, Konsisten Akhirnya - ketersediaan dalam kebanyakan kes; keadaan tidak stabil; konsistensi akhir). Tetapi pembangkang ini, pada pendapat saya, tidak wajar, kerana dalam kes pertama kita bercakap tentang ciri-ciri logik urus niaga, dan yang kedua - mengenai sifat fizikal sistem teragih.

4.2 Bukti "teorem"

Ramai yang percaya bahawa "teorem" Brewer telah terbukti secara rasmi. Malah, kertas kerja oleh Seth Gilbert dan Nancy Lynch memperkenalkan beberapa (hampir) takrif formal dalam konteks "teorem" benar-benar menjadi teorem dan dibuktikan. Walau bagaimanapun, mari kita lihat bagaimana ketiga-tiga sifat sistem teragih itu ditentukan, yang mana, menurut "teorem" Brewer, hanya dua sifat boleh disokong serentak.

Ketekalan dipanggil atom, atau ketekalan boleh lineariz (atom, atau ketekalan boleh lineariz), yang merupakan sifat sistem, semua objek data individu daripadanya adalah atom (boleh lineariz). Sebaliknya, objek atom ialah objek dengan beberapa operasi, supaya panggilan operasi dan penerimaan data tindak balas berlaku seolah-olah serta-merta, i.e. objek tidak menerima panggilan operasi seterusnya sehingga operasi sebelumnya telah selesai sepenuhnya. Susunan operasi yang diterima mestilah sedemikian sehingga jika operasi jenis baca tiba selepas beberapa operasi jenis tulis telah dilakukan, maka operasi baca mesti mengembalikan nilai yang ditulis oleh ini atau beberapa operasi tulis kemudian.

Sistem teragih sentiasa tersedia jika setiap permintaan yang diterima oleh nod yang tidak gagal mesti dijawab. Ketahanan sistem kepada partition rangkaian dimodelkan sebagai pemeliharaan daya maju sistem sekiranya kehilangan bilangan sewenang-wenangnya mesej yang dihantar dari satu nod ke nod yang lain.

Berdasarkan takrifan ini, Hilbert dan Lynch merumuskan teorem berikut (tiada jam dalam model rangkaian tak segerak, dan nod harus membuat keputusan hanya berdasarkan mesej yang diterima dan pengiraan setempat):

Dalam model rangkaian tak segerak, tidak mungkin untuk melaksanakan objek data baca/tulis yang menjamin ketersediaan dan sifat ketekalan atom untuk semua pelaksanaan yang sah (termasuk yang kehilangan mesej).

Teorem ini sebenarnya secara formal dibuktikan dengan kaedah "dengan percanggahan". Artikel itu seterusnya membuat kesimpulan bahawa:

Dalam model rangkaian tak segerak, adalah tidak mungkin untuk melaksanakan objek data baca/tulis yang menjamin sifat kebolehaksesan untuk semua pelaksanaan yang sah dan ketekalan atom untuk pelaksanaan yang sah di mana mesej tidak hilang.

Di samping itu, kebenaran teorem utama dibuktikan untuk model rangkaian separa segerak, di mana setiap nod mempunyai jam, masa yang ditunjukkan yang meningkat pada kadar yang sama, tetapi yang tidak disegerakkan, i.e. boleh menunjukkan masa yang berbeza pada saat sebenar yang sama. Ia ditunjukkan bahawa untuk kes ini akibat yang sama tidak diperoleh, dan, oleh itu, untuk rangkaian separa segerak terdapat lebih banyak kemungkinan untuk mengatur sistem teragih dengan sifat "baik".

Ya, dalam erti kata (tidak semestinya sama seperti yang dimaksudkan oleh Brewer) Gilbert dan Lynch boleh dianggap telah membuktikan bahawa adalah mustahil untuk memastikan sifat ketekalan atom, ketersediaan, dan toleransi pembahagian rangkaian dalam satu sistem teragih secara serentak. Tetapi apakah kaitannya dengan transaksi pangkalan data secara umum dan transaksi ACID khususnya?

4.3 Urus niaga ACID

Inilah yang ditulis oleh Julian Browne tentang perkara ini dalam notanya mengenai perbincangan "teorem" CAP:

Dalam bukti mereka, Hilbert dan Lynch menggunakan istilah atomicity dan bukannya konsistensi, yang lebih masuk akal dari sudut pandangan teknikal kerana, secara tegasnya, konsistensi dalam erti kata ACID merujuk kepada sifat ideal transaksi pangkalan data dan bermakna tiada data akan menjadi berterusan jika mereka melanggar beberapa sekatan yang telah ditetapkan. Tetapi jika kita menganggap bahawa had yang telah ditetapkan bagi sistem teragih adalah larangan kehadiran beberapa nilai yang berbeza untuk elemen data yang sama, maka, pada pendapat saya, kecacatan dalam abstraksi konsistensi ini boleh dipertimbangkan. tidak penting (selain itu, jika Brewer menggunakan istilah atomicity, maka teorem AAP akan muncul, yang namanya sangat menyusahkan untuk disebut).

Ini ditulis tidak terlalu serius, tetapi jujur. Dan, sebenarnya, keperluan ketekalan atom tidak boleh dicampur dengan keperluan ketekalan transaksi dalam erti kata ACID. Kekangan integriti pangkalan data adalah logik, jika anda mahu, keperluan perniagaan. Ia datang daripada logik domain aplikasi. Keperluan ketekalan atom adalah jenis yang sangat berbeza. Ini ialah keperluan pelaksanaan yang termasuk dalam kategori yang secara tradisinya dirujuk dalam industri pangkalan data sebagai konsistensi fizikal (contohnya, apabila melakukan sebarang operasi perubahan indeks, semua blok pepohon B+ yang sepadan mesti mengandungi nilai yang sah dan dikaitkan dengan rujukan yang sah. ).

Dan inilah yang ditulis oleh wakil komuniti pangkalan data Daniel Abadi dan Alexander Thomson dengan agak serius dalam nota mereka:

... keperluan untuk ketersediaan sistem transaksi berskala menjadi semakin kritikal, dan ini biasanya dipenuhi melalui replikasi dan pengalihan semula automatik permintaan sekiranya berlaku kegagalan salah satu nod. Oleh itu, pembangun aplikasi menjangkakan bahawa jaminan ketekalan sistem ACID (yang asalnya terdiri daripada sokongan tempatan untuk invarian yang ditentukan pengguna) akan dilanjutkan untuk memastikan ketekalan yang kukuh (bahawa semua replika data yang sama pada bila-bila masa akan menjadi salinan yang sama, iaitu dalam ketekalan kes ini tersirat dalam erti kata CAP/PACELC.

Dalam erti kata lain, konsistensi Brewer tiada kaitan dengan konsistensi dalam erti kata ACID, tetapi dalam sistem yang memberi tumpuan kepada penyediaan ketersediaan tinggi melalui replikasi data, adalah wajar untuk mengekalkan konsistensi replika yang kukuh. Ini bukan sifat ACID, tetapi ciri teknikal (fizikal) DBMS selari besar-besaran yang memudahkan pembangunan aplikasi.

Menurut Michael Stonebreaker, kunci untuk membina DBMS moden berkualiti tinggi ialah pilihan kompromi teknikal yang tepat. Apabila memilih penyelesaian kejuruteraan tertentu, banyak faktor mesti diambil kira - keperluan pengguna masa depan, kemungkinan pelbagai situasi kegagalan, dsb., dan tidak dipandu secara dogmatik oleh mana-mana garis panduan teori umum (termasuk "teorem" CAP).

Stonebreaker percaya bahawa dalam bidang sistem pangkalan data selari transaksional, meninggalkan konsistensi Brewer demi menyokong ketersediaan tinggi dan toleransi partition rangkaian adalah pertukaran yang lemah kerana (a) ketekalan replika adalah ciri yang sangat berguna bagi sistem; (b) DBMS selari secara besar-besaran transaksi tidak memerlukan kelompok dengan bilangan nod yang sangat besar, jadi situasi perpecahan rangkaian tidak mungkin berlaku; (c) sistem boleh menjadi tidak tersedia dengan mudah, bukan kerana partition rangkaian, tetapi, sebagai contoh, kerana kehadiran ralat perisian yang kerap berlaku.

Oleh itu, aktiviti tinggi wakil kem NoSQL (baca NoACID), yang sering merujuk kepada "teorem" Brewer, tidak berkaitan dengan ketidakmungkinan teori untuk membina DBMS transaksi selari secara besar-besaran yang menyokong transaksi ACID, tetapi dengan fakta bahawa sistem dipermudahkan. yang tidak menyokong hanya urus niaga ACID, tetapi juga konsistensi replika, dibuat dengan lebih mudah dan pantas. Oleh kerana organisasinya yang ringkas, mereka mampu memproses data yang sangat pantas, dan untuk sesetengah aplikasi ini lebih penting daripada semua kemudahan yang wujud dalam teknologi pangkalan data.

Mari lihat bagaimana komuniti pangkalan data bertindak balas terhadap cabaran ini.