Я разрабатываю специальный инструмент отслеживания для маркетинговых кампаний. Этот инструмент находится посередине между объявлениями и целевыми страницами. Он заботится о сохранении всех данных от пользователя, таких как информация в пользовательском агенте, IP, клики на целевой странице и данные геокодирования IP-адресов пользователей (страна, интернет-провайдер и т. Д.).Лучший способ хранения миллионов записей в день данных, которые могут быть сгруппированы для статистических целей?
На данный момент у меня есть некоторые проблемы дизайна:
- Движение этих кампаний является очень и очень высок, поэтому потенциально у меня есть миллионы строк вставить в день. Эта система может иметь более одного пользователя, поэтому я не могу хранить все эти данные в одной таблице, потому что это станет беспорядком. Возможно, я могу разделить данные в более таблицах, по одной таблице на пользователя, но я не уверен в этом решении.
- Процесс сохранения данных должен выполняться как можно быстрее (несколько миллисекунд), поэтому я считаю, что NodeJS намного лучше, чем PHP для этого. Особенно в отношении скорости и ресурсов сервера. Я не хочу, чтобы сервер рушился из-за нехватки ОЗУ.
- Мне нужно сгруппировать эти данные в статистических целях. Например, у меня есть одна строка для каждого пользователя, который посещает мою целевую страницу, но мне нужно сгруппировать эти данные для отображения количества показов на этой целевой странице. Таким образом, все эти запросы должны выполняться как можно быстрее с этим большим количеством строк.
- Мне нужно геокодировать IP-адреса, поэтому мне нужна точная информация, например, страна, интернет-провайдер, тип подключения и т. Д., Но это может замедлить процесс сохранения данных, если я позвоню в службу API. И это должно быть сделано в режиме реального времени и не может быть сделано позже.
После процесса сохранения система должна выполнить перенаправление на целевую страницу. Время важно для того, чтобы не потерять никакого возможного свинца.
В принципе, я нахожу, что лучшие решения для:
- Эффективное управление очень большая база данных
- Сохранение данных от пользователей в кратчайшее время (мс)
- Если это возможно, сделать геокодирование внутрибрюшинно в кратчайшие сроки, без блокировки выполнения
- Оптимизация схемы и запросов для генерации статистики
Есть ли у вас какие-либо предложения? Заранее спасибо.
В этом случае вы можете использовать стек ELK. – xRahul
Воспользуйтесь журналами сервера; хранить исходные данные в одной таблице; использовать фоновые задачи для обработки IP-поиска для геокодирования; не увольняйте PHP как медленный и голодный, когда используется для этой цели, я сделал запись для сайтов с миллионами обращений в день с PHP, не имея накладных расходов –
В противном случае ваш вопрос является способом широкого использования для StackOverflow –