ACID ve veritabanı işlemleri nasıl çalışır?


161

ACID ve veritabanı işlemi arasındaki ilişki nedir?

ACID veritabanı işlemi yapıyor mu yoksa aynı şey mi?

Birisi bu konuyu aydınlatabilir mi?

Yanıtlar:


320

ACID , veritabanını değiştirirken uygulamak istediğiniz bir dizi özelliktir.

  • Atomsallık
  • Tutarlılık
  • İzolasyon
  • dayanıklılık

İşlem, bazı ACID özelliklerine ulaşmak için kullanılan bir dizi ilgili değişikliktir. İşlemler, ACID özelliklerini elde etmek için kullanılan araçlardır.

Atomisite, tüm işlemlerin gerçekleştiğini veya hiçbirinin gerçekleşmeyeceğini garanti edebileceğiniz anlamına gelir; karmaşık işlemleri tek bir birim, tümü veya hiçbir şey olarak yapabilirsiniz ve bir çökme, elektrik kesintisi, hata veya başka bir şey, yalnızca ilgili değişikliklerin bazılarının gerçekleştiği bir durumda olmanıza izin vermez.

Tutarlılık, verilerinizin tutarlı olacağını garanti ettiğiniz anlamına gelir; ilgili veriler üzerinde sahip olduğunuz kısıtlamaların hiçbiri ihlal edilmeyecektir.

Yalıtım, bir işlemin henüz tamamlanmamış başka bir işlemden veri okuyamayacağı anlamına gelir. İki işlem eşzamanlı olarak yürütülüyorsa, her biri dünyayı sırayla yürütüyormuş gibi görür ve birinin diğeri tarafından yazılan verileri okuması gerekiyorsa, diğerinin bitmesini beklemek gerekir.

Dayanıklılık, bir işlem tamamlandığında, tüm değişikliklerin dayanıklı bir ortama (sabit disk gibi) kaydedildiği ve işlemin tamamlanmış olduğu gerçeğinin kaydedildiği anlamına gelir.

Dolayısıyla, işlemler bu özellikleri garanti altına almak için bir mekanizmadır; bunlar, bir bütün olarak, bir grup işlemin atomik olabileceği, tutarlı sonuçlar üretebileceği, diğer işlemlerden izole edilebileceği ve kalıcı olarak kaydedilebileceği şekilde ilgili eylemleri gruplamanın bir yoludur.


6
"Tutarlılık, verilerinizin tutarlı olmasını garanti ettiğiniz anlamına gelir; ilgili verilerle ilgili kısıtlamalarınızın hiçbiri ihlal edilmeyecektir" diyorsunuz. Kısıtlamalarla, veritabanında tanımlananları kastediyorsanız (örneğin, kontrol kısıtlamaları), işlem yönetiminin ihlal edilmelerini önlemekle ne ilgisi vardır? Her zaman yürürlükte değiller mi? Bana öyle geliyor ki ACID'deki C'nin başka bir anlamı olmalı.
Marc Rochkind

20
@MarcRochkind Bir işlem, işlem içindeki bireysel işlemler tutarlılık kısıtlamalarını ihlal etse bile tutarlılık denetimleri uygulamanızı sağlar. Örneğin, çift girişli bir defter tutma sistemini güncellüyorsanız, aynı anda birkaç hesaptan borçlandırmanız ve birkaç hesaba kredi vermeniz gerekebilir. İşlemler olmadan, her ifadeden sonra kısıtlamaları kontrol edersiniz ve tek tek ifadeler tutarlılığı korumadığından başarısız olur. İşlemlerde, münferit ifadeler tutarlılığı korumasa da, bir bütün olarak işlem yapar.
Brian Campbell

1
" ve bir başkası tarafından yazılan verileri okumak gerekiyorsa, diğeri bitinceye kadar beklemek zorunda " - tamamen doğru değil. İlk işlem bu verileri okuyabilir (ve gönderir) ve durumu ikinci işlem başlamadan önceki haliyle görür.
a_horse_with_no_name

