Страницы

Поиск по вопросам

пятница, 26 апреля 2019 г.

Java хранение больших статистических данных

Здравствуйте! Необходимо хранить статистику активности очень большого количества страниц (допустим, около 1000, для начала). Данные будут обновляться раз в 10 секунд и должны храниться для будущего использования при отрисовке графиков. Где всё это чудо можно хранить? Подозреваю, что SQL не очень подходит, будет слишком большая нагрузка.


Ответ

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

Комментариев нет:

Отправить комментарий