Migracja Wykonawcy
Dawniej, MediaWiki przechowywało odwołanie do użytkownika wykonującego (np. autora wersji lub przesyłającego plik) jako parę [<id>, <name>], przy czym dla edycji użytkowników niezarejestrowanych - [0, <IP address>].
Było to marnotrawieniem przestrzeni dyskowej, powodowało problemy z wydajnością na wiki z dużą liczbą edycji oraz utrudniało zmianę nazw użytkowników, a także utrudniało wprowadzanie nowych rodzajów określania autorów (wykonawców czynności), np. T133452.
MediaWiki 1.31 wprowadza koncepcję wykonawcy (actor), co jest zdefiniowane jako osoba wykonująca akcję taką jak edycja lub te, które są pokazywane w rejestrze. Może to być zarejestrowani użytkownik lub anonimowy.
Aby wykorzystać nowy sposób zapisu, ustalono proces migracji, który spowoduje zastąpienie pól w bazie danych takich jak revision.rev_user i revision.rev_user_text polami typu revision.rev_actor.
Z powodu dużego rozmiaru tabeli revision anglojęzycznej Wikipedii, która musiała zostać całkiem zmigrowana zanim zmiany mogły zostać uporządkowane, migracja ta była przeprowadzana etapami, przez kilka wydań MediaWiki.
Została ukończona w wersji MediaWiki 1.34.
Ta migracja stworzyła wpisy w tabeli actor dla każdej z rozdzielonych par *_user / *_user_text, a następnie zastąpiła te pary odwołaniem do identyfikatora wpisu w tabeli actor.
Oto kolumny, które zostały przekonwertowane:
| Tabela | Stare kolumny | Nowe kolumny |
|---|---|---|
| revision | rev_user, rev_user_text | rev_actor |
| archive | ar_user, ar_user_text | ar_actor |
| ipblocks | ipb_by, ipb_by_text | ipb_by_actor |
| image | img_user, img_user_text | img_actor |
| oldimage | oi_user, oi_user_text | oi_actor |
| filearchive | fa_user, fa_user_text | fa_actor |
| recentchanges | rc_user, rc_user_text | rc_actor |
| logging | log_user, log_user_text | log_actor |
Aby uniknąć kosztownego ALTER TABLE na ogromne tabele revision dużych wiki Wikipedii, początkowo skopiowano rev_user i rev_user_text do tabeli revision_actor_temp, a stamtąd z powrotem do revision.
Tabela revision_actor_temp została później usunięta.
Jeżeli posiadasz własną instalację wiki, prawdopodobnie nie będziesz musiał podejmować żadnych działań, migracja rozpocznie się automatycznie po uruchomieniu update.php.
Aby zapanować nad uruchomieniem migracji, zobacz ustawienie $wgActorTableSchemaMigrationStage oraz skrypt migrateActors.php.
Jeżeli jesteś twórcą rozszerzeń i twoje rozszerzenie wykonuje bezpośrednie zapytania do bazy danych korzystające ze wspomnianych pól, będziesz musiał zaktualizować swoje zapytania (a najlepiej skorzystać z metod getQueryInfo(), na przykład Revision::getQueryInfo() zamiast ręcznie tworzyć zapytania).
Podczas okresu migracji możesz też skorzystać z klasy ActorMigration aby pobierać informacje o strukturze i polach, dostosowaną do dowolnego ustawienia $wgActorTableSchemaMigrationStage.
Jeżeli rozwijasz narzędzia dostępne na Toolforge, mogą pojawić się implikacje wydajności, nawet jeżeli nie korzystasz bezpośrednio z pól, które ta zmiana dotyczy. Zobacz wikitech:News/Actor storage changes on the Wiki Replicas po więcej informacji.