Pirmā ideja, kas prātā:
Uztaisam tabulu ar nosaukumu "locks" un kolonām: id, table_name, column.
Tad pielabojam datubāzes abstrakciju, lai, ja tabulas kolona ir aizslēgta, notiek sleep uz 10ms un tad retry.
Craziest thing I said today. :D
Šorīt, ar skaidru galvu, atcerējos, ka mums arī bija problēmas ar to raw lock. Attiecīgi viena kolona tabulā tika mainīta no divām vietām (caur web un caur workeri). Labs jautājums kā risinājām — ar raw lock vai nedaudz gudrāk. :)
Bet šī te problēma nav common-case un šāda veida problemātiski bagi rodas ļoti reti.
> Tas ir ļoti mulsinoši.
Protams, ka tas būs mulsinoši. Tas tā ir tāpēc, ka nezini kā strādā Django QuerySet.
~~~
qs[:10] # limit 10
list(qs)[:10] # select all, slice 10
~~~
> Kā tu pythonā(django) izdarītu tā, ka tu ielādē teiksim 10 rakstus, dažiem ierakstiem izmaini vienu lauku un tos updeito, bet tā, lai tas viss notiktu vienā transakcijā un uz attiecīgajām ielādētajām rindām būtu uzlikts row lock?
Nezinu par raw lock, bet...
http://vpaste.net/dZe8f
> Visiem objektus taisīt?
Protams. Pag, kā vispār savādāk??
> Scalā es daru šadi:
Pythonā es daru šādi:
https://github.com/daGrevis/daGrevis.lv/blob/master/dagrevis_lv/blog/views.py#L19