-
Notifications
You must be signed in to change notification settings - Fork 0
TR Concept Strict 2PL Locking
Turkce Dokumantasyon | English Documentation
Kategori: Mimari Kavramlar ve Prensipler
Alt Sistem: Eszamanlilik ve Islemler (AmberDB::Transact)
Madde Turu: Mimari Kavram
Strict Two-Phase Locking (Strict 2PL / Kati Iki Fazli Kilitleme), AmberDB'nin islem motorunda (AmberDB::Transact) ve kilit yoneticisinde (flock_open) uygulanan eszamanlilik kontrol protokoludur. Strict 2PL kuralina gore:
-
Buyume Fazi (Growing Phase): Bir islem calisirken ihtiyac duydugu tablolari veya kayit anahtarlarini paylasimli (
LOCK_SH) ya da ozel (LOCK_EX) olarak kilitler; ancak islem surerken hicbir kilidi serbest birakamaz. -
Kuculme Fazi (Shrinking Phase): Edinilen tum kilitler islem kesinlesene (
transact_end/transact_commit) veya geri alinana (transact_rollback) kadar elde tutulur ve islem tamamlandiginda tum kilitler atomik olarak ayni anda serbest birakilir.
Bu protokol, cok surecli (multi-process) calisma ortaminda Serilestirilebilirlik (ACID Isolation) garantisi saglar; kirli okuma (dirty read), kayip guncelleme (lost update) ve zincirleme geri alma (cascading rollback) problemlerini tamamen engeller.
AmberDB Strict 2PL Yasam Dongusu
Buyume Fazi (Kilitler Dinamik Olarak Toplanir)
- Tablo kilidi: catalog_product (LOCK_EX)
- Kayit kilidi: order_cart_1089 (LOCK_EX)
- Tablo kilidi: inventory_stock (LOCK_EX)
[Islem Calisir ]
Kuculme Fazi (Islem Sonunda Tum Kilitler Tek Seferde Cozulur)
Commit veya Rollback ==> TUM kilitler ayni anda birakilir
AmberDB iki seviyede isletim sistemi seviyesinde flock kilitlemesi sunar:
Tum tablo dosyasini kilitler (dbstore/tables/${tablo}.lock). Toplu iceri aktarma (insert_list), sema degisiklikleri ve reindex (set_index) islemlerinde kullanilir.
- Paylasimli okuma kilidi:
$adb->flock_open("catalog_product", "read"); - Ozel yazma kilidi:
$adb->flock_open("catalog_product", "write");
Yalnizca belirtilen tekil bir kayit ID'si icin kilit mutex'i olusturur (dbstore/tables/${tablo}_${kayit_id}.lock).
- Ozel kayit kilidi:
$adb->flock_open("orders", "write", 5001); - Kilidi birakma:
$adb->flock_close("orders", 5001);
# Strict 2PL altinda stok dusumu ve siparis kaydi
$adb->transact_start();
eval {
# 1. Urunu ve stogu oku
my @urun = $adb->read_id("catalog_product", 101);
my $stok = $urun[4];
die "Yetersiz stok\n" if $stok < 2;
# 2. Stogu dus ve kaydet
$urun[4] = $stok - 2;
$adb->modify_id("catalog_product", @urun);
# 3. Siparis kaydi olustur
$adb->insert_id("orders", 0, 101, 2, "ODENDI", time());
# 4. Islemi basariyla bitir ve tum kilitleri serbest birak
$adb->transact_end();
};
if ($@) {
# Hata olusursa otomatik LIFO geri alma yapar ve kilitleri serbest birakir
$adb->transact_rollback();
warn "Islem basarisiz: $@\n";
}AmberDB — High-Performance Schema-Driven NoSQL Database Engine for Perl.
Copyright 2005-2026 Maruf Cetin. Released under the Artistic License 2.0.
CPAN · GitHub Repository · Issue Tracker
- Berkeley DB (DB_File) Engine
- AmberDB Table Schema
- Global Flags
- Table Schema Flags
- Directory Structure
- File Structure (Extensions)
- Repeat Blocks
- Auto-Increment ID
- ASCII ID
- Relational Records
- Record Anatomy
- JOIN-Free Architecture
- Packed Binary Index
- Strict 2PL Locking
- Undo Journal & Rollback
- Tiered Junk Indexing
- Disjunctive Faceting
- Phonetic Accent Search
- 2-Pillar Disaster Recovery
- RAM-Disk Acceleration
- In-Memory Schema Mutation
- Simple Mode
- new
- config
- set_datadir
- insert_id
- insert_list
- modify_id
- modify_list
- delete_id
- delete_list
- read_id
- read_all
- read_list
- exist_id
- exist_list
- exist_table
- table_count
- table_keys
- table_lastid
- table_attr
- table_create
- field_fetch
- field_filter
- search_table
- facet_menu
- field_fltkeys
- field_allfltkeys
- facet_rules
- slug_read
- slug_fetch
- transact_start
- transact_end
- transact_commit
- transact_rollback
- transact_recover
- flock_open
- flock_close
- cache_setup
- cache_read
- cache_write
- cache_delete
- cache_preload
- cache_ensure
- buffer_write
- buffer_read
- buffer_delete
- recs_scan
- recs_get
- recs_put
- recs_del
- locale_uc
- locale_lc
- locale_sort
- locale_to_ascii
- locale_num2text
- locale_format_currency
- locale_format_date
- array_sort
- array_punch
- array_filter
- array_sublist
- deep_copy
- log_owner
- use_counter
- use_junk
- keep_deleted
- auto_id
- buffer_write
- simple
- no_write
- no_backup
- jnktype
- keys_only
- id_type
- language
- .db · .table · .dbase
- .inx · .fld · .src
- .fac · .srt · .slg
- .unq · .del · .aut
- .cnt · .txn · .amberdb
- .csv · .cache · .tmp