Перенос баз данных на систему исполнителей
Изначально движок MediaWiki хранил ссылки на пользователей (сделавших правку или загрузивших файл) в виде пары [<id>, <ник участника>] и [0, <IP-адрес>] для анонимных пользователей.
Это приводило к бесполезной трате файлового пространства на серверах, вызывало проблемы с производительностью на вики с большим количеством версий, и значительно осложняло переименование учётных записей и введение новых типов авторов (таких как T133452).
MediaWiki 1.31 вводит понятие исполнителей (англ. actor) (кто-то, кто совершил правку или сделал что-то, что записалось в журнал; на данный момент исполнитель — это или зарегистрированный участник, или анонимный). А также добавлен процесс перевода на новую схему базы данных, в которой поля наподобие revision.rev_user и revision.rev_user_text заменены полями наподобие revision.rev_actor.
В связи с огромным размером таблицы revision в английской Википедии, которую необходимо полностью перевести на новый формат, прежде чем можно будет очистить изменения, миграция на новый формат была постепенно выполнена в течение нескольких релизов MediaWiki.
Это было завершено в MediaWiki 1.39.
В ходе перехода в таблице actor была создана запись для каждой пары значений *_user / *_user_text, а сами пары значений были заменены на идентификатор соответствующей строки в таблице исполнителей.
Переход на новый формат затронул следующие столбцы:
| Таблица | Старые столбцы | Новый столбец |
|---|---|---|
| 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 |
Чтобы не выполнять ресурсоёмкий запрос ALTER TABLE на огромных таблицах revision больших разделов Википедии, сначала поля rev_user и rev_user_text копировались в таблицу revision_actor_temp и потом обратно в таблицу revision.
Временная таблица revision_actor_temp впоследствии была удалена.
Если вы владелец какой-либо вики, вероятно, вам ничего не нужно делать самостоятельно. Переход на новый формат осуществится автоматически, когда вы выполните сценарий update.php.
Если вы хотите управлять тем, когда произойдёт переход, обратитесь к документации к $wgActorTableSchemaMigrationStage и migrateActors.php.
Если вы разработчик расширения, использующего прямой доступ к затронутым полям базы данных, вам нужно будет обновить свои запросы (или ещё лучше, перейти на использование методов getQueryInfo(), например Revision::getQueryInfo(), а не строить свои запросы вручную).
На время периода перехода вы также можете использовать класс ActorMigration для получения информации о схеме и полях. Этот класс работает для любых настроек $wgActorTableSchemaMigrationStage.
Если вы разрабатываете стороннее приложение, использующее Toolforge, его производительность может измениться, даже если вы не обращаетесь напрямую к затронутым полям. Для получения более подробной информации обратитесь к wikitech:News/Actor storage changes on the Wiki Replicas (на английском языке).