powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Сервис Realtime-статистики/аналитики: РСУБД или noSQL?
15 сообщений из 15, страница 1 из 1
Сервис Realtime-статистики/аналитики: РСУБД или noSQL?
    #38772412
Ravlio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На любой рекламной бирже есть система ведения и отображения статистики, без неё никак. В нашем случае система работает на MySQL и логирует каждый показ или клик баннера (действие), а затем агрегирует действия по группам раз в минуту. Выглядит это примерно так. Само действие (упрощённо, полей намного больше):

datepartner_idsub_idcountry_idsite_idformat_idimpressionsclicks01012014140000bill0ussite1.com320x2001001012014140002joegooglerusite2.com468x6001

Действия кладутся как есть, один за другим в промежуточную ненормализованную таблицу типа MEMORY. Затем, по крону, раз в минуту, они группируются по разным критериям и кидаются в соответствующие таблицы:

по дате:
datepartner_idsub_idimpressionsclicks01012014140000billtest430150

по стране:
datepartner_idsub_idcountry_idimpressionsclicks01012014140000billtestus520123

по сайту:
datepartner_idsub_idsite_idimpressionsclicks01012014140000billtestsite1.com230153

по формату баннера и так далее. Всего около 15 группировок. На каждую группировку соответственно идёт отдельная таблица. В итоге, чтобы выбрать статистику по датам, мы делаем:

Код: sql
1.
SELECT * FROM stats_bydate WHERE user_id='bill' AND date>=... and date<=...



для статистики по странам:
Код: sql
1.
SELECT * FROM stats_bycountry WHERE user_id='bill' AND date>=... and date<=...



И так далее. Всё довольно очевидно, просто и надёнжо. Индексы покрывают все возможные комбинации запросов и всё работает вполне шустро. Правда, таблицы со временем получаются очень жирными (ну представьте, 1к партнёров, у каждого по 1к сабаккаунтов, в итоге добавляется по 1млн новых записей в сутки в каждую из 15и таблиц).

Теперь о том, что реально не устраивает. Для начала, не устраивает промежуточная таблица, из которой данные батчем раскидываются по крону. Хотелось бы статистики в реальном времени. Но для этого нужно на каждое действие делать по 15 запросов INSERT ... ON DUPLICATE ENTRY UPDATE — на каждую таблицу группировки по запросу. Может кто знает, возможно ли это в теории при таких требованиях: 50-100млн действий в сутки, максимальное время обработки действия не более 15-30мс ? То это получается 50-100млн * 15 запросов.

Что ещё не устраивает — это размеры таблиц, которые постоянно растут. И выходит так, что за счёт большого количества группировок, общих данных в таблице не намного меньше общего количества совершенных действий. Тогда уж проще хранить все действия как есть, в сыром виде. И делать интересные выборки. Типа таких:

Код: sql
1.
SELECT * FROM events WHERE user_id='bill' AND sub_id='test' AND date>=... AND date<=... AND country_id=(ru,us,it) AND format_id=(320x200,468x60) ORDER BY country_id



джойны я писать не стал, итак понятно, что я имею ввиду. Разумеется, тут необходим кластер для map-reduce. Насколько я знаю, подобные вещи принято делать на noSQL базах данных.

Ну а в итоге мне хочется Business Intelligence с красивыми графиками и всевозможными выборками (не многомерные кубы, разумеется, но комбинации различных характеристик действия) на большом количестве данных и чтобы они отрабатывали быстро (менее секунды) для, к примеру, 50-100 выборок в секунду. Возможно с какими-то упрощениями (делаем партиции по дням, но лучше по неделям, и с ними работаем, как с горячими данными)

