Кіріспе
Бір мезгілділікті бақылау әдісі
Оптимистік бір мезгілділікті бақылау (OCC), сондай-ақ оптимистік құлыптау деп аталады, – бұл реляциялық деректер қорын басқару жүйелері және бағдарламалық транзакциялық жад сияқты транзакциялық жүйелерге қолданылатын құлыптауды қажет етпейтін бір мезгілділікті бақылау әдісі. OCC көптеген транзакциялар бір-біріне кедергі келтірмей жиі аяқталуы мүмкін деп есептейді. Орындалу барысында транзакциялар осы ресурстарға құлып қоймастан дерек ресурстарын пайдаланады. Міндеттеме жасамас бұрын әрбір транзакция өзі оқыған деректерді ешқандай басқа транзакция өзгерте қоймағанын тексереді. Егер тексеру қарама-қайшылықты өзгерістерді көрсетсе, міндеттеме транзакциясы кері қайтарылады және қайта іске қосылуы мүмкін. Оптимистік бір мезгілділікті бақылауды алғаш рет 1979 жылы Х.Т. Кунг және Джон Т. Робинсон ұсынған. OCC әдетте деректерге талас аз ортада қолданылады. Конфликттер сирек болатын жағдайда транзакциялар құлыптарды басқаруға кеткен шығындарсыз және басқа транзакциялардың құлыптарының босатылуын күтпей аяқталуы мүмкін, бұл басқа бір мезгілділікті бақылау әдістеріне қарағанда жоғары өнімділікке әкеледі. Дегенмен, егер дерек ресурстары үшін талас жиі болса, транзакцияларды қайта-қайта іске қосудың құны өнімділікке елеулі зиян келтіреді, мұндай жағдайда басқа бір мезгілділікті бақылау әдістері тиімдірек болуы мүмкін. Алайда, құлыптауға негізделген ("пессимистік") әдістер де нашар өнімділік көрсетуі мүмкін, себебі құлыптау тіпті өшіруден сақтаған жағдайда да тиімді бір мезгілділікті күрт шектей алады.
Optimistic concurrency control (OCC), also known as optimistic locking, is a non locking concurrency control method applied to transactional systems such as relational database management systems and software transactional memory. OCC assumes that multiple transactions can frequently complete without interfering with each other. While running, transactions use data resources without acquiring locks on those resources. Before committing, each transaction verifies that no other transaction has modified the data it has read. If the check reveals conflicting modifications, the committing transaction rolls back and can be restarted. Optimistic concurrency control was first proposed in 1979 by H. T. Kung and John T. Robinson. OCC is generally used in environments with low data contention. When conflicts are rare, transactions can complete without the expense of managing locks and without having transactions wait for other transactions' locks to clear, leading to higher throughput than other concurrency control methods. However, if contention for data resources is frequent, the cost of repeatedly restarting transactions hurts performance significantly, in which case other concurrency control methods may be better suited. However, locking based ("pessimistic") methods also can deliver poor performance because locking can drastically limit effective concurrency even when deadlocks are avoided.
Мысалдар
MediaWiki-дің өңдеу беттері OCC-ді пайдаланады. Bugzilla OCC-ді пайдаланады; өңдеу қақтығыстары "әуедегі соқтығысулар" деп аталады. Ruby on Rails фреймворкі OCC үшін API-ға ие. Grails фреймворкі OCC-ті әдепкі конвенцияларында қолданады. GT.M деректер базасы операцияларды басқару үшін OCC-ді пайдаланады (тіпті жеке жаңартулар да шағын транзакциялар ретінде қарастырылады). Microsoft-тың Entity Framework (соның ішінде Code First) OCC-ді екілік уақыт белгісі мәніне негізделген қолдаумен қамтамасыз етеді. Көптеген нұсқаны бақылау жүйелері бірмезгілдестіктің "біріктіру" моделін қолдайды, ол OCC. Mimer SQL – тек оптимистік қатарласуды басқаруды іске асыратын ДБСЖ. Google App Engine деректер қоймасы OCC-ді пайдаланады. Apache Solr іздеу жүйесі OCC-ді нұсқа өрісі арқылы қолдайды. Elasticsearch іздеу жүйесі құжаттарын OCC арқылы жаңартады. Әр құжат нұсқасына реттік нөмір беріледі, ал жаңа нұсқаларға жоғары реттік нөмірлер тағайындалады. Құжаттарға енгізілген өзгерістер асинхронды түрде келіп түскендіктен, бағдарламалық жасақтама жаңа нұсқаны ескі нұсқамен жаңартудан сақтау үшін реттік нөмірді пайдалана алады. CouchDB OCC-ді құжаттың өңдеулері арқылы іске асырады. MonetDB бағанға бағдарланған деректерді басқару жүйесінің транзакцияларды басқару схемасы OCC негізінде құрылған. Бағдарламалық транзакциялық жадтың көптеген іске асырылуы OCC-ді пайдаланады. Redis WATCH командасы арқылы OCC-ді қамтамасыз етеді. Firebird деректерді басқару үшін OCC-ді іске асыру ретінде көп буынды архитектураны қолданады. DynamoDB шартты жаңартуды OCC-ді іске асыру ретінде пайдаланады. Kubernetes ресурстарды жаңарту кезінде OCC-ді қолданады. YugabyteDB – бұлттық деректер базасы, ол негізінен OCC-ді пайдаланады. Firestore – Firebase компаниясының NoSQL деректер базасы, ол транзакцияларында OCC-ді пайдаланады.