47 lines
1.1 KiB
Markdown
47 lines
1.1 KiB
Markdown
# المعاملات و MVCC
|
|
|
|
MVCC (تحكم التزامن متعدد الإصدارات) مع عزل اللقطة واكتشاف الجمود.
|
|
|
|
## الاستخدام
|
|
|
|
```nim
|
|
import barabadb/core/mvcc
|
|
|
|
var tm = newTxnManager()
|
|
let txn = tm.beginTxn()
|
|
|
|
discard tm.write(txn, "key1", cast[seq[byte]]("value1"))
|
|
discard tm.write(txn, "key2", cast[seq[byte]]("value2"))
|
|
|
|
tm.savepoint(txn)
|
|
discard tm.write(txn, "key3", cast[seq[byte]]("value3"))
|
|
discard tm.rollbackToSavepoint(txn)
|
|
|
|
discard tm.commit(txn)
|
|
```
|
|
|
|
## عزل المعاملات
|
|
|
|
تستخدم BaraDB **عزل اللقطة**:
|
|
- القراء لا يحظرون الكتاب
|
|
- الكتاب لا يحظرون القراء
|
|
- كل معاملة ترى لقطة متسقة
|
|
|
|
## اكتشاف الجمود
|
|
|
|
```nim
|
|
import barabadb/core/deadlock
|
|
|
|
var detector = newDeadlockDetector()
|
|
if detector.detectCycle(txn1, txn2):
|
|
echo "تم اكتشاف الجمود!"
|
|
```
|
|
|
|
## التحقق الرسمي
|
|
|
|
تم تحديد بروتوكول MVCC/Snapshot Isolation رسمياً في TLA+:
|
|
|
|
```bash
|
|
cd formal-verification
|
|
java -cp tla2tools.jar tlc2.TLC -config models/mvcc.cfg mvcc.tla
|
|
``` |