PostgreSQL ۽ ڪنيڪشن-مخصوص لکڻ جي تسلسل سيٽنگون

مضمون جو ترجمو خاص طور تي ڪورس جي شاگردن لاء تيار ڪيو ويو "ڊيٽابيس". هن هدايت ۾ ترقي ڪرڻ ۾ دلچسپي؟ اسان توهان کي دعوت ڏيون ٿا کليل ڏينهن، جتي اسان پروگرام بابت تفصيل سان ڳالهايون ٿا، آن لائين فارميٽ جون خاصيتون، صلاحيتون ۽ ڪيريئر جا امڪان جيڪي ٽريننگ کان پوءِ گريجوئيشن جو انتظار ڪندا آهن.

PostgreSQL ۽ ڪنيڪشن-مخصوص لکڻ جي تسلسل سيٽنگون

PostgreSQL ۽ ڪنيڪشن-مخصوص لکڻ جي تسلسل سيٽنگون
ڪمپوز تي، اسان ڪيترن ئي ڊيٽابيسن سان ڊيل ڪندا آهيون، جيڪي اسان کي انهن جي ڪارڪردگي ۽ نقصن کان وڌيڪ واقف ٿيڻ جو موقعو ڏين ٿا. جيئن ته اسان نئين ڊيٽابيس جي خاصيتن سان پيار ڪرڻ سکندا آهيون، اسان ڪڏهن ڪڏهن سوچڻ شروع ڪندا آهيون ته اهو ڪيترو سٺو هوندو جيڪڏهن ساڳي خاصيتون وڌيڪ بالغ اوزارن ۾ موجود هجن جيڪي اسان هڪ ڊگهي وقت تائين ڪم ڪري رهيا آهيون. ھڪڙي نئين خاصيتن مان جيڪا مون کي ڏسڻ چاھيو ٿي PostgreSQL سڄي ڪلستر ۾ في ڪنيڪشن جي ترتيب سان لکڻ جي مطابقت ھئي. ۽ جيئن اهو نڪتو، اسان وٽ اڳ ۾ ئي آهي، ۽ اڄ اسان توهان سان معلومات حصيداري ڪرڻ چاهيون ٿا ته توهان ان کي ڪيئن استعمال ڪري سگهو ٿا.

مون کي ان جي ضرورت ڇو آهي؟

ڪلستر کي ڪيئن عمل ڪرڻ گهرجي اهو توهان جي ايپليڪيشن تي منحصر آهي. وٺو، مثال طور، هڪ بل جي ادائيگي واري ايپ. توهان کي ڪلستر ۾ XNUMX٪ استحڪام جي ضرورت پوندي، تنهنڪري توهان کي هم وقت سازي ڪمن کي فعال ڪرڻو پوندو ته جيئن توهان جو ڊيٽابيس سڀني تبديلين جي ٿيڻ جو انتظار ڪري. تنهن هوندي، جيڪڏهن توهان جي ايپليڪيشن هڪ تيز وڌندڙ سماجي نيٽ ورڪ آهي، ته پوء توهان شايد XNUMX٪ تسلسل تي تيز جواب کي ترجيح ڏيندا. هن کي حاصل ڪرڻ لاء، توهان استعمال ڪري سگهو ٿا asynchronous ڪمٽ توهان جي ڪلستر ۾.

سمجھوتا ​​سان ملڻ

توهان کي ڊيٽا جي استحڪام ۽ ڪارڪردگي جي وچ ۾ واپار ڪرڻ گهرجي. PostgreSQL مستقل مزاجي کان پري ٿي وڃي ٿو ڇاڪاڻ ته ڊفالٽ تشڪيل پوءِ اڳڪٿي ڪري سگهجي ٿي ۽ بغير ڪنهن غير متوقع تعجب جي. هاڻي اچو ته سمجهوتي کي ڏسو.

واپار 1: ڪارڪردگي

جيڪڏهن PostgreSQL ڪلستر کي مستقل مزاجي جي ضرورت نه آهي، اهو غير مطابقت سان هلائي سگهي ٿو. لکڻ ڪلستر ليڊر ڏانهن ڪيو ويو آهي، ۽ تازه ڪاري موڪلي ويندي ان جي نقلن ڏانهن ڪجهه ملي سيڪنڊن بعد. جڏهن هڪ PostgreSQL ڪلستر کي استحڪام جي ضرورت آهي، اهو لازمي طور تي هلڻ گهرجي. لکت کي ڪلستر ليڊر ڏانهن ڪيو ويندو، جيڪو ريپليڪس ڏانهن هڪ تازه ڪاري موڪليندو ۽ تصديق جو انتظار ڪندو ته هر هڪ ڪلائنٽ ڏانهن تصديق موڪلڻ کان اڳ لکيو آهي جيڪو لکڻ شروع ڪيو ته اهو ڪامياب هو. انهن طريقن جي وچ ۾ عملي فرق اهو آهي ته هم وقت سازي جو طريقو ٻن نيٽ ورڪ هپس جي ضرورت آهي، جڏهن ته هم وقت سازي طريقي جي ضرورت آهي چار.

