Перенос баз данных на систему исполнителей
Изначально движок 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 (на английском языке).