Zaman damgası tabanlı eşzamanlılık denetimi - Timestamp-based concurrency control - Wikipedia

İçinde bilgisayar Bilimi, bir zaman damgası tabanlı eşzamanlılık denetimi algoritma bir kilitsiz eşzamanlılık denetimi yöntem. Bazılarında kullanılır veritabanları işlemleri güvenli bir şekilde yönetmek için zaman damgaları.

Operasyon

Varsayımlar

  • Her zaman damgası değeri benzersizdir ve zamandaki bir anı doğru şekilde temsil eder.
  • İki zaman damgası aynı olamaz.
  • Daha yüksek değerli bir zaman damgası, daha düşük değerli bir zaman damgasından daha sonra ortaya çıkar.

Zaman damgası oluşturma

Zaman damgası oluşturmak için bir dizi farklı yol kullanılmıştır

  • Bir işlemin başlangıcında sistem saatinin değerini zaman damgası olarak kullanın.
  • Bir işlemin başlangıcında zaman damgası olarak artırılan, iş parçacığı açısından güvenli bir paylaşılan sayaç kullanın.
  • Yukarıdaki iki yöntemin bir kombinasyonu.

Resmi

Her işlem () sıralı bir eylemler listesidir (). İşlem ilk eylemini gerçekleştirmeden önce (), mevcut ile işaretlenmiştir zaman damgası, veya herhangi biri kesinlikle tamamen sipariş sıra: . Her işleme ayrıca bağlı olduğu başlangıçta boş bir işlem kümesi verilir, ve başlangıçta boş olan ve güncellediği eski nesneler kümesi, .

Her biri nesne veritabanında eşzamanlılık kontrolü dışında kullanılmayan iki zaman damgası alanı verilmiştir: nesnenin değerinin bir işlem tarafından en son kullanıldığı zamandır, nesnenin değerinin bir işlem tarafından en son güncellendiği zamandır.

Hepsi için :

Her eylem için :
Eğer değerini kullanmak istiyor :
Eğer sonra iptal etmek (daha yeni bir iş parçacığı değerin üzerine yazmıştır),
Aksi takdirde, bağımlılık kümesini güncelleyin ve ayarla ;
Eğer değerini güncellemek istiyor :
Eğer sonra iptal etmek (daha yeni bir ileti dizisi zaten eski değere dayanıyor),
Eğer sonra atlama ( Thomas Yazma Kuralı ),
Aksi takdirde önceki değerleri saklayın, , Ayarlamak ve değerini güncelleyin .
İçinde bir işlem varken sona ermeyen: Bekle
İçinde bir işlem varsa o zaman iptal edildi iptal etmek
Aksi takdirde: işlemek.

İçin iptal etmek:

Her biri için içinde
Eğer eşittir sonra geri yükle ve

Gayri resmi

Bir işlem başladığında, bir zaman damgası alır. Bu zaman damgası, diğer işlemlere göre işlemin gerçekleşmesi gereken sırayı gösterir. Dolayısıyla, aynı nesneyi etkileyen iki işlem söz konusu olduğunda, işlemin daha önceki zaman damgasına sahip işleminin, işlemin daha sonraki zaman damgası ile gerçekleştirilmesinden önce yürütülmesi gerekir. Ancak, önce yanlış işlemin işlemi gerçekten sunulursa, işlem iptal edilir ve işlemin yeniden başlatılması gerekir.

Veritabanındaki her nesnenin bir zaman damgasını oku, nesnenin verileri her okunduğunda güncellenir ve bir zaman damgası yaz, nesnenin verileri her değiştiğinde güncellenir.

Bir işlem bir nesneyi okumak isterse,

  • ama işlem başladı önce nesneler zaman damgası yaz işlem başladıktan sonra nesnenin verilerini bir şeyin değiştirdiği anlamına gelir. Bu durumda işlem iptal edilir ve yeniden başlatılması gerekir.
  • ve işlem başladı sonra nesneler zaman damgası yaz, olduğu anlamına gelir kasa nesneyi okumak için. Bu durumda, işlem zaman damgası nesnenin zaman damgasını oku, okuma zaman damgası işlem zaman damgasına ayarlanır.

Bir işlem bir nesneye yazmak isterse,

  • ama işlem başladı önce nesneler zaman damgasını oku bir şeyin nesneye bir göz attığı anlamına gelir ve nesnenin verilerinin bir kopyasını aldığını varsayarız. Dolayısıyla, kopyalanan verileri geçersiz kılacağı için nesneye yazamayız, bu nedenle işlem iptal edilir ve yeniden başlatılması gerekir.
  • ve işlem başladı önce nesneler zaman damgası yaz İşlemimize başladığımızdan beri bir şeyin nesneyi değiştirdiği anlamına gelir. Bu durumda kullanıyoruz Thomas kural yazmak ve yazma işlemimizi atlayın ve normal şekilde devam edin; işlemin iptal edilmesi veya yeniden başlatılması gerekmez
  • aksi takdirde, işlem nesneye yazar ve nesnenin zaman damgası yaz işlemin zaman damgasına ayarlanır.

Kurtarılabilirlik

Temel biçimindeki zaman damgası sıralamasının kurtarılabilir geçmişler üretmediğini unutmayın. Örneğin, işlemlerle ilgili aşağıdaki geçmişi düşünün ve :

Bu bir TO planlayıcısı tarafından üretilebilir, ancak kurtarılamaz, çünkü taahhüt edilmemiş bir işlemi okumasına rağmen taahhüt eder. Bir planlayıcı, kurtarılabilir geçmişler ürettiğinden emin olmak için her işlemin sahip olduğu diğer işlemlerin bir listesini tutabilir. dan okuve bu listeden önce bir işlemin tamamlanmasına izin vermeyin, yalnızca taahhüt edilen işlemlerden oluşuyordu. Basamaklı iptallerden kaçınmak için, programlayıcı taahhüt edilmeyen işlemler tarafından yazılan verileri şu şekilde etiketleyebilir: kirlive etiketi kaldırılmadan önce böyle bir veri öğesi üzerinde bir okuma işleminin başlamasına asla izin vermeyin. Kesin bir geçmiş elde etmek için, planlayıcı kirli öğeler üzerinde herhangi bir işleme izin vermemelidir.

Uygulama sorunları

Zaman damgası çözünürlüğü

Bu, iki bitişik zaman damgası arasında geçen minimum süredir. Zaman damgasının çözünürlüğü çok büyükse (kaba), iki veya daha fazla zaman damgasının eşit olma olasılığı artar ve böylece bazı işlemlerin doğru sırada gerçekleştirilmesi sağlanır. Örneğin, saniyede yüz benzersiz zaman damgası oluşturabilen bir sistemimiz olduğunu varsayarsak ve 2 milisaniye aralıklarla gerçekleşen iki olay verildiğinde, gerçekte farklı zamanlarda gerçekleşmiş olsalar bile büyük olasılıkla aynı zaman damgası verilecektir.

Zaman damgası kilitleme

Bu teknik kilitlenmeyen bir teknik olsa da, Nesne bir işlemin süresi boyunca eşzamanlı erişimden kilitlenmemişse de, her zaman damgasını Nesneye karşı kaydetme eylemi, Nesne veya nesnede son derece kısa süreli bir kilit gerektirir. vekil.

Ayrıca bakınız