DBMS-də əməliyyat təcridetmə tətbiqetmələri

Bir əməliyyatın Serializasiyalı olub olmadığını müəyyən etmək üçün əməliyyatların hərtərəfli təhlilinə ehtiyacımız var. Hər hansı bir serial cədvəli əməliyyatının ziddiyyətli olduğunu və ya Serializable olaraq görünə biləcəyini söyləyə bilmərik. Onların serializasiyasını və dolayısı ilə təcridini təyin etmək üçün üstünlük qrafikindən istifadə edirik. Bu, bir əməliyyatdan digərinə yönəldilmiş bir qrafikdir. Hər hansı iki əməliyyat arasında yönəldilmiş bir düyün, aralarında hər hansı bir ziddiyyət varsa çıxarılır.

Eyni vəziyyəti və üstünlük qrafikini aşağıda nəzərdən keçirin. Hər bir əməliyyat üçün qovşaqlar çəkin. T1 məlumatı T2 yazdıqdan sonra x oxuyursa və ya T1 oxuduqdan sonra T2 x yazırsa T2-dən T1-yə (T2 T1) yönəlmiş bir xətt çəkin.

Aşağıdakı cədvəldə göstərildiyi kimi T1 və T2 əməliyyatlarının birləşməsi halında bir cədvəldə T1 və T2 arasındakı bir xətt çəkilir.

Bir cədvəlin yalnız üstünlük qrafiki çevik olduğu təqdirdə ardıcıllaşdırıla biləcəyi deyilir. Qrafik bir dövr təşkil edirsə, o zaman ziddiyyətli ola bilməz.

Aşağıda əməliyyat dəstini və onun üstünlük qrafikini nəzərdən keçirin. Burada bir dövr təşkil edir və bu səbəbdən də konfliktləşdirilə bilməz.

Hər hansı bir cədvəlin Serializasiyalı olması üçün üstünlük qrafiki T1 → T2 → T4 → T5 → T3 kimi olmalıdır (əməliyyat sırası hər hansı bir ola bilər, lakin dövrü təşkil etməməlidir). Bu o deməkdir ki, əməliyyatlar ziddiyyətli əməliyyatlar olsa da seriallaşdırıla bilər və təcrid oluna bilər.

İndi bir cədvəlin Serializasiya oluna bilən olub olmadığını necə müəyyən edəcəyimizi görək. Bunu yuxarıdakı qrafiklə müəyyənləşdirə bilmərik, ancaq bir az təhlilə ehtiyac var. Üç əməliyyatımızın olduğunu düşünək - T1, T2 və T3. İndi bu üç əməliyyatın bütün birləşməsini yazın.

T1, T2, T3
T1, T3, T2
T2, T1, T3
T2, T3, T1
T3, T1, T2
T3, T2, T1

Yuxarıda göstərilən serializasiya qabiliyyətinə görə, bir əməliyyat məlumatları bir cədvəldə oxuyursa, digər cədvəldəki məlumatları da oxumalıdır. Tutaq ki, T1 məlumatları oxuyur. Sonra T1, hər iki cədvəldə məlumatları oxuyan ilk əməliyyat olmalıdır. Buna görə əvvəlcə məlumatı oxuyan, əvvəlcə T1 olan əməliyyatları qoruyun. Əməliyyatların son birləşməsinin altında T2-nin T1-in oxuduğu və T3-ün bəzi digər məlumatları yazdığı şey saxlanılır.

T1, T2, T3
T1, T3, T2
T3, T1, T2

İkinci baxış seriyalaşdırma şərtinə görə, bir əməliyyat bir cədvəldə başqa bir əməliyyat tərəfindən yazılmış məlumatları oxuyursa, başqa bir cədvəldə eyni bir əməliyyatla yazılmış məlumatları oxuyan bir əməliyyat da olmalıdır. Ancaq yuxarıdakı vəziyyətdə T1 ilk məlumatları oxuyur və ilk əməliyyat olmalıdır. T2, T1 tərəfindən oxunan məlumatları yazır. T3 bəzi digər məlumatları oxuyur. Bu səbəbdən T2 tərəfindən yazılmış bir məlumatı oxuyan bir əməliyyat yoxdur. Buna görə Serializable görünə bilməz.

Tutaq ki, ikinci şərti də keçdik. İndi üçüncü şərt, əməliyyatlardan biri son məlumatları bir cədvəldə yazarsa, eyni əməliyyat məlumatları əməliyyatların birləşməsində yazmalıdır. Yuxarıdakı kombinasiyada T2 son məlumatları yazır. Ancaq T3 bəzi digər məlumatları oxuyur. Beləliklə, sonunda T2 və başlanğıcda T2 olan ən azı 1 əməliyyatın birləşməsinə sahib deyilik. Buna görə seriallaşdırıla bilən görünə bilməz.

Aşağıda başqa bir nümunəni nəzərdən keçirək

Bu, W3 (Z), R2 (X), W2 (Y), R1 (Z), W3 (Y), W1 (Y) şəklində yenidən yazıla bilər.

  • Birinci qaydaya görə, əməliyyatın oxunması üçün başlanğıc məlumatları əvvəlində saxlanmalıdır. Burada T1 və T2 məlumatları oxuyur. Lakin T2 ilkin məlumatları oxuyur - çünki T2-nin oxunuşundan əvvəl heç bir yazı yoxdur. T1-də oxunan T3 tərəfindən yazıldıqdan sonra olur. Buna görə T1-in oxuması ilk oxunuş kimi qəbul edilə bilməz. Beləliklə, T2-nin başlanğıcında və ya ən azı digər əməliyyatların oxunmasından əvvəl və ya son əməliyyatdan əvvəl yerləşdirilməlidir.
  • İkinci qaydaya görə əməliyyat başqa bir əməliyyatın yazdığı məlumatları oxumalıdır. Yuxarıda T3-ün X yazdığını və T1 tərəfindən oxunduğunu görürük. Beləliklə T1 T3-dən sonra yerləşdirilməlidir, yəni; T3 → T1.
  • Üçüncü qaydaya görə, yekun nəticələri yazan əməliyyatlar sonunda yerləşdirilməlidir. Burada bütün əməliyyatlar nəticəni yazır. Əgər müşahidə etsək, son nəticə Y və ya Z-nin nəticəsidir. Z yazdıqdan sonra T1 tərəfindən oxunur. Buna görə də son deyil. Y üç əməliyyatla yazılır: T1, T2 və ya T3. İlk addımda müzakirə etdiyimiz kimi, T2 başlanğıc məlumatlarını oxuyur və bu səbəbdən sonunda yerləşdirilə bilməz. Başlanğıcda yerləşdiriləcək. T3 X məlumatlarını yazır və T1 ilə qırmızıdır. Buna görə T1-dən əvvəl qoyulmalıdır. İndi yalnız son əməliyyat Y yazan T1 qalır və sonunda saxlanıla bilər - T2 və ya T3-dən sonra ola bilər

Beləliklə, bu üç əməliyyatı planlaşdırmağın mümkün yolu aşağıdakı kimidir

T2, T3, T1
T3, T2, T1 - burada əvvəlcə T3 yerləşdirilə bilər, çünki heç bir X istifadə etmir.

İndi bu iki cədvəl seriallaşdırıla bilər. Bu əməliyyatlar hər iki şəkildə planlaşdırılır və bir-birindən asılı olmayaraq həyata keçiriləcəkdir. Ardıcıl nəticələr verəcəkdir. Beləliklə əməliyyatların təcrid olunmasına nail olunur.

Şərh yaz

Translate »