واپار 2: تسلسل

انهن ٻنهي روين ۾ ليڊر جي ناڪامي جي صورت ۾ نتيجو به مختلف هوندو. جيڪڏهن ڪم هڪجهڙائي سان ڪيو ويندو آهي، پوء جيڪڏهن اهڙي غلطي ٿئي ٿي، نه سڀئي رڪارڊ ريپليڪس پاران انجام ڏنا ويندا. ڪيترو ضايع ٿيندو؟ خود ايپليڪيشن تي منحصر آهي ۽ نقل جي ڪارڪردگي. نقل نقل ڪرڻ هڪ ريپليڪا کي ليڊر ٿيڻ کان روڪيندو جيڪڏهن ان ۾ معلومات جي مقدار ليڊر جي ڀيٽ ۾ 1 MB گهٽ آهي، يعني 1 MB تائين رڪارڊ ممڪن طور تي غير مطابقت واري آپريشن دوران گم ٿي سگهي ٿو.

اهو هم وقت سازي موڊ ۾ نٿو ٿئي. جيڪڏهن ليڊر ناڪام ٿئي ٿو، سڀئي نقلون اپڊيٽ ڪيون وينديون آهن، ڇو ته ليڊر تي تصديق ٿيل ڪنهن به لکت کي ريپليڪس تي تصديق ٿيڻ گهرجي. هي تسلسل آهي.

هم وقت سازي وارو رويو هڪ بلنگ ايپليڪيشن ۾ سمجهه ۾ اچي ٿو جتي مستقل مزاجي ۽ ڪارڪردگي جي وچ ۾ واپار ۾ هڪ واضح فائدو آهي. اهڙي ايپليڪيشن لاء سڀ کان اهم شيء صحيح ڊيٽا آهي. ھاڻي ھڪڙي سوشل نيٽ ورڪ جي باري ۾ سوچيو جنھن ۾ بنيادي ڪم آھي صارف جي ڌيان کي جلدي ممڪن طور تي درخواستن جو جواب ڏيڻ سان. انهي صورت ۾، ڪارڪردگي سان گهٽ نيٽ ورڪ هپس ۽ ڪمن لاء گهٽ انتظار هڪ ترجيح هوندي. بهرحال، ڪارڪردگي ۽ استحڪام جي وچ ۾ واپار صرف هڪ ئي ناهي جنهن بابت توهان کي سوچڻ گهرجي.

واپار 3: حادثا

اهو سمجهڻ تمام ضروري آهي ته هڪ ناڪامي دوران ڪلستر ڪيئن ڪم ڪندو آهي. ھڪڙي صورتحال تي غور ڪريو جتي ھڪڙو يا وڌيڪ نقل ناڪام ٿي وڃن. جڏهن ڪمن تي عمل ڪيو وڃي ٿو هم وقت سازي سان، ليڊر ڪم ڪرڻ جاري رکندو، اهو آهي، لکن کي قبول ڪرڻ ۽ عمل ڪرڻ، غائب ريپليڪس جي انتظار کان سواء. جڏهن ريپليڪس ڪلستر ڏانهن موٽندا آهن، اهي اڳواڻ سان پڪڙيندا آهن. هم وقت سازي جي نقل سان، جيڪڏهن نقل جواب نه ڏيندا آهن، ته ليڊر وٽ ڪو اختيار نه هوندو ۽ ڪمٽمينٽ جي تصديق جو انتظار ڪندو رهندو جيستائين ريپليڪا ڪلستر ڏانهن واپس نه اچي ۽ لکڻ کي قبول ڪري ۽ انجام ڏئي سگهي.

هڪ ڪنيڪشن في ٽرانزيڪشن؟

