İşlemler ve kontrol mekanizmaları

Işlemler

İşlem, bir başlangıcı ve sonu olan veriler üzerinde yapılan bir dizi işlemdir.

İşlem, okuma ve yazma işlemlerinin sıralı olarak yürütülmesidir. Bir işlemin sonu, değişikliklerin kaydedilmesi (taahhüt) veya değişikliklerin iptal edilmesi (geri alma) olabilir. Bir veritabanıyla ilgili olarak, bir işlem, tek bir istek olarak değerlendirilen birçok istekten oluşur.

İşlemler ACID özelliklerini karşılamalıdır

Atomiklik. İşlem ya tamamen tamamlanır ya da hiç tamamlanmaz.

Tutarlılık. Bir işlemi tamamlarken verilere uygulanan kısıtlamaların (örneğin veri tabanındaki kısıtlamalar) ihlal edilmemesi gerekir. Tutarlılık, sistemin bir doğru durumdan diğer bir doğru duruma aktarılacağını ifade eder.

İzolasyon. Paralel olarak yürütülen işlemler birbirini etkilememelidir; örneğin başka bir işlem tarafından kullanılan verileri değiştirmemelidir. Paralel işlemlerin yürütülmesinin sonucu, işlemlerin sıralı olarak yürütülmesiyle aynı olmalıdır.

Sürdürülebilirlik. Bir kez taahhüt edildiğinde değişiklikler kaybolmamalıdır.

İşlem günlüğü

Günlük, işlemler tarafından yapılan değişiklikleri saklar, sistem arızası durumunda verilerin atomikliğini ve stabilitesini sağlar

Günlük, verinin işlem tarafından değiştirilmeden önce ve değiştirildikten sonra sahip olduğu değerleri içerir. Yazma öncesi log stratejisi, başlamadan önce önceki değerlere ve işlem tamamlandıktan sonra son değerlere ilişkin bir log girişi eklenmesini gerektirir. Sistemin ani durması durumunda veritabanı log'u ters sırayla okur ve işlemlerin yaptığı değişiklikleri iptal eder. Kesintiye uğrayan bir işlemle karşılaşan veritabanı, onu yürütür ve günlükte bununla ilgili değişiklikler yapar. Arıza anında durumda olan veritabanı, log'u ileri sırayla okur ve işlemlerin yaptığı değişiklikleri döndürür. Bu şekilde halihazırda gerçekleştirilmiş olan işlemlerin istikrarı ve kesintiye uğrayan işlemin atomikliği korunur.

Başarısız olan işlemlerin yalnızca yeniden yürütülmesi, kurtarma için yeterli değildir.

Örnek. Kullanıcının hesabında 500$ vardır ve kullanıcı bunu ATM'den çekmeye karar verir. İki işlem sürüyor. İlki bakiye değerini okur ve bakiyede yeterli para varsa kullanıcıya para verir. İkincisi gerekli miktarı bakiyeden çıkarır. Diyelim ki sistem çöktü ve ilk işlem başarısız oldu, ancak ikincisi başarısız oldu. Bu durumda sistemi pozitif bakiye ile orijinal durumuna döndürmeden kullanıcıya yeniden para basamayız.

Yalıtım seviyeleri

Okuma Taahhüdü

Kirli Okuma sorunu, bir işlemin başka bir işlemin ara sonucunu okuyabilmesidir.

Örnek. Başlangıç ​​bakiye değeri 0$'dır. T1 bakiyenize 50$ ekler. T2 bakiye değerini (50$) okur. T1 değişiklikleri atar ve çıkar. T2, yanlış bakiye verileriyle yürütmeye devam ediyor.

Çözüm, işlem tarafından değiştirilen verilerin okunmasını yasaklayan sabit verileri okumaktır (Okuma Taahhüdü). A işlemi belirli bir veri kümesini değiştirmişse, B işlemi bu verilere erişirken A işleminin tamamlanmasını beklemek zorunda kalır.