1
@BrianCampbell 1) Tutarlılık, işlemin sonunda hem UNIQUE, FOREIGN KEY gibi "kontrol kısıtlamaları" ve geçerli durumdur (uygulamanın iş mantığına / gereksinimine göre)? 2) Atomisite ve / veya İzolasyon tek başına Tutarlılık sağlamaz mı? Tutarlılığı açıkça gerekli bir mülk olarak belirtmeli miyiz?
user104309

1
@a_horse_with_no_name OCC (İyimser eşzamanlılık kontrolü) v / s PCC (Kötümser) hakkında konuşuyorsunuz. Her ikisi de bir ACID uyumlu veritabanı sisteminde uygulanabilir, tutarlılık mı yoksa yüksek kullanılabilirlik mi istediğinize bağlıdır.
Siddhartha

37

ACID, herhangi bir işlem işleme motorunun istenen özellikleridir.

Bir DBMS (eğer iyi ise), genellikle çok büyük ölçüde ama tamamen değil, bu özellikleri ortaya çıkaran belirli bir tür işlem işleme motorudur.

Ancak bu özellikleri ortaya çıkaran başka motorlar da vardır. Eskiden "TP monitörler" olarak adlandırılan bir yazılım söz konusudur (günümüzde çoğunlukla web sunucularıdır).

Bu tür TP monitörler, DBMS (örneğin bir yazıcı) dışındaki kaynaklara erişebilir ve yine de kullanıcılarına karşı ACID'i garanti edebilir. Yazıcı bir işleme dahil olduğunda ACID'nin ne anlama gelebileceğine örnek olarak:

  • Atomisite: Belgenin tamamı yazdırılır veya hiçbir şey yazdırılmaz
  • Tutarlılık: işlemin sonunda, kağıt besleme sayfanın üstüne yerleştirilir
  • İzolasyon: yazdırma sırasında iki belge karışmaz
  • Dayanıklılık: yazıcı boş kartuşlarla "yazdırılmadığını" garanti edebilir.

3
harika özlü yazıcı örnekleri.
göller

2
İyi örnek. Yine de "Tutarlılık" bölümünü anlamıyorum. Bana göre daha iyi bir örnek "Yazıcı 10 inçten daha büyük kağıtları kabul etmiyor."
skeller88

EDIT - "kağıt 10 inçten daha geniş."
skeller88

1
İtiraf ediyorum ki biraz gergin. Ancak daha iyi örnekler bulmak zordur çünkü "tutarlılık" verilerle ilgilidir ve bir yazıcı tam olarak bir veri cihazı değildir.
Erwin Smout

1
Peki, bir belgenin sayfa sayısı şu anda kağıt beslemesinde olduğu bilinen sayfa sayısından yüksekse, yazıcının yazdırmaya başlamasını engelleyen bir özelliği vardır. Burada yorum yapan birçok kişi için sorun olduğunu görüyorsunuz. "Yazıcı" dan bahsediyorsunuz ve sadece tüm masasını dolduracak yüksek kaliteli profesyonel cihazı değil, ev masasında sahip oldukları aptal seri akış cihazını görüyorlar (ve sıklıkla bahsettiğim bu tür özelliklere sahipler).
Erwin Smout

21

Yazıcı örneğini daha açık hale getirmek için biraz değiştirdim

2 sayfa içeriği olan 1 belge yazıcıya gönderildi

İşlem - belge yazıcıya gönderildi

  • bölünmezlik - yazıcı belgenin 2 sayfasını yazdırır veya hiç yazdırmaz
  • tutarlılık - yazıcı yarım sayfa yazdırır ve sayfa takılır. Yazıcı kendini yeniden başlatır ve tüm içeriği olan 2 sayfa yazdırır
  • yalıtım - çok fazla çıktı alınırken - yazıcı belgenin doğru içeriğini yazdırır
  • dayanıklılık - yazdırma sırasında bir elektrik kesicisi vardı, belgeleri tekrar hatasız yazdırır

Umarım bu ASID kavramının asılmasına yardımcı olur


" Devam etmekte olan çok fazla çıktı varken" ne anlama geldiğinden emin değilim - "çok fazla" yerine sadece "çoklu" mu?
icc97

