Перенос баз данных на систему исполнителей

From mediawiki.org
This page is a translated version of the page Actor migration and the translation is 68% complete.
Outdated translations are marked like this.

Изначально движок MediaWiki хранил ссылки на пользователей (сделавших правку или загрузивших файл) в виде пары [<id>, <ник участника>] и [0, <IP-адрес>] для анонимных пользователей. Это приводило к бесполезной трате файлового пространства на серверах, вызывало проблемы с производительностью на вики с большим количеством версий, и значительно осложняло переименование учётных записей и введение новых типов авторов (таких как T133452). MediaWiki 1.31 вводит понятие исполнителей (англ. actor) (кто-то, кто совершил правку или сделал что-то, что записалось в журнал; на данный момент исполнитель — это или зарегистрированный участник, или анонимный). А также добавлен процесс перевода на новую схему базы данных, в которой поля наподобие revision.rev_user и revision.rev_user_text заменены полями наподобие revision.rev_actor. В связи с огромным размером таблицы revision на английской Википедии, которую необходимо полностью перевести на новый формат, прежде чем можно будет очистить изменения, миграция на новый формат будет выполняться постепенно в течение нескольких релизов MediaWiki. Ожидается, что переход на новый формат завершится в версии MediaWiki 1.34.

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