14. dubna 2008

Konkurenční přístup k datům - zamykací mechanismy, díl čtvrtý

Dnes bych rád popsal pesimistické offline zamykání. Tento poslední díl mého mini-seriálu o zamykacích mechanismech navazuje na předchozí tři díly (1, 2, 3).

Důvody, proč někdy nestačí online zamykací mechanismy jsem popsal v minulém díle, nyní se budu tedy hned věnovat samotnému pesimistickému zamykání.

Pesimistické offline zamykání

Tento typ zamykání se nám hodí zejména v takových případech užití, kde pravděpodobnost "střetu" je velká nebo následky velké. Jen pro úplnost dodávám, že se jedná o offline zamykání, protože jinak bychom mohli použít Pesimistické online zamykání.

Tento typ zamykání je řešen na aplikační úrovni aplikace a před jeho realizací je nutné si zodpovědět následující otázky:
  • Co je potřeba zamykat? Objekt, mapu objektů nebo bude stačit jen určitý atribut objektu? Může se hodit např. tento přístup od Martina Fowlera.

  • Kdy se data budou zamykat a odemykat?

  • Jaký typ zámku použiji? Použiji zámek pouze na zápis dat nebo i pro jejich čtení?

  • Jak budu identifikovat vlastníka zámku? Bude to HTTP Session ID nebo uživatelské ID nebo něco jiného?

  • Jak budu udržovat zámky? Bude mi stačit interní paměť nebo budu potřebovat databázi.

  • Jak budu uvolňovat zámky? Mám na mysli standardní případy, kdy někdo bude mít zamknutá data a odejde na oběd. Má se zámek po určité době automaticky uvolnit, dovolíme jiným uživatelům tento zámek získat?


Těch otázek není málo a od jejich odpovědí se odvyjí implementace. Znám dvě:
  • Centrální zamykací systém (lock manager). Tento způsob používám, protože se mi líbí, že je to neinvazivní způsob (nemusím měnit objekty, pouze kde potřebuji přidám LockManager), je to centralizované řešení a dle potřeby mohu zvolit implementace uložení zámků - paměť vs. databáze.

  • Ukládání zámků přímo v objektech. Ty objekty, které potřebuji zamykat vybavím speciálními atributy, abych poznal, že daný objekt je nebo není zamknutý.



Pozn.: Většinu informací, které jsem v této sérii článků prezentoval, jsem našel v knížce POJO in Facade.

1 komentář:

Jakub řekl(a)...

Zdravím Petře, předem díky za pěkné články. Uvítal bych ještě nějaký příklad použítí, případně konfigurace ORM nástroje, pak by byly články naprosto dokonalé :-). Měj se. Jakub