Можно ли как-то прикинуть необходимое под такую задачу количество нод? Может есть калькулятор? И кто какой стек заюзал бы под такую систему аналитики? Я имею ввиду БД, агрегатор. Или идея утопична настолько, что я несу полнейший бред, раз даже у Google Analytics обновление статистики делается минимум раз в час? Признатья, и сам я не видел таких проектов — либо всё сводилось к банальной статистике "по дням", "по сайтам" и т.п., либо объёмы данных небольшие.

У меня пока крутятся идеи насчёт Cassandra или Elasticsearch или Amazon Redshift, но всё это нужно тестировать, а это сразу большие инвестиции. Информации в интернете просто море, в котором можно утонуть.
...
Рейтинг: 0 / 0
Сервис Realtime-статистики/аналитики: РСУБД или noSQL?
    #38772491
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делай шардинг по партнёрам. У тебя в каждом запросе фильтрация по partner_id, так что ты очень сильно выйграешь выделив каждому партнёру отдельный виртуальный сервер. Потом загоняешь их в облако и всё, телемаркет.
...
Рейтинг: 0 / 0
Сервис Realtime-статистики/аналитики: РСУБД или noSQL?
    #38772506
Ravlio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, но вопрос был не про шардирование, а про организацию стека для риалтайм-аналитики на noSQL и фильтрами по различным типам полей и их комбинациям. У кого какие есть идеи или практики — вот что хотелось узнать. Ну или на худой конец чтобы кто подсказал, как на РСУБД лучше всего сделать аналитику. Мне кажется, что мою структуру особо не улучшить. Но я хотел избавиться от промежуточной таблицы с сырыми данными и сразу делать одновременно инсерты-апдейты в таблицы группировок, а это 15-30 апдейтов на каждое действие. Может есть какая-то техника для такого.
...
Рейтинг: 0 / 0
Сервис Realtime-статистики/аналитики: РСУБД или noSQL?
    #38772943
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это тебе в раздел OLAP.
...
Рейтинг: 0 / 0
Сервис Realtime-статистики/аналитики: РСУБД или noSQL?
    #38773049
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это эмуляция онайн molap-а. Клеве, чё
...
Рейтинг: 0 / 0
Сервис Realtime-статистики/аналитики: РСУБД или noSQL?
    #38773597
Ravlio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята, с вас инфы, как с козла — молока. Олап-молап, ларёк-марёк, вокзал-базар. OLAP — это охрерень какая наводка. Только вот как сделать полноценный OLAP в реальном времени на BigData или хотя бы агрегацию данных в реальном времени, я так понимаю, из вас мало кто знает и подобной практики не имеет.
...
Рейтинг: 0 / 0
Сервис Realtime-статистики/аналитики: РСУБД или noSQL?
    #38773603
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ravlioкак сделать полноценный OLAP в реальном времени на BigData или хотя бы агрегацию данных в реальном времени, я так понимаю, из васна нашей планете мало кто знает и подобной практики не имеет.
...
Рейтинг: 0 / 0
Сервис Realtime-статистики/аналитики: РСУБД или noSQL?
    #38773630
Ravlio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ага, расскажи.

YouTube Video
...
Рейтинг: 0 / 0
Сервис Realtime-статистики/аналитики: РСУБД или noSQL?
    #38774012
DPH3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RavlioНу а в итоге мне хочется Business Intelligence с красивыми графиками и всевозможными выборками (не многомерные кубы, разумеется, но комбинации различных характеристик действия) на большом количестве данных и чтобы они отрабатывали быстро (менее секунды) для, к примеру, 50-100 выборок в секунду. Возможно с какими-то упрощениями (делаем партиции по дням, но лучше по неделям, и с ними работаем, как с горячими данными)

