Hlavní navigace

Názor ke zprávičce Používat či nepoužívat MySQL? od anonym - > Full serializable by znamenal zamek v kazdem...

  • Aktualita je stará, nové názory již nelze přidávat.
  • 30. 5. 2007 14:23

    bez přezdívky
    > Full serializable by znamenal zamek v kazdem radku, ktery prectete

    Ne nutně. Nezaměňujte jedno možné řešení problému s jeho definicí. Aby byly transakce serializovatelné stačí aby se zdálo že proběhly v nějakém pořadí jedna po druhé, tedy aby nepoznaly vliv ostatních transakcí. O zámcích tam nic není ;) Nehledě na to že potřebujete zámky na predikáty, ne na jednotlivé řádky (protože v případě instertu třeba ještě neexistují).

    Stačí například zavést read only transakce (s multiversion) a update transakce vykonávat sériově a máte taky plně serializable izolaci s vysokým výkonem pro aplikace s převahou čtení (např. web). Žádné zámky, žádný overhead.

    > Chce si to precist dokumentaci

    Optimistický multiversion model izolace PostgreSQL jsem studoval _velmi pečlivě_. Právě proto remcám ;)

    Hlavní nedostatek vidím v použití snapshotu stavu dat ze začátku transakce pro všechna čtení, což v kombinaci s "optimistickým" přístupem vede v určitých situacích ke katastrofickým selháním (= transakce nebude schopna úspěšně dokončit práci NIKDY protože bude neustále rušena jinými, menšími a rychlejšími transakcemi měnícími stejná data).
    Zbytečně se tu navíc ztrácí příležitost pro ostatní transakce změnit (a commitnout) změny dřív než budou data poprvé přečtena aktuální transakcí.
    Snapshoty fungují dobře jen pro read only transakce které nemohou měnit data a mohou tedy předstírat že proběhly v nulovém čase.

    Jasně že se to dá obejít explicitním zamykáním, ale o tom právě serializable model je - nemuset to dělat ručně ;)