Tekrarlanabilir Okuma

Kayıp Güncellemeler sorunu. T1, değişiklikleri T2'deki değişikliklerin üzerine kaydeder.

Örnek. Başlangıçtaki bakiye değeri 0$'dır ve iki işlem aynı anda bakiyeyi yeniler. T1 ve T2'de 0 dolarlık bir bakiye okunuyor. T2 daha sonra 200$'ı 0$'a ekler ve sonucu kaydeder. T1, 100 $'a 0 $ ekler ve sonucu kaydeder. Nihai sonuç 100$ yerine 300$ olacaktır.

Tekrarlanamayan okuma sorunu. Aynı veriyi tekrar tekrar okumak farklı değerler döndürür.

Örnek. T1, 0$ bakiye değerini okur. T2 daha sonra bakiyeye 50$ ekler ve sona erer. T1 verileri tekrar okur ve önceki sonuçla bir tutarsızlık bulur.

Tekrarlanabilir Okuma, ikinci bir okumanın aynı sonucu vermesini sağlar. Bir işlem tarafından okunan veriler, işlem tamamlanana kadar diğer işlemlerde değiştirilemez. A işlemi belirli bir veri kümesini okuduysa, B işlemi bu verilere erişirken A işleminin tamamlanmasını beklemek zorunda kalır.

Sıralı okuma (Serileştirilebilir)

Hayalet Okuma sorunu. Belirli bir koşula göre veri seçen iki sorgu farklı değerler döndürür.

Örnek. T1, bakiyesi 0 USD'den büyük ancak 100 USD'den az olan tüm kullanıcıların sayısını ister. T2, bakiyesi 1$ olan kullanıcıdan 101$ kesinti yapar. T1 isteği yeniden yayınlar.

Sıralı okuma (Serileştirilebilir). İşlemler tamamen sıralı olarak yürütülür. Talep şartlarına giren kayıtların güncellenmesi veya eklenmesi yasaktır. A işlemi tüm tablodan veri talep etmişse, A işlemi tamamlanana kadar tablonun tamamı diğer işlemler için dondurulur.

Zamanlayıcı

Paralel işlemler sırasında işlemlerin gerçekleştirilmesi gereken sırayı ayarlar.

Belirli bir düzeyde izolasyon sağlar. İşlemlerin sonucu sıralarına bağlı değilse, bu tür işlemler değişmelidir (Değiştirilebilir). Farklı veriler üzerindeki okuma işlemleri ve işlemler değişmelidir. Okuma-yazma ve yazma-yazma işlemleri değişmeli değildir. Zamanlayıcının görevi, paralel işlemler tarafından gerçekleştirilen işlemleri, yürütme sonucunun işlemlerin sıralı yürütülmesine eşdeğer olmasını sağlayacak şekilde serpiştirmektir.

Paralel işleri kontrol etmeye yönelik mekanizmalar (Eşzamanlılık Kontrolü)

İyimserlik çatışmaları tespit etmeye ve çözmeye dayanır, kötümserlik ise çatışmaların ortaya çıkmasını önlemeye dayanır.

İyimser yaklaşımda, birden fazla kullanıcının elinde verilerin kopyaları bulunur. Düzenlemeyi tamamlayan ilk kişi değişiklikleri kaydeder, diğerlerinin ise değişiklikleri birleştirmesi gerekir. İyimser bir algoritma çatışmanın ortaya çıkmasına izin verir, ancak sistemin çatışmadan kurtulması gerekir.

Kötümser bir yaklaşımla veriyi ilk ele geçiren kullanıcı, diğerlerinin veriyi almasını engeller. Çatışmalar nadirse, daha yüksek düzeyde eşzamanlılık sağladığı için iyimser stratejiyi seçmek akıllıca olacaktır.

Kilitleme

Bir işlemde veri kilitliyse, diğer işlemler verilere erişirken kilidin açılmasını beklemelidir.