Если я правильно понимаю, за сутки проходят порядка единиц млн. показов, для каждого показа примерно байт на 100 дополнительной информации?
Т.е. в 16 GB памяти, влезет как раз все показы за неделю? Я бы вот так и сделал - загнал бы все в так или иначе отсортированный список в памяти и делал бы выборки по этому дереву. Может быть попробовал бы с поколоночным хранением )
Ну или бы искал inmemory olap, по идее должно хватить на довольно долгий срок, потом прикрутить шардинг по партнеру, как правильно сказали.
Ну или сразу spark какой-нибудь, там почти все из коробки, по идее. Но я с ним не игрался, так что совет только на основе чужого опыта.
...
Рейтинг: 0 / 0
Сервис Realtime-статистики/аналитики: РСУБД или noSQL?
    #38774050
Ravlio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарствую за ответ. Да, всё примерно так и есть, я планирую использовать вот такой укороченный формат для записи действий в прямо в память:

datetimenetwork_idcountry_idsite_idpage_idpartner_idsub_idformat_idbanner_idkeyword_ideventvalue01012014120221 2 23 2000 30000 20000 100 20 3080000023 1

Главная идея — это поле event который может быть любым действием (заход на сайт, клик, скачка и прочее) и его значение (ивент click, значение — 1, ивент transaction, значение — 50$) Таким образом убираем избыточность и существенно укорачиваем размер записи. Если основательно продумать колонки, то, думаю, даже в худшем случае всё действие будет занимать 100 байт. Все рефереры, юзерагенты я хочу попрятать в отдельную распределённую key-value базу. А для совсем уж серьёзных запросов по подстрокам и в больших промежутках времени, буду дублировать все сырые данные ещё и в hdfs.

А вот по занимаемому размеру тут есть ньюансы. Некоторые действия дублируются. Если это был клик по баннеру, то появится как минимум два действия: клик по баннеру для вебмастера и клик по баннеру рекламодателя, чтобы каждый видел свою статистику. А ещё могут быть уникальные и неуникальные клики. Итого, даже если у нас 100млн действий в сутки, они превращаются в среднем в 300млн. Если действие по 100 байт, то это 30гб Память сейчас в принципе очень дешёвая и я думаю, для realtime-статсов можно поставить десяток средних серверов по 300гб оперативки и Elasticsearch и этого должно хватить на месяц. Разумеется, начать нужно с малого, а потом доставлять сервера по мере окупаемости :)

И параллельно через Apache Storm можно (и нужно) делать архивную статистику (по принципу, что работает у меня сейчас) без навороченных выборок хоть в MySQL, чтобы люди могли смотреть всё что не охватывает realtime-статса. А для этого не нужно много серверов.

Думаю, осталось пожелать самому себе удачи. Ну а если будут ещё какие замечания или идеи — буду только рад услышать.
...
Рейтинг: 0 / 0
Сервис Realtime-статистики/аналитики: РСУБД или noSQL?
    #38774267
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ravlio, инструмент для решения широко класса (в том числе, и такого) информационно-логических задач был разработан 50 лет назад)) И ничего лучшего, пока, нет. Возьмите MUMPS и сделайте оптимальное решение Вашей задачи))
...
Рейтинг: 0 / 0
Сервис Realtime-статистики/аналитики: РСУБД или noSQL?
    #38787412
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Сервис Realtime-статистики/аналитики: РСУБД или noSQL?
    #38788247
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Сервис Realtime-статистики/аналитики: РСУБД или noSQL?
    #38788663
Фотография Ганнибал бен Гисгон Магонид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что даст вашим пользователем статистика, обновляемая чаще, чем раз в минуту?!
...
Рейтинг: 0 / 0
Сервис Realtime-статистики/аналитики: РСУБД или noSQL?
    #38794436
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RavlioРебята, с вас инфы, как с козла — молока. Олап-молап, ларёк-марёк, вокзал-базар. OLAP — это охрерень какая наводка. Только вот как сделать полноценный OLAP в реальном времени на BigData или хотя бы агрегацию данных в реальном времени, я так понимаю, из вас мало кто знает и подобной практики не имеет.
это у тебя не big data.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Сервис Realtime-статистики/аналитики: РСУБД или noSQL?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]