Actor migration
Історично MediaWiki зберігала посилання на користувачів (наприклад, автора редакції або зображення) у вигляді пари [<id>, <name>] з [0, <IP address>] для анонімних змін.
Це було марною тратою місця для зберігання, викликало проблеми з продуктивністю на вікі з величезною кількістю редакцій і ускладнювало перейменування користувачів або введення нових типів авторів, таких як T133452.
MediaWiki 1.31 вводить концепцію акторів (хтось, хто здійснює дію, наприклад, редагування або подію журналу; наразі або зареєстрований користувач, або анонімний), і процес міграції до нової схеми бази даних з полями на кшталт 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:Новини/Зміни сховища актора на Wiki Replicas для отримання додаткової інформації.