Postgresql deadlocks

Martin Tiršel lk na blackpage.eu
Úterý Březen 6 14:45:28 CET 2012


On Fri, 02 Mar 2012 20:14:26 +0100, Tomas Vondra <tv na fuzzy.cz> wrote:

>
> Ne, tohle jde vyresit velmi jednoduse setridenim tech dat. Proste si je
> po nahodnem vyberu setridte napr. podle ID inzeratu (nebo cehokoliv
> dalsiho, dulezite je aby to ve vsech transakcich bylo stejne) a
> updatujte je v tomhle poradi. Deadlocky zmizi.
>

Ak to spravne chapem, takyto postup by mal problem vyriesit?

# nahodne nacitam 3 inzeraty
adverts = list(Advert.objects.all().order_by('?')[0:3])

# zotriedim ich podla id
adverts.sort(key=lambda x: x.id)

# navysujem views stlpec zotriedenych inzeratov
for advert in adverts:
     Advert.objects.filter(
         id=advert.id
     ).update(
         views=models.F('views') + 1
     )

# spracovanie sablony ~50ms
...

# commit
...


-- 
S pozdravom,
Martin Tiršel


Další informace o konferenci Linux