Здравствуйте! Необходимо хранить статистику активности очень большого количества страниц (допустим, около 1000, для начала). Данные будут обновляться раз в 10 секунд и должны храниться для будущего использования при отрисовке графиков. Где всё это чудо можно хранить? Подозреваю, что SQL не очень подходит, будет слишком большая нагрузка.
Ответ
Для начала небольшой расчет:
Снимок статистики каждые 10 секунд - это 6*60*24 = 8640 срезов в сутки.
Для 1000 сайтов при объеме сохраняемых данных даже в 100 байт получаем 8640*1000*100/1024/1024 = 824 Мб/сутки или 24 Гб/мес.
Для записи размером в килобайт за один раз это будет соответственно четверть терабайта в месяц.
Чтобы понять как эти даннные хранить, для начала нужно по такой же схеме рассчитать предполагаемый объем данных, определиться с требуемой глубиной хранения и требованиями по сохранности и доступности данных, предполагаемой интенсивностью запросов, понять насколько быстро допустимо получать отчет (графики).
Можно сэкономить на старых данных увеличивая шаг агрегации для них: например, данные старше месяца объединять в получасовые интервалы, а данные старше полугода и вовсе объединять в сутки.
Если речь идет о серьезном проекте, посмотрите в сторону специализированных решений для хранения временных рядов (Time Series DBMS) типа InfluxDB или событий типа яндексовского ClickHouse. Они как правило имеют функциональность для построения сложных запросов по временным рядам (сдвиги/наложения/произвольная агрегация по интервалам/дифференцирование/интегрирование и т.п.), настройки политик хранения данных разной глубины по времени, шардирование и реплицирование, кеширование "горячих" данных, но имеют и свои ограничения.
Комментариев нет:
Отправить комментарий