17

ACID ve veritabanı işlemi arasındaki ilişki nedir?

İlişkisel bir veritabanında, her SQL ifadesi bir işlem kapsamında yürütülmelidir.

İşlem sınırlarını açıkça tanımlamaksızın, veritabanı her bir ifadeyi saran örtük bir işlem kullanacaktır.

Örtük işlem, deyim yürütülmeden önce başlar ve deyim yürütüldükten sonra sona erer (kesinleştirme veya geri alma). Örtük işlem modu yaygın olarak otomatik taahhüt olarak bilinir.

Bu makalede açıklandığı gibi , bir işlem yalnızca içerilen tüm işlemler başarılı olduğunda başarılı olan okuma / yazma işlemlerinin bir koleksiyonudur.

Atomsallık

Doğal olarak bir işlem dört özellik ile karakterize edilir (genel olarak ACID olarak adlandırılır):

  • Atomsallık
  • Tutarlılık
  • İzolasyon
  • dayanıklılık

ACID veritabanı işlemi yapıyor mu yoksa aynı şey mi?

İlişkisel bir veritabanı sistemi için bu doğrudur, çünkü SQL Standardı bir işlemin ACID garantileri sağlaması gerektiğini belirtir:

Atomsallık

Atomisite bireysel operasyonlar alır ve bunları ya hep ya hiç çalışma birimine dönüştürür, ancak içerilen tüm işlemler başarılı olursa ve ancak başarılı olur.

Bir işlem, durum değişikliğini kapsayabilir (salt okunur değilse). Bir işlem, herhangi bir zamanda kaç eşzamanlı işlemin aralıklı olarak ayrıldığına bakılmaksızın, sistemi her zaman tutarlı bir durumda bırakmalıdır.

Tutarlılık

Tutarlılık, taahhüt edilen her işlem için kısıtlamaların uygulandığı anlamına gelir. Bu, tüm Anahtarlar, Veri türleri, Kontroller ve Tetikleyicilerin başarılı olduğunu ve herhangi bir kısıtlama ihlali tetiklenmediğini gösterir.

İzolasyon

İşlemler eşzamanlılık kontrol mekanizmaları gerektirir ve serpiştirilmiş olsalar bile doğruluğu garanti ederler. Yalıtım bize taahhüt edilmemiş devlet değişikliklerini dış dünyadan saklamanın faydasını getirir, çünkü başarısız işlemler sistemin durumunu asla bozmamalıdır. İzolasyon, kötümser veya iyimser kilitleme mekanizmaları kullanılarak eşzamanlılık kontrolü ile elde edilir.

dayanıklılık

Başarılı bir işlem bir sistemin durumunu kalıcı olarak değiştirmelidir ve bitirmeden önce durum değişiklikleri kalıcı bir işlem günlüğüne kaydedilir. Sistemimiz bir sistem çökmesinden veya bir elektrik kesintisinden aniden etkilenirse, tamamlanmamış tüm işlemler yeniden oynatılabilir.

resim açıklamasını buraya girin

Dayanıklılık ve Yineleme Günlüğü hakkında daha fazla bilgi için bu makaleye göz atın .


"Tutarlılık" için - "Uygulamaya özgü mantıksal doğruluk" ifadesini birçok yerde açıklama olarak görüyorum. Durum böyle ise, DB uygulama mantığını bilemez. Dolayısıyla, "tutarlılık" bir DB'nin doğal bir özelliği olamaz. Uygulamanın doğruluğunu (veya "tutarlılığını") uygulaması için Atomisite ve İzolasyon yeterli değil mi?
user104309

1
ACID'deki tutarlılık veritabanı bütünlüğü kısıtlamaları anlamına gelir: PK, FK, UNIQUE kısıtlamaları. ACID önemlidir, ancak uygulamanızın uygulama düzeyinde iyimser kilitleme gerektiren uzun konuşmalarda kayıp güncellemeleri önlemek gibi bundan daha fazlasına ihtiyacı olabilir .
Vlad Mihalcea

