Пользователь
0,0
рейтинг
11 мая 2013 в 16:32

Как я вычислял миллионную статью русской Википедии

1000000Сегодня, 11 мая 2013 года, в 01:41:39.8 UTC (05:41:39.8 московского времени) в русском разделе Википедии появилась миллионная статья. По случайному совпадению, русский раздел именно сегодня отмечает своё 11-летие. Статью Life Extension Foundation создал участник UG72. Уже разгорелись споры о том, имеет ли статья право на жизнь, но тот факт, что рубеж взяла именно она, установлен однозначно.

Счётчик статей в Википедии показывает количество статей, в которых есть хотя бы одна ссылка (существуют и две другие настройки правил). Таким образом, на его значение может повлиять как создание и удаление статей, так и переименование и даже любая правка. Добавим к этому то, что в преддверии юбилея участники начинают массово заливать свои заготовки в надежде, что одна из них всё-таки окажется юбилейной статьёй, и то, что счётчик, как не очень важная обычно вещь, обновляется асинхронно. В итоге вычислить нужную статью становится очень непросто. Но всем же интересно!

Выкрутиться всё-таки можно.


Из-за того, что на счётчик могут повлиять любые действия, и всё происходит очень быстро, попытки вычислить номер статьи ретроспективно обречены. На счётчик нужно смотреть в реальном времени. Когда Википедия была ещё не такой известной, было достаточно зайти в нужное время на список новых статей, где в то время размещался счётчик, и успеть сделать скриншот. Но сегодня, например, круглое значение счётчика продержалось меньше двух секунд.

У фонда Викимедиа есть Тулсервер — набор серверов, на которые копируются базы данных проектов фонда. Шелл-доступ к ним может запросить любой технически грамотный участник. Получив доступ, ресурсы Тулсервера можно использовать для любых действий, полезных для проектов фонда.

Актуальное значение счётчика статей хранится в базе данных; там же, естественно, находится и информация о новых статьях. Поэтому для фиксации юбилейного момента достаточно опрашивать базу данных несколько раз в секунду, следить за изменениями счётчика и логировать их. Лог выглядит примерно вот так:

06:05:25.02  999397  Касиски,_Фридрих
06:05:25.51  999398  Касиски,_Фридрих
06:09:02.67  999398  Криволапов,_Григорий_Архипович
06:09:03.32  999399  Криволапов,_Григорий_Архипович
06:10:16.17  999399  Лёгкая_промышленность_России
06:10:18.39  999400  Лёгкая_промышленность_России

Обычно каждая статья появляется в нём дважды: в первый раз меняется показание поля «Последняя созданная статья», во второй — значение счётчика. Таким образом, например, статья Касиски,_Фридрих была 999398-й.

Сегодня ночью в районе юбилея с доступом к Тулсерверу были проблемы. Следящий скрипт продолжал работать и регистрировать новые статьи, однако значение счётчика было другим! Разобраться, почему так происходит, быстро не получилось. Средства мониторинга говорили, что репликация осуществляется корректно и без задержек. Разница показаний счётчиков медленно плавала в районе 100 статей. Поэтому скрипт пришлось срочно переписать, чтобы он брал данные напрямую с сайта. Работающий с базой экземпляр остался запущенным на всякий случай.

У MediaWiki есть прекрасное API, позволяющее вытащить много интересных данных. К API можно сформулировать запрос, который одновременно вернёт значение счётчика и последние новые страницы:

ru.wikipedia.org/w/api.php?format=jsonfm&meta=siteinfo&action=query&siprop=statistics&list=recentchanges&rctype=new

Нужные данные находятся в полях .query.statistics.articles и .query.recentchanges[0].title. С этими данными нужно делать то же самое — постоянно опрашивать их и логировать любые изменения. Асинхронность счётчика при этом становится заметной в меньшем числе случаев.

Поскольку HTTP-запрос выполняется дольше, чем запрос к базе, я на всякий случай запустил тот же скрипт со своего личного сервера. На этом я успокоился, затаился и стал ждать.

Статью создали. Три лога в районе миллиона выглядят так:

