opium
@opium
Просто люблю качественно работать

Стоит ли использовать Mongo и Node.js для сервиса аналога Яндекс.Метрики и Google Analytics?

Есть один проект для анализа данных от посещения сайтов, по сути собирает данные юзера от просмотров страниц (ip, страны, города, браузеры, расширения экрана и прочее) и потом строит отчеты.
Данных очень много.
Все сейчас крутиться на perconadb + php. Таблицы Innodb
Когда идет на сайтах наплыв посещаемости то percona затыкается на запись.
Так же построение отчетов работает не очень быстро особенно по большим промежуткам времени. Запросы и индексы оптимизировали как могли, даже данные для этого местами денормализировали и нормализировали.
Вопрос имеет ли смысл перейти на mongo для данных?
Имеет ли смысл перевести место через которое собирается статистика на node.js
Бекенд с отчетами хочу оставить на php.
  • Вопрос задан
  • 4106 просмотров
Пригласить эксперта
Ответы на вопрос 6
@kaasius
Нода тут вас никак не спасёт, потому что узкое место у вас в БД.
Монга только отсрочит неминуемое.
А неминуемое состоит в том, чтобы перейти на очереди.
То есть, как бы сделал я - на машине, которая собирает статистику (принимает запросы от сайтов), все данные пишутся в очередь. Можно использовать RabbitMQ например. И больше эта машина ничем не занимается.
Вторая машина достает из очереди данные и кладет их в БД, делая дополнительно какую-то обработку этих данных.
При этом как первых, так и вторых машин у вас может быть несколько. А можно всё это запустить и на одной. В любом случае, работать это будет быстрее, а записывать в БД будет не 100 потоков, а один, предварительно консолидируя данные.
Ответ написан
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Нода может помочь, если Вы реализуете предварительную консолидацию данных в оперативной памяти. Про очереди - это правильная идея. А еще, нужно оптимизировать структуру БД, если вставка записей будет медленнее, чем их поток на входе, очередь постепенно начнет захлебываться и тут уж сколько хватит оперативной памяти, очередь просто сгладит нагрузки. Но из базы же еще нужно делать выборку при генерации отчетов, а она у Вас тоже медленная, поэтому думайте над структурой базы, оптимизируйте индексы, планы исполнения.
Ответ написан
Комментировать
direct_inject
@direct_inject
MongoDB + шардирование.
Ответ написан
Комментировать
@BasilioCat
Если у вас проблема в записи, сделайте так, чтобы запись была быстрее. Mongo вас спасет в том смысле, что запись можно вести не на один сервер/диск, а на несколько. Того же эффекта можно достичь, заменив медленый шпиндель (у вас же SATA?) на SSD, или на два SSD в страйпе, или на 4 ssd под каждую из тяжелых таблиц =) И, скорее всего, вы слишком много данных пишете в базу. Пишите меньше =) Чтение, агрегацию, склеивание и прочее надо вести на реплике (а то и нескольких) этой БД на другой машине. По IOPSам она должна быть не хуже мастера - то есть тоже на SSD. Если реплики воткнут, это не повлияет на реалтайм запись - просто реплики начнут отставать от мастера.
Ну и банальный совет - добавьте RAM, настройте innodb buffer pool - может он просто неэффективно используется.

Переводить запись на node возможно имеет смысл, если сложных вычислений при дергании счетчика не делается, а просто входные параметры пишутся в БД. Но если у вас этим сейчас справляется PHP - то зачем менять? Снесите на отдельную машину - лишние 100 (200 для двух машин) баксов в месяц куда дешевле оплаты программиста для переписывания этого добра.
Ответ написан
Комментировать
@fuCtor
Ruby разработчик
Делал сбор статистики на RabbitMQ + Mysql + PHP. В легкую перемалывал по несколько тысяч сообщений в секунду в один поток (PHP). Так что нода + очередь на фронт как минимум, снизит нагрузку на остальное + позволит сделать как уже писали ранее легко масштабируемую систему.
Ответ написан
Kaigorodov
@Kaigorodov
Инженер, математик, мечтатель
Да. В смысле Mongo или какой ещё недо-sql для big data. Но лучше чистое решение на распределённой базе данных, типа casandra. Если совсем уже "no-sql и не big data", но данных много то Riak.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы