Ubuntu 16.04. Имеется php-скрипт: самописный сборщик статистики посещения моего сайта. Суть его работы в следующем: на каждый запрос к моему сайту формируется строка в БД, в которой фиксируются параметры запроса. Для каждого сайта свой сборщик статистики.
Так как сайтов на сервере много и посещений каждого сайта не мало, появляется необходимость как-то оптимизировать работу сборщиков статистики.
Идея такая: в памяти висит какой-то процесс (желательно на php). Все мои сборщики статистики (со всех сайтов) отправляют ему данные. Каждые 30 секунд или когда накопиться, например, 1000 записей, процесс записывает их в базу данных. Как это можно сделать?
Все мои сборщики статистики (со всех сайтов) отправляют ему данные. Каждые 30 секунд или когда накопиться, например, 1000 записей, процесс записывает их в базу данных. Как это можно сделать?
Через crontab запускать процесс записи с нужной периодичностью. Руководство: man crontab
Да - и не нужно, чтоб процесс какой висел - просто Ваши сборщики пусть записывают в файл, построчно, например, а отттуда брать массивом и раскладывать для записи в базу - и просто запускать cronom скрипт, который будет делать это. Нисчего не висит, все красиво, оптимально и элегантно.
В целом, всё довольно просто:
Дьявол, как всегда, в мелочах. Во первых, если надо оптимизировать, то это явно не php. Нужен, хотя бы golang или python. Во вторых, нужно понять где бутылочное горлышко, действительно ли это именно БД? В третьих, если это реляционная БД, то переход на nosql может существенно ускорить работу с данными.
Ну а вообще, предлагаю использовать стек prometheus("бд") + grafana(dashboards, "графики") + node_exporter/telegraf (сборщики метрик) (про установку можно почитать, например, тут). Этот стек позволит не только не задумываться о том, как хранить данные, но и позволяет гибко настраивать графики. А сборщики метрик не только имеют "из коробки" довольно большое количество вариантов собираемых метрик, но и позволяют легко себя расширять.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Столкнулся с любопытным вопросомПо умолчанию json_encode шифрует utf8 символы в \u* и чтобы это отключить необходимо использовать опцию JSON_UNESCAPED_UNICODE
Выполняется файл php, в нем есть некий код и в конце он должен создать файл, но не создаёт, крон срабатывает и код выполняется но файл создать...