Тулсервер, данные из копии базы
https://toolserver.org/~kalan/ruwiki-1m.txt
01:36:32.57  999878  Клавдиево
01:36:32.89  999879  Клавдиево
...
01:41:37.88  999908  Ловно
01:41:38.30  999909  Ловно
01:41:38.49  999909  Кручинин,_Владимир_Фёдорович
01:41:38.93  999909  Калямин,_Вячеслав_Иванович
01:41:39.09  999910  Калямин,_Вячеслав_Иванович
01:41:40.69  999911  Калямин,_Вячеслав_Иванович
01:41:40.75  999911  Life_Extension_Foundation
01:41:40.91  999912  Life_Extension_Foundation
01:41:41.95  999912  Фортыгин,_Виталий_Сергеевич
01:41:42.11  999913  Фортыгин,_Виталий_Сергеевич
01:41:43.07  999913  Император_-_сила
01:41:43.29  999914  Император_-_сила
01:41:43.35  999914  Чертова,_Надежда_Андреевна
01:41:43.97  999915  Glock_21
01:41:44.59  999916  Glock_21
01:41:44.65  999916  Володя_Шишкин
01:41:44.69  999917  Володя_Шишкин
...
01:43:17.60  999935  Бобрик_(станиця)
01:43:17.69  999936  Бобрик_(станиця)



Тулсервер, данные из API
https://toolserver.org/~kalan/ruwiki-1m-2.txt
01:36:32.67  999966  Клавдиево
01:36:32.93  999967  Клавдиево
...
01:41:38.01  999997  Ловно
01:41:38.67  999997  Кручинин, Владимир Фёдорович
01:41:39.12  999998  Калямин, Вячеслав Иванович
01:41:39.35  999999  Калямин, Вячеслав Иванович
01:41:39.80  1000000  Life Extension Foundation
01:41:41.12  1000000  Фортыгин, Виталий Сергеевич
01:41:41.56  1000001  Фортыгин, Виталий Сергеевич
01:41:41.79  1000000  Фортыгин, Виталий Сергеевич
01:41:42.00  1000001  Фортыгин, Виталий Сергеевич
01:41:42.63  1000002  Император - сила
01:41:43.09  1000003  Чертова, Надежда Андреевна
01:41:43.32  1000004  Glock 21
01:41:44.22  1000004  Володя Шишкин
...
01:43:17.01  1000023  Бобрик (станиця)
01:43:17.22  1000024  Бобрик (станиця)



Мой сервер, данные из API
http://v.kalan.cc/ruwiki-1m-2.txt
01:36:32.72  999966  Клавдиево
01:36:32.96  999967  Клавдиево
...
01:41:37.95  999996  Ловно
01:41:38.19  999997  Ловно
01:41:38.68  999997  Кручинин, Владимир Фёдорович
01:41:38.92  999997  Калямин, Вячеслав Иванович
01:41:39.17  999999  Калямин, Вячеслав Иванович
01:41:39.88  1000000  Life Extension Foundation
01:41:41.25  1000000  Фортыгин, Виталий Сергеевич
01:41:41.73  1000001  Фортыгин, Виталий Сергеевич
01:41:42.68  1000002  Император - сила
01:41:42.92  1000002  Чертова, Надежда Андреевна
01:41:43.14  1000003  Чертова, Надежда Андреевна
01:41:43.38  1000004  Glock 21
01:41:44.32  1000004  Володя Шишкин
...
01:43:17.10  1000023  Бобрик (станиця)
01:43:17.34  1000024  Бобрик (станиця)



По всем трём логам видно, что рубеж взяла именно статья Life Extension Foundation. По статьям Клавдиево (999967) и Бобрик (станиця) (1000024) можно заключить, что разница показаний счётчиков Тулсервера и самой Википедии в интересующем нас отрезке была равна 88. Под номером 1000000−88=999912 находим, опять-таки, статью Life Extension Foundation.

