UPDATE products
SET name = 'Telegraph receiver', version = 2
WHERE id = 1 AND version = 1
په دې حالت کې، د میز تازه کول products دا به ترسره نشي که چیرې یو بل عملیات مخکې په دې قطار کې بدلون راولي. که په دې قطار کې نور عملیات نه وي ترسره شوي، د یو قطار لپاره به بدلون راشي او موږ کولی شو ووایو چې اوسمهال بریالی و.
د خندا لوستلو او د معلوماتو له لاسه ورکولو سربیره نورې ګډوډي شتون لري
کله چې دا د ډیټا ثبات ته راځي ، تمرکز د ریس شرایطو احتمال باندې دی چې کولی شي د خراب لوستلو او ډیټا ضایع کیدو لامل شي. په هرصورت، د معلوماتو ګډوډي هلته نه دریږي.
د دې ډول اختلالاتو یوه بیلګه د ثبت تحریف دی (سکیو لیکل). تحریفونه کشف کول ستونزمن دي ځکه چې دوی معمولا په فعاله توګه نه لیدل کیږي. دا د ناپاکو لوستلو یا د معلوماتو له لاسه ورکولو له امله ندي ، مګر په ډیټا کې ایښودل شوي منطقي محدودیتونو څخه سرغړونه ده.
BEGIN tx1; BEGIN tx2;
SELECT COUNT(*)
FROM operators
WHERE oncall = true;
0 SELECT COUNT(*)
FROM operators
WHERE oncall = TRUE;
0
UPDATE operators UPDATE operators
SET oncall = TRUE SET oncall = TRUE
WHERE userId = 4; WHERE userId = 2;
COMMIT tx1; COMMIT tx2;
په پورتني حالت کې، یو ریکارډ فساد به واقع شي که چیرې دواړه لیږدونه په بریالیتوب سره ترسره شي. که څه هم هیڅ ناپاک لوستل یا د ډیټا ضایع نه و ، د معلوماتو بشپړتیا سره موافقت شوی و: اوس دوه کسان په ورته وخت کې په تلیفون کې ګڼل کیږي.
د ډیټابیس یو له مهمو ځانګړتیاو څخه د اجرا کولو امر تضمین دی، مګر دا حکم پخپله د سافټویر جوړونکي ته شفاف نه وي. ډیټابیسونه په هغه ترتیب کې لیږدونه ترسره کوي چې دوی ترلاسه کوي، نه په ترتیب کې چې پروګرام کونکي یې اراده لري. د راکړې ورکړې ترتیب اټکل کول ګران دي، په ځانګړې توګه په ډیر بار شوي موازي سیسټمونو کې.
د پراختیا په جریان کې، په ځانګړې توګه کله چې د غیر بندولو کتابتونونو سره کار کول، ضعیف سټایل او د لوستلو ټیټ وړتیا کولی شي کاروونکي باور وکړي چې لیږدونه په ترتیب سره ترسره کیږي، کله چې په حقیقت کې دوی په هر ترتیب کې ډیټابیس ته رسیدلی شي.
په لومړي نظر کې، په لاندې برنامه کې، T1 او T2 په ترتیب سره ویل کیږي، مګر که دا افعال غیر بلاک وي او سمدلاسه پایله په فورمه کې بیرته راولي. ژمنې، بیا د تلیفونونو ترتیب به د هغه شیبو لخوا ټاکل کیږي کله چې دوی ډیټابیس ته ننوتل:
نتیجه 1 = T1 () // ریښتینې پایلې ژمنې دي
پایله 2 = T2 ()
که اټوميیت ته اړتیا وي (یعنې یا ټول عملیات باید بشپړ شي یا لغوه شي) او د ترتیب مسله وي، نو د T1 او T2 عملیات باید په یوه معامله کې ترسره شي.
د NTP سرورونه د همغږي کولو لپاره کارول کیږي، مګر د همغږي کولو پروسه پخپله د شبکې ځنډ سره مخ ده. حتی په ورته ډیټا مرکز کې د NTP سرور سره همغږي کول یو څه وخت نیسي. دا روښانه ده چې د عامه NTP سرور سره کار کول حتی د لوی تحریف لامل کیدی شي.
اټومي ساعتونه او د دوی د GPS همکاران د اوسني وخت ټاکلو لپاره غوره دي، مګر دوی ګران دي او پیچلي ترتیب ته اړتیا لري، نو دوی نشي کولی په هر موټر کې نصب شي. د دې له امله، د معلوماتو مرکزونه یو اړخیزه طریقه کاروي. اټومي او/یا GPS ساعتونه دقیق وخت ښیي، وروسته له هغه چې دا د ثانوي سرورونو له لارې نورو ماشینونو ته خپریږي. دا پدې مانا ده چې هر ماشین به د دقیق وخت څخه یو مشخص آفسیټ تجربه کړي.
وضعیت د دې حقیقت له امله خراب شوی چې غوښتنلیکونه او ډیټابیسونه اکثرا په مختلف ماشینونو کې موقعیت لري (که نه په مختلف ډیټا مرکزونو کې). پدې توګه ، وخت به نه یوازې د DB نوډونو کې توپیر ولري چې په مختلف ماشینونو کې توزیع شوي. دا به د غوښتنلیک سرور کې هم توپیر ولري.
Google TrueTime یو بشپړ مختلف طریقه اخلي. ډیری خلک پدې باور دي چې پدې لار کې د ګوګل پرمختګ د اټومي او GPS ساعتونو ته د بندیز لیږد لخوا تشریح شوی، مګر دا یوازې د لوی انځور برخه ده. دلته د TrueTime څنګه کار کوي:
TrueTime دوه مختلف سرچینې کاروي: GPS او اټومي ساعتونه. دا ساعتونه غیر مربوط ناکامي طریقې لري. [د جزیاتو لپاره 5 پاڼه وګورئ دلته - نږدې ژباړه.)نو د دوی ګډ استعمال اعتبار زیاتوي.
TrueTime یو غیر معمولي API لري. دا د اندازه کولو تېروتنې او ناڅرګندتیا سره د وقفې په توګه وخت بیرته راګرځوي. په وخت کې ریښتینې شیبه د وقفې د پورتنۍ او ښکته سرحدونو تر مینځ موقعیت لري. سپنر، د ګوګل ویشل شوی ډیټابیس، په ساده ډول انتظار کوي تر هغه چې دا خوندي وي چې ووایی چې اوسنی وخت د حد څخه بهر دی. دا میتود په سیسټم کې یو څه ځنډ معرفي کوي ، په ځانګړي توګه که چیرې د ماسټرانو په اړه ناڅرګندتیا لوړه وي ، مګر حتی په نړیواله کچه توزیع شوي وضعیت کې درستیت تضمینوي.
د اوسني وخت په ټاکلو کې دقت کمول د سپنر عملیاتو په موده کې زیاتوالی او په فعالیت کې کمښت معنی لري. له همدې امله دا مهمه ده چې ترټولو ممکنه دقت وساتل شي حتی که څه هم په بشپړ ډول دقیق ساعت ترلاسه کول ناممکن دي.
ځنډ ډیری معنی لري
که تاسو د لسګونو متخصصینو څخه وپوښتئ چې ځنډ څه شی دی، تاسو به شاید مختلف ځوابونه ترلاسه کړئ. په DBMS کې ځنډ اکثرا د "ډیټابیس ځنډ" په نوم یادیږي او د هغه څه څخه توپیر لري چې د پیرودونکي لخوا پیژندل کیږي. حقیقت دا دی چې پیرودونکي د شبکې ځنډ او د ډیټابیس ځنډ مجموعه ګوري. د ځنډ د ډول جلا کولو وړتیا خورا مهم دی کله چې د مخ پر ودې ستونزو ډیبګ کول. کله چې میټریکونه راټول او ښکاره کړئ، تل هڅه وکړئ چې دواړه ډولونه په پام کې ونیسئ.
د فعالیت اړتیاوې باید د یوې ځانګړې راکړې ورکړې لپاره و ارزول شي
ځینې وختونه د DBMS فعالیت ځانګړتیاوې او د هغې محدودیتونه د لیکلو / لوستلو له لارې او ځنډ سره مشخص شوي. دا د کلیدي سیسټم پیرامیټرو عمومي عمومي کتنه وړاندې کوي، مګر کله چې د نوي DBMS فعالیت ارزونه کوي، یو ډیر جامع طریقه دا ده چې په جلا توګه مهم عملیات (د هرې پوښتنې او/یا لیږد لپاره) ارزونه وکړي. بېلګې:
د کارونکي له تاریخ څخه د غوره 100 ننوتونو په ترلاسه کولو کې ځنډ کله چې کارونکي په هر ساعت کې د X ننوتلو سره 500 نور کاروونکي تعقیبوي.
ارزونه او تجربه ممکن دا ډول مهمې قضیې شاملې کړي تر هغه چې تاسو ډاډه نه یاست چې ډیټابیس د فعالیت اړتیاوې پوره کوي. د ګوتو ورته قاعده دا ماتول هم په پام کې نیسي کله چې د ځنډ میټریک راټولوي او د SLO ټاکي.
function newAccount(id string) {
Accounts.create(id)
}
// In main application:
with newTransaction():
// Read some data from database for configuration.
// Generate an ID from the ID service.
Accounts.create(id)
Uploads.create(id) // create upload queue for the user.
لیږدونه باید د غوښتنلیک حالت پورې تړلي نه وي
ځینې وختونه دا د ځینې ارزښتونو بدلولو یا د پوښتنو پیرامیټونو ټیکولو لپاره په معاملو کې د غوښتنلیک حالت کارولو لپاره لیوالتیا ده. د پام وړ مهم ټکی د غوښتنلیک سمه ساحه ده. پیرودونکي ډیری وختونه لیږدونه بیا پیل کوي کله چې د شبکې ستونزې شتون ولري. که چیرې راکړه ورکړه بیا په یو حالت پورې اړه ولري چې د کوم بل پروسې لخوا بدلیږي ، نو دا ممکن د معلوماتو ریس احتمال پورې اړوند غلط ارزښت غوره کړي. لیږدونه باید په غوښتنلیک کې د ډیټا ریس شرایطو خطر په پام کې ونیسي.
var seq int64
with newTransaction():
newSeq := atomic.Increment(&seq)
Entries.query(newSeq)
// Other operations...
پورتنۍ معامله به هرکله چې اجرا کیږي د ترتیب شمیره ډیروي، پرته له دې چې وروستۍ پایلې ته پام وکړي. که ژمنه د شبکې ستونزو له امله ناکامه شي ، نو غوښتنه به د مختلف ترتیب شمیرې سره اجرا شي کله چې تاسو بیا هڅه وکړئ.
د پوښتنې پلانر لخوا وړاندې شوي ځینې میترونه ممکن د شور تابع وي (په ځانګړي توګه کله چې د ځنډ یا CPU وخت اټکل کول). د مهالویش کونکو لپاره ښه اضافه د اجرا کولو لارې تعقیب او تعقیب لپاره وسیلې دي. دوی تاسو ته اجازه درکوي چې دا ډول ستونزې تشخیص کړئ (افسوس، ټول DBMSs داسې وسایل نه وړاندې کوي).
آنلاین مهاجرت ستونزمن دی مګر ممکن دی
آنلاین مهاجرت، ژوندی مهاجرت، یا ریښتیني وخت مهاجرت پدې معنی دی چې له یو ډیټابیس څخه بل ډیټابیس ته پرته له ځنډ یا ډیټا فساد څخه حرکت کول. ژوندی مهاجرت د ترسره کولو لپاره اسانه دی که چیرې لیږد په ورته DBMS/انجن کې واقع شي. وضعیت نور هم پیچلی کیږي کله چې د مختلف فعالیت او سکیما اړتیاو سره نوي DBMS ته لیږدول اړین وي.