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.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