5.1 एकाचवेळीचा मुद्दा
चला थोड्या दूरच्या सिद्धांतासह प्रारंभ करूया.
प्रोग्रामर तयार करणारी कोणतीही माहिती प्रणाली (किंवा फक्त, अनुप्रयोग) मध्ये अनेक विशिष्ट ब्लॉक्स असतात, ज्यापैकी प्रत्येक आवश्यक कार्यक्षमतेचा एक भाग प्रदान करतो. उदाहरणार्थ, क्लायंटद्वारे डेटाचे जलद वाचन सुनिश्चित करण्यासाठी संसाधन-केंद्रित ऑपरेशनचे परिणाम लक्षात ठेवण्यासाठी कॅशेचा वापर केला जातो, प्रवाह प्रक्रिया साधने आपल्याला एसिंक्रोनस प्रक्रियेसाठी इतर घटकांना संदेश पाठविण्याची परवानगी देतात आणि बॅच प्रक्रिया साधने " रेक" डेटाचे संचित खंड काही कालांतराने. .
आणि जवळजवळ प्रत्येक ऍप्लिकेशनमध्ये, डेटाबेस (DBs) एक किंवा दुसर्या प्रकारे गुंतलेले असतात, जे सहसा दोन कार्ये करतात: जेव्हा तुमच्याकडून डेटा प्राप्त होतो तेव्हा संग्रहित करा आणि नंतर विनंती केल्यावर ते तुम्हाला प्रदान करा. क्वचितच कोणीही स्वतःचा डेटाबेस तयार करण्याचा विचार करत नाही, कारण आधीच बरेच तयार उपाय आहेत. पण तुम्ही तुमच्या अर्जासाठी योग्य कसा निवडाल?
तर, कल्पना करूया की तुम्ही मोबाईल इंटरफेससह एक ऍप्लिकेशन लिहिले आहे जे तुम्हाला घराभोवती पूर्वी जतन केलेल्या कामांची यादी लोड करण्यास अनुमती देते - म्हणजेच डेटाबेसमधून वाचणे आणि नवीन कार्यांसह त्यास पूरक करणे, तसेच प्रत्येक विशिष्टतेला प्राधान्य देणे. कार्य - 1 (सर्वोच्च) ते 3 (सर्वात कमी). समजा तुमचा मोबाईल अॅप्लिकेशन एका वेळी एकच व्यक्ती वापरते. पण आता तुम्ही तुमच्या आईला तुमच्या निर्मितीबद्दल सांगण्याचे धाडस केले आणि आता ती दुसरी नियमित वापरकर्ता बनली आहे. जर तुम्ही एकाच वेळी, त्याच मिलिसेकंदात, काही टास्क - "खिडक्या धुवा" - वेगळ्या प्रमाणात प्राधान्याने सेट करायचे ठरवले तर काय होईल?
व्यावसायिक भाषेत, तुमच्या आणि आईच्या डेटाबेस क्वेरीस 2 प्रक्रिया मानल्या जाऊ शकतात ज्याने डेटाबेसमध्ये क्वेरी केली. प्रक्रिया ही संगणक प्रोग्राममधील एक संस्था आहे जी एक किंवा अधिक थ्रेडवर चालते. सामान्यतः, प्रक्रियेमध्ये मशीन कोड प्रतिमा, मेमरी, संदर्भ आणि इतर संसाधने असतात. दुसऱ्या शब्दांत, प्रक्रिया प्रोसेसरवरील प्रोग्राम सूचनांची अंमलबजावणी म्हणून दर्शविली जाऊ शकते. जेव्हा तुमचा अनुप्रयोग डेटाबेसला विनंती करतो, तेव्हा आम्ही या वस्तुस्थितीबद्दल बोलत आहोत की तुमचा डेटाबेस एका प्रक्रियेतून नेटवर्कवर प्राप्त झालेल्या विनंतीवर प्रक्रिया करतो. अॅप्लिकेशनमध्ये एकाच वेळी दोन वापरकर्ते बसलेले असल्यास, वेळेत कोणत्याही विशिष्ट क्षणी दोन प्रक्रिया होऊ शकतात.
जेव्हा काही प्रक्रिया डेटाबेसला विनंती करते तेव्हा ती एका विशिष्ट स्थितीत आढळते. स्टेटफुल सिस्टीम ही एक प्रणाली आहे जी मागील घटना लक्षात ठेवते आणि काही माहिती संग्रहित करते, ज्याला "स्टेट" म्हणतात. घोषित केलेल्या व्हेरिएबलची integer
स्थिती 0, 1, 2 किंवा 42 असू शकते. म्युटेक्स (म्युच्युअल एक्सक्लूजन) मध्ये दोन अवस्था असतात: लॉक केलेले किंवा अनलॉक केलेले , जसे बायनरी सेमाफोर ("आवश्यक" विरुद्ध "रिलीझ केलेले") आणि सामान्यतः बायनरी (बायनरी) डेटा प्रकार आणि चल ज्यात फक्त दोन अवस्था असू शकतात - 1 किंवा 0.
राज्याच्या संकल्पनेवर आधारित, अनेक गणिती आणि अभियांत्रिकी संरचना आधारित आहेत, जसे की मर्यादित ऑटोमॅटन - एक मॉडेल ज्यामध्ये एक इनपुट आणि एक आउटपुट आहे आणि ते प्रत्येक क्षणी राज्यांच्या मर्यादित संचामध्ये असते - आणि "राज्य ” डिझाइन पॅटर्न, ज्यामध्ये ऑब्जेक्ट अंतर्गत स्थितीवर अवलंबून वर्तन बदलते (उदाहरणार्थ, एक किंवा दुसर्या व्हेरिएबलला कोणते मूल्य नियुक्त केले आहे यावर अवलंबून).
त्यामुळे, मशीन जगतातील बहुतांश वस्तूंची काही स्थिती असते जी कालांतराने बदलू शकते: आमची पाइपलाइन, जी एका मोठ्या डेटा पॅकेटवर प्रक्रिया करते, एरर टाकते आणि अयशस्वी होते, किंवा वॉलेट ऑब्जेक्ट प्रॉपर्टी, जी वापरकर्त्याच्या शिल्लक रकमेमध्ये साठवते. खाते, वेतन पावती नंतर बदल.
संक्रमण ("संक्रमण") एका अवस्थेतून दुसर्या स्थितीत-म्हणजे प्रगतीपथावरून अयशस्वी होण्यापर्यंत -याला ऑपरेशन म्हणतात. कदाचित, प्रत्येकाला CRUD ऑपरेशन्स माहित असतील - create
, read
, update
, delete
किंवा तत्सम HTTP पद्धती - POST
, GET
, PUT
, DELETE
. परंतु प्रोग्रामर सहसा त्यांच्या कोडमधील ऑपरेशन्सना इतर नावे देतात, कारण ऑपरेशन केवळ डेटाबेसमधून विशिष्ट मूल्य वाचण्यापेक्षा अधिक जटिल असू शकते - ते डेटा देखील तपासू शकते आणि नंतर आमचे ऑपरेशन, ज्याने फंक्शनचे स्वरूप घेतले आहे, कॉल केले जाईल, उदाहरणार्थ, आणि validate()
ही ऑपरेशन्स-फंक्शन्स कोण करते? आधीच वर्णन केलेल्या प्रक्रिया.
थोडे अधिक, आणि तुम्हाला समजेल की मी अशा तपशीलवार अटींचे वर्णन का करतो!
कोणतेही ऑपरेशन - ते फंक्शन असो, किंवा, वितरित सिस्टममध्ये, दुसर्या सर्व्हरला विनंती पाठवणे - मध्ये 2 गुणधर्म आहेत: आवाहन वेळ आणि पूर्ण होण्याची वेळ (पूर्ण होण्याची वेळ) , जी आवाहन वेळेपेक्षा काटेकोरपणे जास्त असेल (जेप्सेनचे संशोधक या दोन्ही टाइमस्टॅम्प्सना काल्पनिक, पूर्णपणे समक्रमित, जागतिक स्तरावर उपलब्ध घड्याळे दिली जातील या सैद्धांतिक गृहितकांवरून पुढे जा).
आमच्या टू-डू लिस्ट ऍप्लिकेशनची कल्पना करूया. तुम्ही मधील मोबाईल इंटरफेसद्वारे डेटाबेसला विनंती करता 14:00:00.014
आणि तुमच्या आईने 13:59:59.678
(म्हणजे 336 मिलीसेकंद आधी) त्याच इंटरफेसद्वारे टू-डू लिस्ट अपडेट केली, त्यात भांडी धुण्याचे पदार्थ जोडले. तुमच्या डेटाबेससाठी नेटवर्क विलंब आणि टास्कची संभाव्य रांग लक्षात घेऊन, तुम्ही आणि तुमच्या आई व्यतिरिक्त, तुमच्या आईचे सर्व मित्र देखील तुमचा अॅप्लिकेशन वापरत असल्यास, डेटाबेस तुमच्यावर प्रक्रिया केल्यानंतर आईच्या विनंतीची अंमलबजावणी करू शकतो. दुसऱ्या शब्दांत, तुमच्या दोन विनंत्या, तसेच तुमच्या आईच्या मैत्रिणींकडून आलेल्या विनंत्या, एकाच वेळी (एकाच वेळी) एकाच डेटावर पाठवल्या जाण्याची शक्यता आहे.
म्हणून आम्ही डेटाबेस आणि वितरित अनुप्रयोगांच्या क्षेत्रातील सर्वात महत्वाच्या पदावर आलो आहोत - समवर्ती. एकाच वेळी दोन ऑपरेशन्सचा नेमका अर्थ काय असू शकतो? काही ऑपरेशन T1 आणि काही ऑपरेशन T2 दिल्यास, नंतर:
- T1 अंमलबजावणी T2 च्या प्रारंभ वेळेपूर्वी सुरू केले जाऊ शकते आणि T2 च्या प्रारंभ आणि समाप्तीच्या वेळेच्या दरम्यान पूर्ण केले जाऊ शकते
- T2 T1 च्या प्रारंभ वेळेपूर्वी सुरू केले जाऊ शकते आणि T1 च्या प्रारंभ आणि समाप्ती दरम्यान समाप्त केले जाऊ शकते
- T1 कार्यान्वित होण्याच्या प्रारंभ आणि समाप्तीच्या कालावधी दरम्यान T1 सुरू आणि समाप्त केले जाऊ शकते
- आणि इतर कोणतीही परिस्थिती जिथे T1 आणि T2 मध्ये काही सामान्य अंमलबजावणी वेळ आहे
हे स्पष्ट आहे की या व्याख्यानाच्या चौकटीत, आम्ही प्रामुख्याने डेटाबेसमध्ये प्रवेश करणार्या प्रश्नांबद्दल बोलत आहोत आणि डेटाबेस व्यवस्थापन प्रणाली या क्वेरी कशा समजते, परंतु कॉन्करन्सी हा शब्द महत्त्वाचा आहे, उदाहरणार्थ, ऑपरेटिंग सिस्टमच्या संदर्भात. मी या लेखाच्या विषयापासून फार दूर जाणार नाही, परंतु मला असे वाटते की आम्ही येथे ज्या समरूपतेबद्दल बोलत आहोत ते समवर्ती आणि समवर्ती आणि त्यांच्यातील फरक यांच्या संदिग्धतेशी संबंधित नाही, ज्याची संदर्भात चर्चा केली आहे. ऑपरेटिंग सिस्टम आणि उच्च-कार्यक्षमता. संगणन. समांतरता हा एकापेक्षा जास्त कोर, प्रोसेसर किंवा संगणक असलेल्या वातावरणात एकरूपता प्राप्त करण्याचा एक मार्ग आहे. आम्ही सामान्य डेटामध्ये विविध प्रक्रियांचा एकाचवेळी प्रवेश करण्याच्या अर्थाने समरूपतेबद्दल बोलत आहोत.
आणि काय, खरं तर, पूर्णपणे सैद्धांतिकदृष्ट्या चूक होऊ शकते?
सामायिक केलेल्या डेटावर काम करताना, एकरूपतेशी संबंधित असंख्य समस्या, ज्याला "रेस कंडिशन" देखील म्हणतात, उद्भवू शकतात. प्रथम समस्या उद्भवते जेव्हा एखाद्या प्रक्रियेला असा डेटा प्राप्त होतो जो त्याला प्राप्त झाला नसावा: अपूर्ण, तात्पुरता, रद्द केलेला किंवा अन्यथा "चुकीचा" डेटा. दुसरी अडचण अशी आहे की जेव्हा प्रक्रियेला जुना डेटा प्राप्त होतो, म्हणजेच डेटाबेसच्या शेवटच्या सेव्ह केलेल्या स्थितीशी संबंधित नसलेला डेटा. समजा की काही ऍप्लिकेशनने वापरकर्त्याच्या खात्यातून शून्य शिल्लक असलेल्या पैसे काढले आहेत, कारण डेटाबेसने खात्याची स्थिती ऍप्लिकेशनला परत केली आहे, त्यातून शेवटचे पैसे काढले गेले नाहीत, जे काही मिलिसेकंदांपूर्वी घडले होते. परिस्थिती तशीच आहे, नाही का?
5.2 व्यवहार आम्हाला वाचवण्यासाठी आले
अशा समस्यांचे निराकरण करण्यासाठी, व्यवहाराची संकल्पना दिसून आली - डेटाबेससह अनुक्रमिक ऑपरेशन्सचा एक विशिष्ट गट (राज्य बदल), जे तार्किकदृष्ट्या एकल ऑपरेशन आहे. मी पुन्हा बँकेचे उदाहरण देईन - आणि योगायोगाने नाही, कारण पैशासह काम करण्याच्या संदर्भात व्यवहाराची संकल्पना स्पष्टपणे दिसून आली. व्यवहाराचे उत्कृष्ट उदाहरण म्हणजे एका बँक खात्यातून दुसर्या बँक खात्यात पैसे हस्तांतरित करणे: तुम्हाला प्रथम स्त्रोत खात्यातून रक्कम काढावी लागेल आणि नंतर ती लक्ष्य खात्यात जमा करावी लागेल.
हा व्यवहार करण्यासाठी, अनुप्रयोगाला डेटाबेसमध्ये अनेक क्रिया करणे आवश्यक आहे: प्रेषकाची शिल्लक तपासणे, प्रेषकाच्या खात्यावरील रक्कम अवरोधित करणे, प्राप्तकर्त्याच्या खात्यात रक्कम जोडणे आणि प्रेषकाकडून रक्कम वजा करणे. अशा व्यवहारासाठी अनेक आवश्यकता असतील. उदाहरणार्थ, ऍप्लिकेशनला शिल्लक रकमेबद्दल जुनी किंवा चुकीची माहिती मिळू शकत नाही - उदाहरणार्थ, जर त्याच वेळी समांतर व्यवहार अर्ध्या मार्गाने चुकून संपला असेल आणि खात्यातून निधी डेबिट झाला नसेल - आणि आमच्या अर्जाला आधीच माहिती प्राप्त झाली आहे. की निधी राइट ऑफ झाला.
या समस्येचे निराकरण करण्यासाठी, "पृथक्करण" सारख्या व्यवहाराच्या मालमत्तेची मागणी केली गेली: आमचा व्यवहार असा अंमलात आणला जातो जसे की त्याच क्षणी इतर कोणतेही व्यवहार केले जात नाहीत. आमचा डेटाबेस समवर्ती ऑपरेशन्स करतो जणू ते एकामागून एक कार्यान्वित करत आहे, क्रमशः - खरं तर, सर्वोच्च अलगाव पातळीला कठोर अनुक्रमेबल म्हणतात . होय, सर्वोच्च, ज्याचा अर्थ अनेक स्तर आहेत.
"थांबा," तुम्ही म्हणता. साहेब, तुमचे घोडे धरा.
प्रत्येक ऑपरेशनला कॉल वेळ आणि अंमलबजावणीची वेळ असते हे मी कसे वर्णन केले ते लक्षात ठेवा. सोयीसाठी, तुम्ही 2 क्रिया म्हणून कॉल करणे आणि कार्यान्वित करण्याचा विचार करू शकता. मग सर्व कॉल आणि अंमलबजावणी क्रियांची क्रमवारी लावलेल्या सूचीला डेटाबेसचा इतिहास म्हटले जाऊ शकते. मग व्यवहार अलगाव पातळी हा इतिहासाचा एक संच आहे. कोणत्या कथा "चांगल्या" आहेत हे निर्धारित करण्यासाठी आम्ही अलगाव पातळी वापरतो. जेव्हा आपण म्हणतो की एखादी कथा "मालिकाबद्धता खंडित करते" किंवा "सिरिअलायझ करण्यायोग्य नाही", तेव्हा आमचा अर्थ असा होतो की कथा मालिका करण्यायोग्य कथांच्या सेटमध्ये नाही.
आम्ही कोणत्या प्रकारच्या कथांबद्दल बोलत आहोत हे स्पष्ट करण्यासाठी, मी उदाहरणे देईन. उदाहरणार्थ, असा एक प्रकारचा इतिहास आहे - इंटरमीडिएट वाचन . जेव्हा व्यवहार A ला दुसर्या चालू व्यवहार B द्वारे सुधारित केलेल्या पंक्तीमधील डेटा वाचण्याची परवानगी दिली जाते आणि अद्याप वचनबद्ध ("प्रतिबद्ध नाही") केले गेले आहे तेव्हा असे घडते - म्हणजे, प्रत्यक्षात बदल अद्याप अखेरीस केले गेलेले नाहीत व्यवहार B, आणि तो कधीही रद्द करू शकतो. आणि, उदाहरणार्थ, रद्द केलेले वाचन हे रद्द केलेल्या पैसे काढण्याच्या व्यवहाराचे आमचे उदाहरण आहे
अनेक संभाव्य विसंगती आहेत. म्हणजेच, विसंगती ही एक प्रकारची अवांछित डेटा स्थिती आहे जी डेटाबेसमधील स्पर्धात्मक प्रवेशादरम्यान उद्भवू शकते. आणि काही अवांछित अवस्था टाळण्यासाठी, डेटाबेस वेगवेगळ्या स्तरांचे अलगाव वापरतात - म्हणजे, अवांछित राज्यांपासून डेटा संरक्षणाचे विविध स्तर. हे स्तर (4 तुकडे) ANSI SQL-92 मानकांमध्ये सूचीबद्ध केले गेले.
या स्तरांचे वर्णन काही संशोधकांना अस्पष्ट वाटते आणि ते त्यांचे स्वतःचे, अधिक तपशीलवार, वर्गीकरण देतात. मी तुम्हाला आधीच नमूद केलेल्या जेप्सेन, तसेच हर्मिटेज प्रकल्पाकडे लक्ष देण्याचा सल्ला देतो, ज्याचा उद्देश विशिष्ट डीबीएमएस, जसे की MySQL किंवा PostgreSQL द्वारे नेमके कोणते अलगाव स्तर ऑफर केले जातात हे स्पष्ट करणे आहे. जर तुम्ही या रेपॉजिटरीमधून फाइल्स उघडल्या, तर तुम्ही SQL कमांड्सचा कोणता क्रम ते डेटाबेसच्या विशिष्ट विसंगतींसाठी तपासण्यासाठी वापरतात ते पाहू शकता आणि तुम्हाला स्वारस्य असलेल्या डेटाबेससाठी तुम्ही असे काहीतरी करू शकता). तुम्हाला रुची ठेवण्यासाठी रेपॉजिटरीमधील एक उदाहरण येथे आहे:
-- Database: MySQL
-- Setup before test
create table test (id int primary key, value int) engine=innodb;
insert into test (id, value) values (1, 10), (2, 20);
-- Test the "read uncommited" isolation level on the "Intermediate Reads" (G1b) anomaly
set session transaction isolation level read uncommitted; begin; -- T1
set session transaction isolation level read uncommitted; begin; -- T2
update test set value = 101 where id = 1; -- T1
select * from test; -- T2. Shows 1 => 101
update test set value = 11 where id = 1; -- T1
commit; -- T1
select * from test; -- T2. Now shows 1 => 11
commit; -- T2
-- Result: doesn't prevent G1b
हे समजून घेणे महत्त्वाचे आहे की समान डेटाबेससाठी, एक नियम म्हणून, आपण अनेक प्रकारच्या अलगावपैकी एक निवडू शकता. सर्वात मजबूत इन्सुलेशन का निवडत नाही? कारण, संगणक शास्त्रातील प्रत्येक गोष्टीप्रमाणे, निवडलेली अलगाव पातळी ही आम्ही तयार असलेल्या ट्रेड-ऑफशी सुसंगत असावी - या प्रकरणात, अंमलबजावणीच्या गतीमध्ये ट्रेड-ऑफ: आयसोलेशन पातळी जितकी मजबूत असेल तितकी विनंत्या कमी होतील. प्रक्रिया केली. तुम्हाला कोणत्या स्तराच्या अलगावची आवश्यकता आहे हे समजून घेण्यासाठी, तुम्हाला तुमच्या अर्जाच्या आवश्यकता समजून घेणे आवश्यक आहे आणि तुम्ही निवडलेला डेटाबेस हा स्तर देतो की नाही हे समजून घेण्यासाठी, तुम्हाला दस्तऐवजीकरण पहावे लागेल - बहुतेक अनुप्रयोगांसाठी हे पुरेसे असेल, परंतु तुमच्या काही विशेष गरजा असल्यास, हर्मिटेज प्रकल्पातील मुले काय करतात यासारख्या चाचणीची व्यवस्था करणे चांगले आहे.
5.3 "I" आणि ACID मधील इतर अक्षरे
जेव्हा लोक सर्वसाधारणपणे ACID बद्दल बोलतात तेव्हा मुळात अलगाव म्हणजे काय. आणि या कारणास्तव मी या संक्षेपाचे विश्लेषण एकाकीपणाने सुरू केले आहे, आणि या संकल्पनेचे स्पष्टीकरण देण्याचा प्रयत्न करणार्यांच्या क्रमाने गेलो नाही. आता उरलेली तीन अक्षरे पाहू.
बँक हस्तांतरणासह आमचे उदाहरण पुन्हा आठवा. एका खात्यातून दुसर्या खात्यात निधी हस्तांतरित करण्याच्या व्यवहारामध्ये पहिल्या खात्यातून पैसे काढणे आणि दुसऱ्या खात्यातून पुन्हा भरणे ऑपरेशन समाविष्ट आहे. दुस-या खात्याची भरपाई ऑपरेशन अयशस्वी झाल्यास, तुम्हाला कदाचित पहिल्या खात्यातून पैसे काढण्याची क्रिया होऊ नये असे वाटते. दुसऱ्या शब्दांत, एकतर व्यवहार पूर्णपणे यशस्वी होतो, किंवा तो अजिबात होत नाही, परंतु तो केवळ काही भागासाठी केला जाऊ शकत नाही. या गुणधर्माला "अणुसिटी" म्हणतात आणि ते ACID मध्ये "A" आहे.
जेव्हा आमचा व्यवहार अंमलात आणला जातो, तेव्हा, कोणत्याही ऑपरेशनप्रमाणे, तो डेटाबेस एका वैध स्थितीतून दुसर्या स्थितीत हस्तांतरित करतो. काही डेटाबेस तथाकथित मर्यादा ऑफर करतात - म्हणजे, संग्रहित डेटावर लागू होणारे नियम, उदाहरणार्थ, प्राथमिक किंवा दुय्यम की, अनुक्रमणिका, डीफॉल्ट मूल्ये, स्तंभ प्रकार इ. म्हणून, व्यवहार करताना, आपण खात्री बाळगली पाहिजे की या सर्व मर्यादा पूर्ण केल्या जातील.
या हमीला "सुसंगतता" आणि ACID मधील एक पत्र C
(वितरित अनुप्रयोगांच्या जगातून सुसंगततेसह गोंधळात टाकू नये, ज्याबद्दल आम्ही नंतर बोलू) असे म्हटले जाते. मी ACID च्या अर्थाने सुसंगततेसाठी एक स्पष्ट उदाहरण देईन: ऑनलाइन स्टोअरसाठी अर्ज orders
टेबलमध्ये एक पंक्ती जोडू इच्छितो आणि टेबलमधील आयडीproduct_id
स्तंभात दर्शविला जाईल - ठराविक .products
foreign key
जर उत्पादन, म्हणा, वर्गीकरणातून काढून टाकले गेले असेल आणि त्यानुसार, डेटाबेसमधून, नंतर पंक्ती घाला ऑपरेशन होऊ नये आणि आम्हाला एक त्रुटी मिळेल. ही हमी, इतरांच्या तुलनेत, माझ्या मते, थोडीशी दूरगामी आहे - जर केवळ डेटाबेसमधील प्रतिबंधांचा सक्रिय वापर म्हणजे डेटाची जबाबदारी बदलणे (तसेच व्यवसाय तर्कशास्त्राचे आंशिक स्थलांतर, जर आपण बोलत आहोत. CHECK ) सारखे प्रतिबंध ) ऍप्लिकेशनपासून डेटाबेसपर्यंत, जे ते आता म्हणतात त्याप्रमाणेच आहे.
आणि शेवटी, ते राहते D
- "प्रतिकार" (टिकाऊपणा). सिस्टम बिघाड किंवा इतर कोणत्याही बिघाडामुळे व्यवहार परिणाम किंवा डेटाबेस सामग्री गमावू नये. म्हणजेच, जर डेटाबेसने उत्तर दिले की व्यवहार यशस्वी झाला, तर याचा अर्थ असा की डेटा नॉन-अस्थिर मेमरीमध्ये रेकॉर्ड केला गेला होता - उदाहरणार्थ, हार्ड डिस्कवर. याचा अर्थ असा नाही की पुढील वाचन विनंतीवरील डेटा तुम्हाला लगेच दिसेल.
दुसऱ्या दिवशी, मी AWS (Amazon Web Services) वरून DynamoDB सोबत काम करत होतो आणि काही डेटा सेव्ह करण्यासाठी पाठवला आणि उत्तर (OK) किंवा असे काहीतरी मिळाल्यावर HTTP 200
मी ते तपासायचे ठरवले - आणि मला हे दिसले नाही पुढील 10 सेकंदांसाठी डेटाबेसमधील डेटा. म्हणजेच, DynamoDB ने माझा डेटा कमिट केला, परंतु डेटाची नवीनतम प्रत मिळविण्यासाठी सर्व नोड्स त्वरित समक्रमित केले गेले नाहीत (जरी ते कॅशेमध्ये असेल). येथे आम्ही पुन्हा वितरित प्रणालींच्या संदर्भात सुसंगततेच्या प्रदेशात चढलो, परंतु त्याबद्दल बोलण्याची वेळ अद्याप आलेली नाही.
तर आता आम्हाला माहित आहे की ACID हमी काय आहेत. आणि ते का उपयुक्त आहेत हे देखील आम्हाला माहित आहे. परंतु आम्हाला प्रत्येक अनुप्रयोगात त्यांची खरोखर गरज आहे का? आणि नसेल तर नक्की कधी? सर्व DB या हमी देतात का, आणि नसल्यास, त्याऐवजी ते काय देतात?
GO TO FULL VERSION