Bir blok bir veritabanına, tabloya, satıra veya özniteliğe yerleştirilebilir. Paylaşılan Kilit, aynı verilere birden fazla işlem tarafından uygulanabilir, tüm işlemlerin (bunu uygulayan da dahil olmak üzere) okunmasına izin verir, değişiklik yapılmasını ve özel yakalamayı yasaklar. Özel Kilit yalnızca bir işlem tarafından uygulanabilir, zorunlu işlemin tüm eylemlerine izin verir, başkalarının eylemlerini yasaklar.

Kilitlenme, işlemlerin süresiz olarak devam eden bekleme durumunda kaldığı bir durumdur.

Örnek. İlk işlem, ikincisinin yakaladığı verilerin serbest bırakılmasını beklerken, ikincisi, birincinin yakaladığı verilerin serbest bırakılmasını bekler.

Kilitlenme sorununa iyimser bir çözüm, kilitlenmenin oluşmasına izin verir, ancak daha sonra kilitlenmeyle ilgili işlemlerden birini geri alarak sistemi kurtarır.

Belirli aralıklarla kilitlenmeler aranır. Tespit yöntemlerinden biri zamana göredir; yani, işlemin tamamlanması çok uzun sürerse bir kilitlenmenin meydana geldiğini düşünün. Bir kilitlenme bulunduğunda, işlemlerden biri geri alınarak kilitlenmeye dahil olan diğer işlemlerin tamamlanmasına olanak sağlanır. Mağdurun seçimi, işlemlerin değerine veya kıdemine (Bekle-Öl ve Yara-bekle şemaları) bağlı olabilir.

Her işlem T bir zaman damgası atanır TS işlemin başlangıç ​​zamanını içerir.

Bekle-öl.

Eğer TS(Ti) < TS(Tj)Sonra Ti bekler, aksi takdirde Ti geri döner ve aynı zaman damgasıyla yeniden başlar.

Yeni bir işlem bir kaynak edinmişse ve daha eski bir işlem aynı kaynağı talep ediyorsa, eski işlemin beklemesine izin verilir. Daha eski bir işlem bir kaynak edinmişse, o kaynağı talep eden daha genç işlem geri alınacaktır.

Yara bekle.

Eğer TS(Ti) < TS(Tj)Sonra Tj geri döner ve aynı zaman damgasıyla yeniden başlar, aksi halde Ti beklemek.

Daha genç bir işlem bir kaynak edinmişse ve daha eski bir işlem aynı kaynağı talep ediyorsa, daha genç olan işlem geri alınacaktır. Daha eski bir işlem bir kaynak edinmişse, o kaynağı talep eden daha genç işlemin beklemesine izin verilir. Önceliğe dayalı kurban seçimi, kilitlenmeleri önler ancak kilitlenmemiş işlemleri geri alır. Sorun, işlemlerin birçok kez geri alınabilmesidir çünkü... daha eski bir işlem, kaynağı uzun süre tutabilir.

Kilitlenme sorununa kötümser bir çözüm, kilitlenme riski varsa bir işlemin yürütülmesine izin vermez.

Bir kilitlenmeyi tespit etmek için, köşeleri işlemler olan ve kenarlar, verilerin yayınlanmasını bekleyen işlemlerden bu verileri yakalayan işleme yönlendirilen bir grafik oluşturulur (bekleme grafiği, bekleme grafiği). Grafiğin bir döngüsü varsa, bir kilitlenmenin meydana geldiği kabul edilir. Özellikle dağıtılmış veritabanlarında bekleme grafiği oluşturmak pahalı bir prosedürdür.

İki aşamalı kilitleme - bir işlem tarafından kullanılan tüm kaynakları işlemin başında ele geçirip sonunda serbest bırakarak kilitlenmeleri önler

Tüm engelleme işlemleri ilk kilit açma işleminden önce yapılmalıdır. İki aşaması vardır: Tutunmaların biriktiği Büyüme Aşaması ve tutunmaların serbest bırakıldığı Küçülme Aşaması. Kaynaklardan birinin ele geçirilmesi mümkün değilse işlem baştan başlar. Örneğin birden fazla işlemin aynı kaynaklar için rekabet etmesi durumunda, bir işlemin gerekli kaynakları elde edememesi mümkündür.

