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

    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.

    К счастью, вандальные статьи в этот раз снова пронеслись мимо.
    Поделиться публикацией
    Никаких подозрительных скриптов, только релевантные баннеры. Не релевантные? Пиши на: adv@tmtm.ru с темой «Полундра»

    Зачем оно вам?
    Реклама
    Комментарии 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.

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

                  Интересные публикации