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