İki aşamalı bir taahhüt, taahhüdün tüm veritabanı kopyalarında yürütülmesini sağlar

Her veritabanı, değiştirilecek verilerle ilgili bilgileri günlüğe girer ve koordinatör OK'e (Oylama Aşaması) yanıt verir. Herkes tamam yanıtını verdikten sonra koordinatör herkesi taahhütte bulunmaya zorlayan bir sinyal gönderir. Taahhüt ettikten sonra sunucular Tamam yanıtı verir; eğer en az biri Tamam yanıtı vermezse, koordinatör tüm sunuculara değişiklikleri iptal etmek için bir sinyal gönderir (Tamamlama Aşaması).

Zaman damgası yöntemi

Daha genç bir işlemin içerdiği verilere erişmeye çalışırken daha eski bir işlem geri alınıyor

Her işleme bir zaman damgası atanır TS yürütmenin başlangıç ​​zamanına karşılık gelir. Eğer Ti kıdemli TjSonra TS(Ti) < TS(Tj).

Bir işlem geri alındığında ona yeni bir zaman damgası atanır. Her veri nesnesi Q işleme dahil olan iki etiketle işaretlenmiştir. W-TS(Q) — bir kaydı başarıyla tamamlayan en genç işlemin zaman damgası Q. R-TS(Q) — üzerinde okuma kaydı gerçekleştiren en genç işlemin zaman damgası Q.

İşlem ne zaman T veri okuma istekleri Q İki seçenek var.

Eğer TS(T) < W-TS(Q), yani veriler daha genç bir işlem tarafından güncellendi, ardından işlem T geri döner.

Eğer TS(T) >= W-TS(Q)daha sonra okuma gerçekleştirilir ve R-TS(Q) olur MAX(R-TS(Q), TS(T)).

İşlem ne zaman T veri değişiklikleri talep ediyor Q İki seçenek var.

Eğer TS(T) < R-TS(Q)yani veriler daha genç bir işlem tarafından okunmuştur ve değişiklik yapılması durumunda çakışma ortaya çıkacaktır. İşlem T geri döner.

Eğer TS(T) < W-TS(Q)yani işlem daha yeni bir değerin üzerine yazmaya çalışır, T işlemi geri alınır. Diğer durumlarda değişiklik gerçekleştirilir ve W-TS(Q) eşit olur TS(T).

Pahalı bekleme grafiği yapımına gerek yoktur. Daha eski işlemler daha yenilerine bağlıdır, dolayısıyla bekleme grafiğinde döngü yoktur. İşlemler beklenmediği ve anında geri alındığı için kilitlenme yaşanmaz. Kademeli geri dönüşler mümkündür. Eğer Ti yuvarlandı ve Tj Değiştirdiğim verileri okudum TiSonra Tj aynı zamanda geri çekilmeli. Eğer aynı zamanda Tj zaten işlenmişse istikrar ilkesi ihlal edilmiş olacaktır.

Basamaklı geri alma çözümlerinden biri. Bir işlem sonunda tüm yazma işlemlerini tamamlar ve diğer işlemler bu işlemin tamamlanmasını beklemek zorundadır. İşlemler okunmadan önce gerçekleştirilmeyi bekler.

Thomas yazma kuralı - daha yeni bir işlem tarafından güncellenen verilerin daha eski bir işlem tarafından üzerine yazılmasının yasaklandığı zaman damgası yönteminin bir çeşidi

Işlem T veri değişiklikleri talep ediyor Q. Eğer TS(T) < W-TS(Q)yani işlem daha yeni bir değerin üzerine yazmaya çalışır, T işlemi zaman damgası yönteminde olduğu gibi geri alınmaz.

Kaynak: habr.com

Yorum ekle