Bir bakayım. Ama ondan önce temel bir açıklamaya ihtiyacım var. Brain Campbell'ın kabul ettiği cevaptaki yorumu "İşlemlerle, bireysel ifadeler tutarlılığı korumasa da, bir bütün olarak işlem yapar". Bu nasıl mümkün olaiblir ? Peki tutarlılık ile ilgili çoklu borçlar ve krediler nasıl?
user104309

Tüm bu soruların ayrıntılı bir cevabı için Yüksek Performanslı Java Kalıcılığı kitabımdaki İşlemler bölümüne göz atın .
Vlad Mihalcea

12

ASİT özellikleri veritabanı teorisi için çok eski ve önemli bir kavramdır. Bu konuda çok sayıda yayın bulabileceğinizi biliyorum, ancak yine de bu konuda cevap vermeye başlamak istiyorum, çünkü bu RDBMS'nin çok önemli bir konusudur.

Veritabanı Sistemi, tüm işlemlerin belirli özelliklere sahip olduğu birçok farklı işlem türüyle oynar. Bu özellik ACID Özellikleri olarak bilinir. ACID Özellikleri, tüm görevleri gerçekleştirmek için tüm veritabanı işlemleri için yetkilendirilir.

Atomisite: Ya tamamen ya da hiçbir şeyi taahhüt edin.

Tutarlılık: İşlemin tüm kuralını ve kısıtlamasını doğrulamak için tutarlı bir kayıt yapın.

Yalıtım: İki işlemin birbirinden habersiz olduğundan emin olun.

Dayanıklılık: sonsuza kadar saklanan kararlı veriler. Bu makaleden alınan referans:


5

Vikipedi teklifi yapmak için :

ASİT (atomisite, tutarlılık, izolasyon, dayanıklılık), veritabanı işlemlerinin güvenilir bir şekilde işlenmesini garanti eden bir dizi özelliktir.

İşlemleri destekleyen bir DBMS, bu özelliklerin tümünü desteklemek için çaba gösterecektir - herhangi bir ticari DBMS (ayrıca birkaç açık kaynaklı DBMS) tam ACID 'desteği' sağlar - genellikle mümkün olmasına rağmen (örneğin, MSSQL'de değişen yalıtım düzeyleriyle) ACIDness'i azaltın - böylece tam işlem davranışı garantisini kaybedin.


3

[Gri] 1981'de bir işlem için ACD özelliklerini tanıttı. 1983'te [Haerder], İzolasyon özelliğini ekledi. Bence, ACD özelliklerinin tartışılması daha yararlı bir özellik kümesi olacaktır. Atomikliğin bir yorumu (işlemin herhangi bir müşteriden herhangi bir zamanda görüldüğü gibi atomik olması) aslında izolasyon özelliğini ima eder. "İzolasyon" özelliği, işlem olmadığında yararlıdır izole; izolasyon özelliği gevşediğinde. ANSI SQL'de konuşun: yalıtım seviyesi zayıfsa SERIALIZABLE. Ancak izolasyon seviyesi SERİLEŞTİRİLEBİLİR olduğunda, izolasyon özelliği gerçekten ilgi çekici değildir.

Bu konuda bir blog yazısında daha fazla yazdım: "ASİT Mantıklı Değil".

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

[Gri] İşlem Kavramı, Jim Gray, 1981. http://research.microsoft.com/en-us/um/people/gray/papers/theTransactionConcept.pdf

[Haerder] İşlem Odaklı Veritabanı Kurtarma İlkeleri, Haerder ve Reuter, 1983. http://www.stanford.edu/class/cs340v/papers/recovery.pdf


1

İşlem, minimum işlem birimi olarak kabul edilen bir görev koleksiyonu olarak tanımlanabilir. Her minimum işlem birimi daha fazla bölünemez.

Tüm işlemler, genel olarak ACID özellikleri olarak bilinen dört özellik içermelidir. ACID, herhangi bir işlemin özellik grubudur.

  • Atomisite:
  • Tutarlılık
  • İzolasyon
  • dayanıklılık
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.