هر ايپليڪيشن جي ضرورت آهي مختلف قسم جي تسلسل ۽ ڪارڪردگي جي ميلاپ جي. جيستائين، يقينا، اها اسان جي بل ادا ڪرڻ واري ايپ آهي، جيڪا اسان تصور ڪريون ٿا مڪمل طور تي هڪجهڙائي، يا اسان جي تقريبن عارضي سماجي نيٽ ورڪنگ ايپ. ٻين سڀني حالتن ۾، اهڙا وقت هوندا جڏهن ڪجهه عملن کي هم وقت ساز هجڻ گهرجي ۽ ڪجهه غير هم وقتي هجڻ گهرجن. توهان شايد اهو نٿا چاهيو ته سسٽم انتظار ڪري جيستائين چيٽ ڏانهن موڪليو ويو هڪ پيغام انجام نه ڏنو وڃي، پر جيڪڏهن ساڳئي ايپليڪيشن ۾ ادائيگي تي عمل ڪيو وڃي، ته پوء توهان کي انتظار ڪرڻو پوندو.

اهي سڀ فيصلا، يقينا، ايپليڪيشن ڊولپر پاران ڪيا ويا آهن. هر طريقي کي استعمال ڪرڻ بابت صحيح فيصلا ڪرڻ توهان جي ڪلستر مان تمام گهڻو حاصل ڪرڻ ۾ مدد ڪندي. اهو ضروري آهي ته ڊولپر ڪنيڪشن ۽ ٽرانزيڪشن لاءِ SQL سطح تي انهن جي وچ ۾ مٽائي سگهي ٿو.

عملي طور تي ڪنٽرول کي يقيني بڻائي

ڊفالٽ طور، PostgreSQL استحڪام مهيا ڪري ٿو. اهو سرور پيراميٽر طرفان ڪنٽرول ڪيو ويندو آهي synchronous_commit. ڊفالٽ طور تي اهو پوزيشن ۾ آهي on، پر ان ۾ ٽي ٻيا اختيار آھن: local, remote_write يا off.

جڏهن پيٽرول کي ترتيب ڏيو off سڀئي هم وقت ساز ڪم بند ڪيا ويا آهن، ايستائين جو مڪاني نظام تي به. مقامي پيراميٽر مقامي سسٽم لاءِ هم وقت ساز موڊ بيان ڪري ٿو، پر ريپليڪس ڏانهن لکي ٿو غير هم وقتي طور تي. Remote_write اڃا به اڳتي وڌندو آهي: نقلن ڏانهن لکندو آهي غير هم وقتي طور تي، پر واپس ايندا آهن جڏهن ريپليڪا لکڻ کي قبول ڪيو آهي پر ان کي ڊسڪ تي نه لکيو آهي.

اختيارن جي دستياب رينج تي غور ڪندي، اسان هڪ رويي کي چونڊيو ۽، ذهن ۾ رکندي on - اهي هم وقت ساز رڪارڊنگ آهن، اسان چونڊينداسين local نيٽ ورڪ تي غير مطابقت واري ڪمن لاءِ، جڏهن ته مقامي ڪمنٽس کي هم وقت سازي ڇڏڻ.

هاڻي، اسان توهان کي ٻڌائينداسين ته هن کي هڪ لمحي ۾ ڪيئن سيٽ ڪيو، پر تصور ڪريو ته اسان سيٽ ڪيو synchronous_commit в local سرور لاء. اسان حيران ڪيو ته ڇا اهو ممڪن هو ته پيٽرول کي تبديل ڪرڻ synchronous_commit پرواز تي، ۽ اهو ظاهر ٿيو ته اهو صرف ممڪن ناهي، اهو ڪرڻ جا ٻه طريقا به آهن. پهرين توهان جي ڪنيڪشن جي سيشن کي هيٺ ڏنل ترتيب ڏيڻ آهي:

SET SESSION synchronous_commit TO ON;  
// Your writes go here

سيشن ۾ ايندڙ سڀ لکڻيون جڙيل ڪلائنٽ ڏانهن مثبت نتيجو موٽڻ کان اڳ نقلن ڏانهن لکندڙن کي تسليم ڪندا. جيستائين توهان سيٽنگ تبديل نه ڪندا synchronous_commit ٻيهر. توھان حصو ختم ڪري سگھو ٿا SESSION حڪم ۾ ڇاڪاڻ ته اهو ڊفالٽ قيمت ۾ هوندو.

ٻيو طريقو سٺو آهي جڏهن توهان صرف اهو پڪ ڪرڻ چاهيو ٿا ته توهان هڪ واحد ٽرانزيڪشن لاءِ هم وقت ساز نقل حاصل ڪيو. ڪيترن ئي NoSQL نسل جي ڊيٽابيس ۾ ٽرانزيڪشن جو تصور موجود ناهي، پر اهو PostgreSQL ۾ ٿئي ٿو. انهي صورت ۾ توهان هڪ ٽرانزيڪشن شروع ڪيو ۽ پوء سيٽ ڪيو synchronous_commit в on ٽرانزيڪشن جي داخلا تي عمل ڪرڻ کان اڳ. COMMIT ڪنهن به پيٽرول جي قيمت کي استعمال ڪندي ٽرانزيڪشن ڪندو synchronous_commit, جيڪو ان وقت مقرر ڪيو ويو هو، جيتوڻيڪ اهو بهتر آهي ته متغير کي اڳڀرو سيٽ ڪرڻ لاءِ پڪ ڪرڻ لاءِ ته ٻيا ڊولپر سمجهن ٿا ته لکڻيون هم وقت ساز نه آهن.

