на главной странице контакта стоит простой ява скрипт для подсчета пользователей,тоесть счетчик бежит просто так и изменяется от времени а не от количества новых пользователей

Почитал комментарии к новости о 10 миллионах и нашел забавное мнение, которое повторилось несколько раз. Вкратце оно сводится к следующему:

"вас не 10 миллионов, это вы тут накручиваете количество пользователей, потому что у вас на главной странице стоит простой javasсript".

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

Javasсript, который выводит динамику роста пользователей на главной странице, делает это на основе статистики скорости роста базы предыдущих дней в соответствии с математической ожидаемостью роста - в зависимости от часа и дня недели. Каждую ночь он синхронизируется с базой данных и корректирует количество зарегистрированных исходя из точных значений базы через SQL-запрос.

В результате этого погрешность в каждую отдельную секунду достигает всего 0.0001%, что очень хорошо для системы такого рода. Хотя, разумеется, наши собственные подсчеты количества пользователей мы предпочитаем делать на основе запросов к базе данных, а не на основе клиентских скриптов.

Реализовать систему, подобную приведенной выше, может не так много народу. И это нормально - не все обязаны быть программистами. Каждый человек, искушенный в высоконагрузочных системах, понимает, что COUNT к большой таблице в реальном времени каждые полсекунды кладет базу. Понятно, что без математического ожидания, которое выводит примерное количество пользователей с погрешностью 1-2 тыс. человек, здесь не обойтись.

В этой связи особенно занятно мнение "у Вас статистика считается простым java-скриптом". Остается только позавидовать уверенности, с которой ребята судят об окружающей их жизни.

Для чего я уделил этому мнению больше внимания, чем обычной чепухе, которую говорят о Контакте. Прежде всего, чтобы лишний раз вспомнить о том, насколько для нас важно выводить данные о количестве пользователей. ВКонтакте - единственный сайт, который выводит точное количество найденных пользователей при расширенном поиске по 10-миллионной базе. То есть только ВКонтакте Вы можете узнать, например, точное количество девушек, рожденных в 1984 году. Любой желающий может заняться даже подведением общеконтактовской статистики.

Ни одна другая социальная сеть такой возможности не даст (на большие запросы в лучшем случае скажет "найдено более 500 человек"), так как это требует действительно нетривиальных технических усилий. У нас широта возможностей доходит до абсурда: можно зайти в расширенный поиск, нажать "Начать поиск" без указания дополнительных условий - и выведется количество всех найденных пользователей.

Кроме того, ВКонтакте - социальная сеть, в которой порядковые номера пользователей выдаются более менее по порядку. Конечно, красивые номера типа 10000000 изымаются сразу, чтобы не искушать любителей регистрировать ботов для оккупирования круглых аккаунтов, но теоретически любой желающий может написать скрипт, который попытается зайти на каждый из порядковых номеров (id1, id2...) и посчитает актуальное количество пользователей.

Ни одна другая крупная социальная сеть не достигает подобной прозрачности в предоставлении статистической информации. Другие сайты могут заявить "нас 700 миллионов" - и никто никогда этого проверить не сможет. Только ВКонтакте предоставляет некие инструменты для сверки официальной статистики и актуальной.

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

Парадокс, верно? Но не может ли второе быть следствием первого?

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

Представьте, что на улице кто-то раздает деньги прохожим - Вы решите, что деньги фальшивые, верно?

Вот этот скрипт!

<script type="text/javascript">
var memCount = 16640712;
var memPerSec = 0.899231880876;
function updateCount() {
next = -(1000 / memPerSec)*Math.log(Math.random());
memCountString = '' + memCount;
len = memCountString.length;
memCountString = memCountString.substr(0,len-6)+" "+memCountString.substr(len-6,3)+" "+memCountString.substr(len-3,3);
ge('memCount').innerHTML = memCountString;
memCount = memCount + 1;
setTimeout(updateCount, next);
}
window.onload = function(){
updateCount();
}
</script>