К счастью, вандальные статьи в этот раз снова пронеслись мимо.
Kalan @Kalan
карма
110,5
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (21)

  • –2
    Life Extension Foundation уже предложили к удалению.
    • +9
      — Уже разгорелись споры о том, имеет ли статья право на жизнь
      Это едва ли не первая фраза.
      • НЛО прилетело и опубликовало эту надпись здесь
        • +3
          Согласен.
          Нередко сталкиваюсь с отсутствием банальных статей.
          Создаю ссылку, статью, пишу абзац, выставляю «заготовку», надеюсь, что придут знающие люди и дополнят… А вместо этого в половине случаев просто удаляют всё.
          Мне казалось, человеку всегда проще дополнить имеющуюся статью, чем создать с нуля.
          • +4
            Синдром вахтёра у людей, ниже правильно заметили. Вон про Питофа только сделали статью, тут же приговорили к удалению.
          • –1
            «Значимость темы статьи» и «качество статьи» — это разные вещи.
            Грубо говоря, если какой то школьник создаст тему «Я Вася Фидотов и мои друзья», то такую статью удалят из-за отсутствия значимости для энциклопедии независимо от того насколько качественно она будет написана.
            Если же человек создаст статью «Земля» где будет содержаться только шаблон планеты с одним заполненным полем, то такую статью удалят по причине отсутствия минимального содержания.

            Хотя согласен, что «заготовки» удалять не нужно, их лучше бы помещать в какой нибудь инкубатор, из которого они бы попадали в общее пространство википедии, как только становились бы полноценными статьями.
            • –1
              Инкубатор для новичков в русской Википедии есть, и даже прямо так и называется. Но на его поддержку нужно много сил людей, которых как-то нет.
              • +1
                Название «инкубатор» взял по аналогии с инкубатором новых языковых разделов википедии. Думаю нет ничего удивительного в том, что такую аналогию используют и другие.

                Дело же в том, что инкубатор для новых авторов это не инкубатор для новых статей.
                Создавая новую статью, её попрежнему нужно создавать в личной песочнице до минимального размера, прежде чем создавать страницу новой статьи. Это ограничивает выгоду от совместной работы на ранних этапах создания статьи.

                Например, нашёл хороший источник повествующий о размере Земли, хочу добавить эту информацию в Википедию, но такой страницы ещё нет. Я не могу создать заготовку куда вставлю шаблон планеты, укажу её размер и вставлю ссылку на источник. А человеку, который будет писать статью, придётся отдельно искать информацию и источник о размерах Земли.
  • +8
    Так ли это важно считать песок на пляже?
    • +3
      lurkmore.to/Гет‎
    • +4
      Если бы и в него было вложено столько бескорыстного труда…
  • 0
    Не совсем понял почему у статьи счетчик увеличивается на 2?
    • 0
      У какой?
      • 0
        Извини, ответ ниже, промахнулся.
  • 0
    999397 Касиски,_Фридрих
    999398 Касиски,_Фридрих
    • 0
      Сначала появляется статья, поэтому меняется значение показателя «последняя созданная статья», и в лог пишется строчка. В этой строчке — старое значение счётчика.

      Счётчик обновляется чуть позже; изменение этого показателя тоже записывается в лог.
      • 0
        Все дошло! Спасибо.
        Так происходит обычно, но не всегда? Бывают еще варианты?
        • 0
          Если создаётся много статей одновременно, то счётчик может не успеть обновиться для каждой из них.

          Теоретически может быть, что счётчик обновился очень быстро, и строчка будет единственная, но я таких случаев не замечал.

          Значение счётчика также меняется при удалениях страниц и добавлении/удалении ссылок (последнее — крайне редкий случай).
          • 0
            Смысл второй строчки выходит в том, что бы подставить верное значение счетчика? Сделано для балансировки нагрузки?
            • 0
              Возможно, не очень понял первый вопрос. Смысл её появления в логе да, можно описать так.

              Все обновления статистики и прочие «несрочные» отложены, судя по всему, действительно для того, чтобы всё работало быстрее.
  • +13
    1. Конструктивным участникам русской ВП — читателям и писателям — поздравления и респект.

    2. Отдельный респект автору UG72 и всем единомышленникам — трансгуманистам, научным имморталистам, лонгевистам.

    3. Админам ВП с синдромом вахтера, из личных предубеждений пытающимся удалять статьи, связанные с трансгуманизмом, продлением жизни и другими смежными темами, вопреки 90% голосов «Оставить» и «Быстро оставить» (в частности, удалившим таким образом статью об РТД и известнейших российских трансгуманистах), — memento mori, википедики. С вашей политикой вы либо загоните ВП в гроб и ей на смену придет что-нибудь вроде метавики (универсального навигатора по википодобным ресурсам и диспетчера их значимости и релевантности тем или иным темам), либо сами пойдете под викитрибунал. Либо, еще раз повторю, memento mori.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.