BEGIN;  
SET LOCAL synchronous_commit TO ON;  
// Your writes go here
COMMIT;  

سڀني ٽرانزيڪشن جي ڪمن کي هاڻي تصديق ڪيو ويندو جيئن ته نقلن ڏانهن لکيو ويو آهي انهي کان اڳ ڊيٽابيس واپسي سان ڳنڍيل ڪلائنٽ ڏانهن مثبت جواب.

PostgreSQL ترتيب ڏيڻ

ان کان اڳ، اسان تصور ڪيو ھڪڙو PostgreSQL سسٽم سان synchronous_commit۾ انسٽال ٿيل local. انهي کي حقيقي بڻائڻ لاءِ سرور جي پاسي، توهان کي سيٽ ڪرڻ جي ضرورت پوندي سرور جي ترتيب جا ٻه آپشن. ھڪڙو وڌيڪ پيٽرولر synchronous_standby_names پاڻ ۾ اچي ويندو جڏهن synchronous_commit ۾ ويندي ويندو on. اهو طئي ڪري ٿو ته ڪهڙيون نقلون هم وقت سازي لاءِ اهل آهن، ۽ اسان ان کي مقرر ڪنداسين *، جنهن جو مطلب اهو ٿيندو ته سڀئي نقل شامل آهن. اهي قدر عام طور تي ترتيب ڏنل آهن configuration file شامل ڪندي:

synchronous_commit = local  
synchronous_standby_names='*'

پيٽرول کي ترتيب ڏيڻ سان synchronous_commit معنيٰ ۾ local، اسان هڪ سسٽم ٺاهيندا آهيون جتي مقامي ڊسڪ هم وقت سازي ٿينديون آهن، پر نيٽ ورڪ ريپليڪا ڪميٽ ڊفالٽ طور غير هم وقت هوندا آهن. جيستائين، يقينا، اسان انهن ڪمن کي هم وقت سازي ڪرڻ جو فيصلو ڪيو، جيئن مٿي ڏيکاريل آهي.

جيڪڏهن توهان ترقي جي پيروي ڪئي آهي گورنر پروجيڪٽتوهان شايد ڪجهه تازيون تبديليون محسوس ڪيون هونديون (1, 2)، جنهن جي اجازت ڏني وئي گورنر صارفين کي انهن پيٽرولن کي جانچڻ ۽ انهن جي استحڪام جي نگراني ڪرڻ.

ڪجھ وڌيڪ لفظ...

صرف هڪ هفتو اڳ، مان توهان کي ٻڌايان ها ته PostgreSQL کي ٺيڪ ڪرڻ ناممڪن آهي. اهو تڏهن آهي جڏهن ڪرٽ، ڪمپوز پليٽ فارم ٽيم جو ميمبر، اصرار ڪيو ته اهڙو موقعو موجود آهي. هن منهنجي اعتراضن کي پرسکون ڪيو ۽ پوسٽ گري ايس ايس ايل دستاويزن ۾ مليو هيٺيون:

PostgreSQL ۽ ڪنيڪشن-مخصوص لکڻ جي تسلسل سيٽنگون

هي سيٽنگ ڪنهن به وقت تبديل ٿي سگهي ٿو. ڪنهن به ٽرانزيڪشن لاءِ رويي جو اندازو لڳايو ويندو آهي سيٽنگ جي اثر ۾ ڪمٽ جي وقت. تنهن ڪري، اهو ممڪن آهي ۽ مفيد آهي ڪجهه ٽرانزيڪشن لاءِ هم وقت سازي ڪرڻ ۽ ٻين لاءِ هم وقت سازي سان. مثال طور، هڪ کي مجبور ڪرڻ multistatement ڪميٽ ڪرڻ لاءِ ٽرانزيڪشن غير هم وقتي طور تي جڏهن پيٽرول جي ڊفالٽ قيمت سامهون هجي، سيٽ SET LOCAL synchronous_commit TO OFF هڪ ٽرانزيڪشن ۾.

ترتيب واري فائل ۾ هن ننڍڙي ترميم سان، اسان صارفين کي انهن جي استحڪام ۽ ڪارڪردگي تي ڪنٽرول ڏنو.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو