[go: nahoru, domu]

Пређи на садржај

Оптимистична контрола поклапања — разлика између измена

С Википедије, слободне енциклопедије
Садржај обрисан Садржај додат
Нема описа измене
м Бот: уколоњени ␣ код референци
 
(Није приказано 13 међуизмена 7 корисника)
Ред 1: Ред 1:
{{Neprovereni seminarski}}
'''Оптимистична контрола поклапања''' ('''ОКП''') је метода [[контроле поклапања]] које се примењују у трансакцијским системима као што је [[систем за управљање релационим базама података]].
'''Оптимистична контрола поклапања''' ('''ОКП''') је метода [[контроле поклапања]] које се примењују у трансакцијским системима као што је [[систем за управљање релационим базама података]].


ОКП претпоставља да више трансакција често могу да се заврше без ометања међусобно. Док раде, трансакције користе податке без стицања закључавања над тим податцима.
ОКП претпоставља да више трансакција често могу да се заврше без ометања међусобно. Док раде, трансакције користе податке без стицања закључавања над тим податцима.


Пре него што започне рад, свака трансакција проверава да ниједна друга трансакција није мењала податак који је читала. Ако провера открије одређене измене, тренутна трансакција се враћа уназад и може бити поново покренута.<ref>{{Cite book | title = Expert One-on-One J2EE Design and Development |last=Johnson|first=Rohit| publisher = Wrox Press |year=2003|id=ISBN 0-7645-4385-7 | chapter = Common Data Access Issues | chapterurl = http://learning.infocollections.com/ebook%202/Computer/Programming/Java/Expert_One-on-One_J2EE_Design_and_Development/6266final/LiB0080.html}}</ref> ОКП је први пут предложио [[Х. Т. Кунг]].<ref>{{Cite news| title = On Optimistic Methods for Concurrency Control | first = H.T. |last=Kung| publisher = ACM Transactions on Database Systems |year=1981}}</ref>
Пре него што започне рад, свака трансакција проверава да ниједна друга трансакција није мењала податак који је читала. Ако провера открије одређене измене, тренутна трансакција се враћа уназад и може бити поново покренута.<ref>{{Cite book | title = Expert One-on-One J2EE Design and Development | last = Johnson | first = Rohit | publisher = Wrox Press | year = 2003 | isbn = 978-0-7645-4385-2 | chapter = Common Data Access Issues | chapter-url = http://learning.infocollections.com/ebook%202/Computer/Programming/Java/Expert_One-on-One_J2EE_Design_and_Development/6266final/LiB0080.html | access-date = 10. 06. 2016 | archive-date = 08. 10. 2011 | archive-url = https://web.archive.org/web/20111008203709/http://learning.infocollections.com/ebook%202/Computer/Programming/Java/Expert_One-on-One_J2EE_Design_and_Development/6266final/LiB0080.html | url-status = dead }}</ref> ОКП је први пут предложио [[Х. Т. Кунг]].<ref>{{Cite news| title = On Optimistic Methods for Concurrency Control | first = H.T. |last=Kung| publisher = ACM Transactions on Database Systems |year=1981}}</ref>


ОКП се обично користи у окружењима са малим протоком података. Када су сукоби ретки, трансакције могу да се извршавају без трошка о закључавању и без тога да једна трансакција чека крај закључавања друге трансакције, то јасно доводи до већег протока у односу на друге методе котроле поклапања. Међутим ако је аргумент за ресурсе чест, цена поновног покретања трансакције шкоди учинку знатно, општа је мисао да друге методе контроле поклапања имају бољи учинак под овим условима. Методе базиране на закључавању ("песимистичне") такође могу да имају лош учинак зато што закључавање може драстично да ограничи ефикасно поклапање чак и кад се трајна закључавања избегну.
ОКП се обично користи у окружењима са малим протоком података. Када су сукоби ретки, трансакције могу да се извршавају без трошка о закључавању и без тога да једна трансакција чека крај закључавања друге трансакције, то јасно доводи до већег протока у односу на друге методе котроле поклапања. Међутим ако је аргумент за ресурсе чест, цена поновног покретања трансакције шкоди учинку знатно, општа је мисао да друге методе контроле поклапања имају бољи учинак под овим условима. Методе базиране на закључавању ("песимистичне") такође могу да имају лош учинак зато што закључавање може драстично да ограничи ефикасно поклапање чак и кад се трајна закључавања избегну.


== ОКП фазе ==
== ОКП фазе ==
Ред 13: Ред 12:
* '''Почетак''': Снима временски маркер који обележава почетак трансакције.
* '''Почетак''': Снима временски маркер који обележава почетак трансакције.
* '''Измена''': Чита вредности из базе података и провизорно пише промене.
* '''Измена''': Чита вредности из базе података и провизорно пише промене.
* '''Потврда''': Проверава да ли су друге трансакције мењале податке које је тренутна трансакција користила (читала или писала). Ово укључује и трансакције које су се завршиле након почетка тренутне трансакције и опционо, трансакције које су активне још од потврде.
* '''Потврда''': Проверава да ли су друге трансакције мењале податке које је тренутна трансакција користила (читала или писала). Ово укључује и трансакције које су се завршиле након почетка тренутне трансакције и опционо, трансакције које су активне још од потврде.
* '''Извршити/Повратак''': Ако не долази до сукоба, све промене ће бити извршене. Ако долази до сукоба углавном се решава прекидањем трансакције иако постоје друга решења. Водите рачуна како би сте избегли [[ТОСТТОУ]] грешку, посебно ако ова фаза и претходна фаза нису изведене из једне атомичке операције.
* '''Извршити/Повратак''': Ако не долази до сукоба, све промене ће бити извршене. Ако долази до сукоба углавном се решава прекидањем трансакције иако постоје друга решења. Водите рачуна како би сте избегли [[ТОСТТОУ]] грешку, посебно ако ова фаза и претходна фаза нису изведене из једне атомичке операције.

== Веб употреба ==
== Веб употреба ==
Природа [[HTTP]]-а чини закључавање непрактичним за веб кориснички интерфејс.
Природа [[Протокол за пренос хипертекста|HTTP]]-а чини закључавање непрактичним за веб кориснички интерфејс.


Уобичајено је за корисника да крене да исправља запис и онда да га остави без "поништити" или "одјава" линка (везе). Ако је закључавање коришћено, други корисници који покушају да мењају исти снимак морају да сачекају док се првом кориснику закључавање не паузира.
Уобичајено је за корисника да крене да исправља запис и онда да га остави без "поништити" или "одјава" линка (везе). Ако је закључавање коришћено, други корисници који покушају да мењају исти снимак морају да сачекају док се првом кориснику закључавање не паузира.

HTTP пружа уграђену форму ОКП-а. Метода GET враћа [[HTTP ETag|ETag]] за ресурсе тако да следећи PUT захтев користи ETag вредност у "If-Match" пољу заглавља. Док први PUT захтев успева, други захтев неће моћи зато што је вредност у "If-Match" пољу базирана на првој верзији ресурса. <ref>{{cite web | url = http://www.w3.org/1999/04/Editing/ | title = Editing the Web - Detecting the Lost Update Problem Using Unreserved Checkout | work = W3C Note | date = 10. 5. 1999}}</ref>
HTTP пружа уграђену форму ОКП-а. Метода GET враћа [[HTTP ETag|ETag]] за ресурсе тако да следећи PUT захтев користи ETag вредност у "If-Match" пољу заглавља. Док први PUT захтев успева, други захтев неће моћи зато што је вредност у "If-Match" пољу базирана на првој верзији ресурса.<ref>{{cite web | url = http://www.w3.org/1999/04/Editing/ | title = Editing the Web - Detecting the Lost Update Problem Using Unreserved Checkout | work = W3C Note | date=10. 5. 1999}}</ref>


Неки системи за управљање базама података пружају ОКП изворно - без потребе посебног апликационог кода. За друге, апликација може провести ОКП слој изван базе да би се избегло чекање или немо преписивање записа.
Неки системи за управљање базама података пружају ОКП изворно - без потребе посебног апликационог кода. За друге, апликација може провести ОКП слој изван базе да би се избегло чекање или немо преписивање записа.
Ред 30: Ред 29:
* [[Медијавики]]јине странице за уређивање користе ОКП<ref>[[w:Help:Edit conflict|Help:Edit conflict]]<!-- Use interwiki syntax so that mirrors can at least have a chance to pick it up --></ref>
* [[Медијавики]]јине странице за уређивање користе ОКП<ref>[[w:Help:Edit conflict|Help:Edit conflict]]<!-- Use interwiki syntax so that mirrors can at least have a chance to pick it up --></ref>
* [[Redis]] омогућава ОКП кроз WATCH команду<ref>{{cite web | url = http://redis.io/topics/transactions | title = Transactions in Redis }}</ref>
* [[Redis]] омогућава ОКП кроз WATCH команду<ref>{{cite web | url = http://redis.io/topics/transactions | title = Transactions in Redis }}</ref>
* Гуглов програм за продавницу користи ОКП<ref>{{cite web | url = http://code.google.com/appengine/docs/whatisgoogleappengine.html | title = The Datastore | work = What Is Google App Engine? | date = 27. 8. 2010}}</ref>
* Гуглов програм за продавницу користи ОКП<ref>{{cite web | url = http://code.google.com/appengine/docs/whatisgoogleappengine.html | title = The Datastore | work = What Is Google App Engine? | date=27. 8. 2010}}</ref>
* [[Ruby on Rails]] оквир има АПИ за ОКП<ref>{{cite web | url = http://api.rubyonrails.org/classes/ActiveRecord/Locking/Optimistic.html | title = Module ActiveRecord::Locking | work = Rails Framework Documentation}}</ref>
* [[Ruby on Rails]] оквир има АПИ за ОКП<ref>{{cite web | url = http://api.rubyonrails.org/classes/ActiveRecord/Locking/Optimistic.html | title = Module ActiveRecord::Locking | work = Rails Framework Documentation}}</ref>


Ред 37: Ред 36:
{{reflist}}
{{reflist}}
== Литература ==
== Литература ==
* {{Cite book | title = Expert One-on-One J2EE Design and Development |last=Johnson|first=Rohit| publisher = Wrox Press |year=2003|id=ISBN 0-7645-4385-7 | chapter = Common Data Access Issues | chapterurl = http://learning.infocollections.com/ebook%202/Computer/Programming/Java/Expert_One-on-One_J2EE_Design_and_Development/6266final/LiB0080.html}}
* {{Cite book | title = Expert One-on-One J2EE Design and Development | last = Johnson | first = Rohit | publisher = Wrox Press | year = 2003 | isbn = 978-0-7645-4385-2 | chapter = Common Data Access Issues | chapter-url = http://learning.infocollections.com/ebook%202/Computer/Programming/Java/Expert_One-on-One_J2EE_Design_and_Development/6266final/LiB0080.html | access-date = 10. 06. 2016 | archive-date = 08. 10. 2011 | archive-url = https://web.archive.org/web/20111008203709/http://learning.infocollections.com/ebook%202/Computer/Programming/Java/Expert_One-on-One_J2EE_Design_and_Development/6266final/LiB0080.html | url-status = dead }}


{{reflist}}
{{reflist}}


* {{cite journal|title=On optimistic methods for concurrency control|journal=ACM Transactions on Database Systems|date=June 1981|first=H. T.|last=Kung|last2=Robinson|first2=John T.|volume=6|issue=2|doi=10.1145/319566.319567|pages=213–226}}
* {{cite journal|title=On optimistic methods for concurrency control|url=https://archive.org/details/sim_acm-transactions-on-database-systems_1981-06_6_2/page/213|journal=ACM Transactions on Database Systems|date=јун 1981|first1=H. T.|last1=Kung|last2=Robinson|first2=John T.|volume=6|issue=2|doi=10.1145/319566.319567|pages=213–226|s2cid=61600099 }}
* Enterprise JavaBeans, 3.0, By Bill Burke, Richard Monson-Haefel, Chapter 16. Transactions, Section 16.3.5. Optimistic Locking, Publisher: O'Reilly, Pub Date: May 16, 2006,Print. {{page|year=|id=ISBN 0-596-00978-X|pages=}}
* Enterprise JavaBeans, 3.0, By Bill Burke, Richard Monson-Haefel, Chapter 16. Transactions, Section 16.3.5. Optimistic Locking, Publisher: O'Reilly, Pub Date: May 16, 2006,Print. {{cite book|title= Enterprise JavaBeans 3.0|url= https://archive.org/details/enterprisejavabe0005burk|isbn=978-0-596-00978-6|pages=|last1= Burke|first1= Bill|last2= Monson-Haefel|first2= Richard|date= 16 May 2006|publisher= "O'Reilly Media, Inc."}}
* {{cite conference |last=Hollmann|first=Andreas| title = Multi-Isolation: Virtues and Limitations | booktitle = Multi-Isolation (what is between pessimistic and optimistic locking) | publisher = Happy-Guys Software GbR | date = May 2009 | location = 01069 Gutzkovpp. 30/F301.2, Dresden | url = http://www.andrej-hollmann.de/images/stories/informatik/multi-isolation-part-1.pdf |format=[[PDF]]| accessdate = 16. 5. 2013 |pages=8}}
* {{cite conference | last = Hollmann | first = Andreas | title = Multi-Isolation: Virtues and Limitations | book-title = Multi-Isolation (what is between pessimistic and optimistic locking) | publisher = Happy-Guys Software GbR | date=мај 2009 | location = 01069 Gutzkovpp. 30/F301.2, Dresden | url = http://www.andrej-hollmann.de/images/stories/informatik/multi-isolation-part-1.pdf | accessdate=16. 5. 2013 | pages = 8 }}{{Мртва веза|date=09. 2018 |bot=InternetArchiveBot |fix-attempted=yes }}

{{нормативна контрола}}


[[Категорија:Информатика]]
[[Категорија:Информатика]]

Тренутна верзија на датум 7. мај 2024. у 21:08

Оптимистична контрола поклапања (ОКП) је метода контроле поклапања које се примењују у трансакцијским системима као што је систем за управљање релационим базама података.

ОКП претпоставља да више трансакција често могу да се заврше без ометања међусобно. Док раде, трансакције користе податке без стицања закључавања над тим податцима.

Пре него што започне рад, свака трансакција проверава да ниједна друга трансакција није мењала податак који је читала. Ако провера открије одређене измене, тренутна трансакција се враћа уназад и може бити поново покренута.[1] ОКП је први пут предложио Х. Т. Кунг.[2]

ОКП се обично користи у окружењима са малим протоком података. Када су сукоби ретки, трансакције могу да се извршавају без трошка о закључавању и без тога да једна трансакција чека крај закључавања друге трансакције, то јасно доводи до већег протока у односу на друге методе котроле поклапања. Међутим ако је аргумент за ресурсе чест, цена поновног покретања трансакције шкоди учинку знатно, општа је мисао да друге методе контроле поклапања имају бољи учинак под овим условима. Методе базиране на закључавању ("песимистичне") такође могу да имају лош учинак зато што закључавање може драстично да ограничи ефикасно поклапање чак и кад се трајна закључавања избегну.

ОКП трансакције укључују следеће фазе:

  • Почетак: Снима временски маркер који обележава почетак трансакције.
  • Измена: Чита вредности из базе података и провизорно пише промене.
  • Потврда: Проверава да ли су друге трансакције мењале податке које је тренутна трансакција користила (читала или писала). Ово укључује и трансакције које су се завршиле након почетка тренутне трансакције и опционо, трансакције које су активне још од потврде.
  • Извршити/Повратак: Ако не долази до сукоба, све промене ће бити извршене. Ако долази до сукоба углавном се решава прекидањем трансакције иако постоје друга решења. Водите рачуна како би сте избегли ТОСТТОУ грешку, посебно ако ова фаза и претходна фаза нису изведене из једне атомичке операције.

Веб употреба

[уреди | уреди извор]

Природа HTTP-а чини закључавање непрактичним за веб кориснички интерфејс.

Уобичајено је за корисника да крене да исправља запис и онда да га остави без "поништити" или "одјава" линка (везе). Ако је закључавање коришћено, други корисници који покушају да мењају исти снимак морају да сачекају док се првом кориснику закључавање не паузира.

HTTP пружа уграђену форму ОКП-а. Метода GET враћа ETag за ресурсе тако да следећи PUT захтев користи ETag вредност у "If-Match" пољу заглавља. Док први PUT захтев успева, други захтев неће моћи зато што је вредност у "If-Match" пољу базирана на првој верзији ресурса.[3]

Неки системи за управљање базама података пружају ОКП изворно - без потребе посебног апликационог кода. За друге, апликација може провести ОКП слој изван базе да би се избегло чекање или немо преписивање записа.

У таквим случајевима формулар садржи скривено поље са оригиналном верзијом записа, временским маркером, редним бројем или токеном. Кад се пошаље, запис се упоређује са записом из базе података и ако се разликују позива се алгоритам за решавање сукоба.

  • Медијавикијине странице за уређивање користе ОКП[4]
  • Redis омогућава ОКП кроз WATCH команду[5]
  • Гуглов програм за продавницу користи ОКП[6]
  • Ruby on Rails оквир има АПИ за ОКП[7]

Референце

[уреди | уреди извор]
  1. ^ Johnson, Rohit (2003). „Common Data Access Issues”. Expert One-on-One J2EE Design and Development. Wrox Press. ISBN 978-0-7645-4385-2. Архивирано из оригинала 08. 10. 2011. г. Приступљено 10. 06. 2016. 
  2. ^ Kung, H.T. (1981). „On Optimistic Methods for Concurrency Control”. ACM Transactions on Database Systems. 
  3. ^ „Editing the Web - Detecting the Lost Update Problem Using Unreserved Checkout”. W3C Note. 10. 5. 1999. 
  4. ^ Help:Edit conflict
  5. ^ „Transactions in Redis”. 
  6. ^ „The Datastore”. What Is Google App Engine?. 27. 8. 2010. 
  7. ^ „Module ActiveRecord::Locking”. Rails Framework Documentation. 

Литература

[уреди | уреди извор]