[mysql myisam] table locking, ciekawy sposob na odtykanie

0

Wpadlem na taki oto pomysl zwiazany z tablelockiem i zatykaniem sie tabel myisam pod ogromnym naporem userow.

Przykladowo mamy tabele uzytkownikow, ktora jest SELECT'owana na kazdej stronie portalu. (dobrze dla myisam), jednak gdy uzytkownik jeden z 1.000.000 wysle post, cala tabela jest zamykana na czas insertu postu bo razem z nim aktualizuje sie licznik postow w tabeli uzytkownikow +1.

Zatem zeby zmniejszyc zamykanie tabel w tabeli uzytkownikow moznaby stworzyc tabele uzytkownicy_posty i tam zapisywac ze napisali posta, jesli ten licznik bedzie >= 3 wtedy uaktualnij tabele uzytkownikow +3 i wyzeruj licznik postow w tabeli uzytkownicy_posty.

Co zyskujemy? 3 razy mniej UPDATE'ow zlych dla myisam w tabeli czesto uzywanej natomiast mamy dodatkowa operacje jednak na zupelnie innej praktycznie wcale nie SELECT'owanej tabeli czyli uzytkownicy_posty.

Dobre?

0

nie rozumiem po co robisz locka na CAŁĄ tabelę???

0

lol ja nierobie zadnego locka, zapytanie robi automatycznie ;] wiesz jak dziala myisam?

0

Przesiądź się na InnoDB, gdzie locki są na poziomie wiersza a nie tabeli ;-)

0

To czasem nie takie łatwe. A co jeśli on potrzebuje wyszukiwania pełnotekstowego? InnoDB go nie ma :(
Metoda ogólnie dobra i dość znana. W różnych odmianach w bazach z blokowaniem rekordów też stosowana.

1 użytkowników online, w tym zalogowanych: 0, gości: 1