База данных Google Analytics
Кто-нибудь знает, как организованы данные в Google Analytics? Трудный выбор из большого количества данных, которые они выполняют очень-очень быстро, какая структура базы данных?
Ответы
Ответ 1
AFAIK Google Analytics происходит от Urchin. Как уже было сказано, возможно, что с тех пор Google Analytics является частью семейства Google, она использует MapReduce/BigTable. Я могу предположить, что Google интегрировал старый формат Urchin DB с новым BigTable/MapReduce.
Я нашел эти ссылки, которые говорят о DB Urchin. Вероятно, некоторые из вещей все еще используются на данный момент.
http://www.advanced-web-metrics.com/blog/2007/10/16/what-is-urchin/
это говорит:
[snip]... все еще используют запатентованную базу данных для хранения данных отчетов, что делает запросы ad-hoc более ограниченными, поскольку вам нужно использовать разработанные Urchin инструменты, а не более гибкие инструменты SQL.
http://www.urchinexperts.com/software/faq/#ques45
Какой тип базы данных использует Urchin?
Urchin использует запатентованную плоскую файловую базу данных для хранения данных отчета. Высокопроизводительная архитектура базы данных эффективно обрабатывает очень высокие сайты трафика. Некоторые из преимуществ архитектуры базы данных включают в себя:
* Small database footprint approximately 5-10% of raw logfile size
* Small number of database files required per profile (9 per month of historical reporting)
* Support for parallel processing of load-balanced webserver logs for increased performance
* Databases are standard files that are easy to back up and restore using native operating system utilitiesv
Подробная информация о Urchin
http://www.google.com/support/urchin45/bin/answer.py?answer=28737
Давным-давно у меня был трекер, и на их сайте они обсуждали нормализацию данных: http://www.2enetworx.com/dev/articles/statisticus5.asp
Здесь вы можете найти немного информации о том, как уменьшить данные в БД и, возможно, это хороший старт в исследовании.
Ответ 2
BigTable
Публикация Google: Чанг, Фэй и др. " Bigtable: распределенная система хранения для структурированных данных." ACM Transactions on Computer Systems (TOCS) 26.2 (2008):
Bigtable используется более чем 60 продуктами и проектами Google, включая Google Analytics, Google Finance, Orkut, персонализированный Поиск, Writely и Google Earth.
Ответ 3
Я бы предположил, что они используют свою Big Table '
Ответ 4
Я не могу точно знать, как они это реализуют. Но поскольку я создал продукт, который извлекает не сэмплированные, не агрегированные данные из Google Analytics, я кое-что узнал о структуре.
Я имею смысл, что данные заполняются через BigTable. BT предлагает осведомленность о локализации данных и отображение/уменьшение запросов через n-узлы.
Различное количество (может ли служба данных обеспечить различное количество или нет, является простой мерой гибкости модели данных - но обычно это также мера стоимости и производительности)
Google Analytics не предназначена для выполнения отдельных подсчетов, даже если GA может считать пользователей практически в любом измерении, но не может подсчитывать, например, Sessions per ga: pagePath? Как так... Ну, они только регистрируют сеанс с первым pageView в сеансе. Это означает, что мы можем только посчитать, сколько посадочных страниц было сессией. Мы не учитываем все остальные 99% страниц вашего сайта. :/
Причиной этого является то, что Google сделал выбор НЕ рассчитывать количество скидок вообще. Это просто плохо масштабируется при обслуживании миллионов сайтов бесплатно. Они нуждались в подходе, где они могли бы избежать подсчета отличных. Отличительный счетчик - все о сортировке, группировании списков идентификаторов для каждой ячейки в пересечении данных.
Но... Разве не просто подсчитать различное количество сеансов по значению ga: pagePath? Я отвечу на это немного
Разделение пользователя и данных. Выбор, который они сделали, состоял в том, чтобы разделить данные на пользователей (clientIds или userIds), потому что, когда они знают, что clientId/userId X присутствует только в определенной таблице в BT, они могут запустить функцию map/lower, которая подсчитывает пользователей и им не нужно беспокоиться о том, что один и тот же пользователь присутствует в другом наборе данных, и его заставляют хранить все clientIds/userIds в списке - группировать их, а затем считать их - различными. Поскольку текущий скрипт отслеживания GA называется Universal Analytics, они должны иметь возможность правильно рассчитывать количество пользователей. Особенно при фокусировке на отслеживании между устройствами.
Хорошо, но как это влияет на количество сеансов? У вас есть набор пользователей, каждый из которых имеет несколько наборов сеансов, каждый из которых имеет список посещений страницы. При подсчете в определенном сеансе в поисках pagePaths вы найдете одну и ту же страницу несколько раз, но не будете считать страницу более одного раза. Вам нужно записать, что вы уже видели эту страницу раньше. Когда вы прошли все страницы в этом сеансе, вам нужно только посчитать сеанс на страницу. Эта процедура требует состояния/памяти. И поскольку процесс подсчета, вероятно, выполняется параллельно на одном и том же сервере. Вы не можете быть уверены, что конкретный сеанс обрабатывается тем же процессом. Что делает подсчет еще более трудоемким. Google решил больше не гоняться за этим кроликом и просто проигнорировал, что счетчик сеансов неверен для pagePath и других измеренных областей.
Хранилище "куба" Причина, по которой я пишу "куб", заключается в том, что я точно не знаю, используют ли они традиционную структуру куба OLAP, но я знаю, что у них есть до 100 кубов, заполненных для ответов на различные комбинации измерений/метрик.
Из-за изоляции/группировки измерений в меньших кубах данные не будут расти в геометрической прогрессии, как если бы они помещали все данные в один куб. Недостатком является то, что не все комбинации данных допускаются. Что мы знаем, это правда. Например, ga: TransactionsId и ga: eventCategory нельзя запрашивать вместе.
Выбирая эту структуру, набор данных может масштабироваться очень экономично и с точки зрения производительности.
Ответ 5
Многие места и приложения в портфеле Google используют алгоритм MapReduce для хранения и обработки больших объемов данных.
Для получения дополнительной информации см. Публикации Google Research по MapReduce, а также посмотрите страница 4 и страница 5 this Исходная статья.
Ответ 6
Google Analytics работает в режиме Mesa: георепликация, почти в реальном времени, масштабируемое хранилище данных'.
https://storage.googleapis.com/pub-tools-public-publication-data/pdf/42851.pdf
"Mesa - это масштабируемая система хранения аналитических данных, которая хранит важные данные измерений, связанные с рекламным бизнесом GooglesInternet".